powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Простой вопрос по суммированию значений
13 сообщений из 13, страница 1 из 1
Простой вопрос по суммированию значений
    #37015551
coder1cv8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Даже не удобно как-то спрашивать... )

Есть 2 класса:
Код: plaintext
1.
2.
3.
4.
Class ru.coder1cv8.class1 Extends %Persistent
{
Property someone As list of class2
}
Код: plaintext
1.
2.
3.
4.
Class ru.coder1cv8.class2 Extends %SerialObject
{
Property payment As %Numeric
}
Как в Каше по определенному экземпляру class1 получить сумму полей payment?
С помощью embedded SQL или еще как...
...
Рейтинг: 0 / 0
Простой вопрос по суммированию значений
    #37015744
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
coder1cv8,
Вариант 1:
изменить структуру хранения (Просмотр->Просмотр способа хранения)
чтобы коллекция сохранялась как вложенная подтаблица. Из минусов - перенос данных в новую структуру хранения
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Class ru.coder1cv8.class1 Extends (%Persistent) {
Property someone As list Of class2;
<Storage name="Default">
<Data name="class1DefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
<Data name="someone">
<Attribute>someone</Attribute>
<Structure>subnode</Structure>
<Subscript>"someone"</Subscript>
</Data>
<DataLocation>^ru.coder1cv8.class1D</DataLocation>
<DefaultData>class1DefaultData</DefaultData>
<ExtentSize> 100 </ExtentSize>
<IdLocation>^ru.coder1cv8.class1D</IdLocation>
<IndexLocation>^ru.coder1cv8.class1I</IndexLocation>
<StreamLocation>^ru.coder1cv8.class1S</StreamLocation>
<Type>%Library.CacheStorage</Type>
</Storage>
}
Обратите внимание на
Код: plaintext
1.
2.
3.
4.
5.
<Data name="someone">
<Attribute>someone</Attribute>
<Structure>subnode</Structure>
<Subscript>"someone"</Subscript>
</Data>
затем, собственно, запрос:
Код: plaintext
1.
2.
&sql(Select Sum(someone_payment) Into :sum From ru_coder1cv8.class1_someone Where class1=:class1)
w !,"Sum:", sum

Вариант 2: Написать метод и объявить его хранимой процедурой.В методе использовать объектный интерфейс.
...
Рейтинг: 0 / 0
Простой вопрос по суммированию значений
    #37015793
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
coder1cv8 ,

Код: plaintext
1.
2.
3.
4.
select
  id,
  (select sum(payment) from ru_coder1cv8.class2 where $listfind(a.someone,$listbuild(%ID))> 0 )
from ru_coder1cv8.class1 a where id= 6 
...
Рейтинг: 0 / 0
Простой вопрос по суммированию значений
    #37015825
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или так:

Код: plaintext
1.
2.
3.
4.
select
  id,
  (select sum(payment) from ru_coder1cv8.class2 where $listbuild(%ID) %INLIST a.someone)
from ru_coder1cv8.class1 a where id= 6 
...
Рейтинг: 0 / 0
Простой вопрос по суммированию значений
    #37015833
coder1cv8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
doublefint,

А у меня все пока на стадии проектирования, поэтому структуру хранения поменять не проблема )
Вы предлагаете class2 сделать тоже Persistent, я правильно понял?

Я изначально по этому пути и пошел тоже, но почему-то на запрос:
Код: plaintext
1.
select * from ru_coder1cv8.class1_someone
Каше говорит: "таблица не найдена"
...
Рейтинг: 0 / 0
Простой вопрос по суммированию значений
    #37015868
coder1cv8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servitИли так:

Код: plaintext
1.
2.
3.
4.
select
  id,
  (select sum(payment) from ru_coder1cv8.class2 where $listbuild(%ID) %INLIST a.someone)
from ru_coder1cv8.class1 a where id= 6 

Вот это мне гораздо больше нравится! Спасибо, работает на ура )
...
Рейтинг: 0 / 0
Простой вопрос по суммированию значений
    #37016019
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
coder1cv8, я не предлагал делать хранимым class2, a только изменить струтктуру хранения, чтобы элементы коллекции не складывались в список $lb, а располагались в узлах глобали. servit предложил третий вариант. У каждого варинта есть свои недостатки. Рекомендую вернуться к рассмотрению class2 Extends %Persistent
...
Рейтинг: 0 / 0
Простой вопрос по суммированию значений
    #37016278
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мой пример кода был рассчитан на "class2 Extends %Persistent".
Для случая с %SerialObject запрос вряд ли получится сделать только лишь встроенными sql-средствами, так как агрегатные функции рассчитаны на курсор, а не коллекции.
...
Рейтинг: 0 / 0
Простой вопрос по суммированию значений
    #37016566
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так ка к у вас все еще на стадии проектирования, совет - не связываетесь с коллекциями (array,list)
если у вас будет много связанных объектов. А лучше вообще не связывайтесь.

Лучше делайте через relationship, лучше one-many (более универсально), чтобы не иметь потом проблем с производительностью и т.п.
...
Рейтинг: 0 / 0
Простой вопрос по суммированию значений
    #37016632
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н., хороший совет. Именно это и пытался сказать :)
...
Рейтинг: 0 / 0
Простой вопрос по суммированию значений
    #37017741
coder1cv8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нда... про relationship я что-то вообще забыл )
Сказывается видимо мой 1С-ный опыт )
...
Рейтинг: 0 / 0
Простой вопрос по суммированию значений
    #37020648
coder1cv8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit,

а зачем $listbuild в Вашем примере, кстати?
...
Рейтинг: 0 / 0
Простой вопрос по суммированию значений
    #37020765
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
coder1cv8servit,

а зачем $listbuild в Вашем примере, кстати?Потому что элементом списка является список из одного элемента - идентификатора объекта.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Простой вопрос по суммированию значений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]