kvasov
Дата: 09.08.2005 13:25:59
Спасибо, прочитал, но вот на практике с внедрением пока не могу врубится.
Предположим есть класс «Поставки» с 4 свойствами – наименование товара, группа и подгруппа товара и количество, и есть 6 обьектов этого класса.
Если сохранять «по-умолчанию», то обьекты сохраняются так:
^Naklad(1)=$lb(“Группа4”,”Подгруппа18”, “Товар5”, 30)
^Naklad(2)=$lb(“Группа2”,”Подгруппа3”, “Товар7”, 30)
^Naklad(3)=$lb(“Группа2”,”Подгруппа3”, “Товар7”, 30)
^Naklad(4)=$lb(“Группа14”,”Подгруппа2”, “Товар1”, 30)
^Naklad(5)=$lb(“Группа14”,”Подгруппа18”, “Товар33”, 30)
^Naklad(6)=$lb(“Группа14”,”Подгруппа18”, “Товар5”, 30)
Хотелось бы решить такую задачу – при записи обьектов на лету вычислять и хранить еще и итоги по суммарному количеству товара по группам и подгруппам.
То есть при записи 6 обьектов должна появиться какая-то такая конструкция:
^Naklad(“Группа2”)=60
^Naklad(“Группа2”,”Подгруппа3”)=60
^Naklad(“Группа2”,”Подгруппа3”,0)=2 - инкремент подгруппы
^Naklad(“Группа2”,”Подгруппа3”,1)=$lb(“Товар7”, 30)
^Naklad(“Группа2”,”Подгруппа3”,2)=$lb(“Товар7”, 30)
^Naklad(“Группа4”)=30
^Naklad(“Группа4”,”Подгруппа18”)=30
^Naklad(“Группа4”,”Подгруппа18”,0)=1 - инкремент подгруппы
^Naklad(“Группа4”,”Подгруппа18”,1)=$lb(“Товар5”, 30)
^Naklad(“Группа14”)=90
^Naklad(“Группа14”,”Подгруппа2”)=30
^Naklad(“Группа14”,”Подгруппа2”,0)=1 - инкремент подгруппы
^Naklad(“Группа14”,”Подгруппа2”,1)=$lb(“Товар1”, 30)
^Naklad(“Группа14”,”Подгруппа18”)=60
^Naklad(“Группа14”,”Подгруппа18”,0)=2 - инкремент подгруппы
^Naklad(“Группа14”,”Подгруппа18”,1)=$lb(“Товар33”, 30)
^Naklad(“Группа14”,”Подгруппа18”,2)=$lb(“Товар5”, 30)
Возникнет вопрос – что же будет идентификатором обьекта?
И ответ бы такой: OID – это список - группа, подгруппа и инкремент подгруппы.
т.е.:
OID обьекта (1)=$lb(“Группа4”,”Подгруппа18”, 1)
OID обьекта (2)=$lb(“Группа2”,”Подгруппа3”,1)
OID обьекта (3)=$lb(“Группа2”,”Подгруппа3”,2)
OID обьекта (4)=$lb(“Группа14”,”Подгруппа2”, 1)
OID обьекта (5)=$lb(“Группа14”,”Подгруппа18”, 1)
OID обьекта (6)=$lb(“Группа14”,”Подгруппа18”, 2)
Вообще реально решить такую задачу каким-нибудь образом?
Какой Cache Storage надо изучать?
И вот эти методы %LoadData, %SaveData – их в Studio прямо в классе Поставки надо писать ниже свойств что-ли – дык вроде ошибки компиляции идут?
Одним словом, хотелось бы включить мультидименсион.
VadimF
Дата: 15.08.2005 01:52:19
Для этого не стоит использовать Cache' Storage.
Гораздо правильнее использовать для этой цели стандартный Storage.
Чтобы получить структуру с нуля с подобной стратегией хранения можно сделать следующее:
Создать класс "Товар".
Поле "Группа" - ссылка на отдельный класс "Группа", Поле "Подгруппа" ссылка на отдельный класс "Подгруппа ".
Создать индекс, который будет SQL Primary Key и OID по полям Группа, Подгруппа, Id.
Задать правило вычисления для значения по умолчанию Id (например с помощью $Increment), чтобы не нужно было руками присваивать.
Товары будут храниться в глобале, который Вы описали.
Группы и Подгруппы в отдельных классах.
Если есть существующие данные, то нужно использовать Cache' SQL Storage.
Я точно не знаю Вашу задачу, но скорее всего можно просто сделать класс c обычным Id, ссылками на группу и подгруппу. И построить BitMap-индекс по свойствам группа и подгруппа.
Количество будет вычисляться мгновенно через SQL, так как запрос будет выполняться с помощью индекса.
Можно сделать с помощью встроенного SQL методы, которые будут возвращать количество товаров в каждой группе.
BitMap-индексы в Cache' работают крайне эффективно и их можно применять не только в ХД, но и в OLTP-приложениях.
Вадим