Имя: Пароль:
1C
1С v8
СКД и расчет итогов
0 S_Scorp
 
05.10.11
14:52
Доброго времени суток.

По теме. Я об этом уже писал, но из-за чего именно происходил неправильный расчет итогов еще не знал. Теперь вот удалось выявить закономерность.

Есть отчет на СКД. Запрос представляет собой объединение двух виртуальных таблиц типа ОстаткиИОбороты. Вот он:



ВЫБРАТЬ
СкидкиКлиентовОстаткиИОбороты.Регистратор,
СкидкиКлиентовОстаткиИОбороты.Клиент,
СкидкиКлиентовОстаткиИОбороты.ВидСкидки,
СкидкиКлиентовОстаткиИОбороты.Валюта,
СкидкиКлиентовОстаткиИОбороты.ПериодСекунда,
СкидкиКлиентовОстаткиИОбороты.СуммаНачальныйОстаток,
СкидкиКлиентовОстаткиИОбороты.СуммаКонечныйОстаток,
СкидкиКлиентовОстаткиИОбороты.СуммаПриход,
СкидкиКлиентовОстаткиИОбороты.СуммаРасход,
0 КАК СуммаНачальныйОстатокРезерв,
0 КАК СуммаКонечныйОстатокРезерв,
0 КАК СуммаПриходРезерв,
0 КАК СуммаРасходРезерв
ИЗ
РегистрНакопления.СкидкиКлиентов.ОстаткиИОбороты({(&НачалоПериода)}, {(&КонецПериода)}, Авто, , ВидСкидки <> &Задолженность) КАК СкидкиКлиентовОстаткиИОбороты

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
РезервыСкидкиОстаткиИОбороты.Регистратор,
РезервыСкидкиОстаткиИОбороты.Клиент,
РезервыСкидкиОстаткиИОбороты.ВидСкидки,
РезервыСкидкиОстаткиИОбороты.Валюта,
РезервыСкидкиОстаткиИОбороты.ПериодСекунда,
0,
0,
0,
0,
РезервыСкидкиОстаткиИОбороты.СуммаНачальныйОстаток,
РезервыСкидкиОстаткиИОбороты.СуммаКонечныйОстаток,
РезервыСкидкиОстаткиИОбороты.СуммаПриход,
РезервыСкидкиОстаткиИОбороты.СуммаРасход
ИЗ
РегистрНакопления.РезервыСкидки.ОстаткиИОбороты({(&НачалоПериода)}, {(&КОнецПериода)}, Авто, , ) КАК РезервыСкидкиОстаткиИОбороты

==============================================================
Скрин1: http://savepic.su/151676.jpg
Скрин2: http://savepic.su/141436.jpg
Если в СКД задать вложенные группировки: Клиент-ВидСкидки-Регистратор то итоги расчитываются не правильно. На скрине1 видно, что конечный остаток по 2-й группировке равен нулю, что не верно.

На втором скрине видно, что если убрать группировку по регистратору, то все считается правильно!



Если запустить этот запрос в Консоли запросов, то там всегда конечные начальные остатки считаются верно. Видимо дело в СКД? Или я что то не так делаю?



З.Ы. Пробовал тоже самое проделать с построителем отчета, результат тот же. Пробовал делать соединение(а не объединение), результат тот же. Пробовал играться с параметрами виртуальных таблиц (Периодичность,Метод дополнения) - безрезультатно. Пробовал разбивать виртуальные таблицы на два отдельных набора данных, а дальше соединял, либо объединял их, тоже неправильные конечные и начальные остатки.
1 kible
 
05.10.11
15:02
Тоже интересно.
2 Vakhrin
 
05.10.11
15:04
итоги без регистратора
+
движения с регистратором
+
объединение по измерениям
3 S_Scorp
 
05.10.11
15:07
(2) Не совсем понял, объясни пожалуйста
4 Vakhrin
 
05.10.11
15:09
два запроса писать и объединять
в первом только итоги по измерениям
во втором только движения до регистратора
5 Fragster
 
гуру
05.10.11
15:11
все потому что кто-то не умет пользоваться поиском. нужно задать правильно роли
6 S_Scorp
 
05.10.11
15:21
А что не правильно в роли:
Скрин3: "http://savepic.su/163957.jpg"
7 IronDemon
 
05.10.11
15:37
Что за "Сумма2"?
8 IronDemon
 
05.10.11
15:38
Сделай объединение не запросом а СКД.
Регистратор и ПериодСекунда в дополнительные поля а не группировку.
9 S_Scorp
 
05.10.11
15:56
(8) Объединение пробовал делать СКД, а не запросом, одинаковый итог.

"Регистратор и ПериодСекунда в дополнительные поля а не группировку" - как это в дополнительные поля? Т.е. к предыдущей группировке добавить? Но ведь Регистратор это период и его нельзя вместе с измерением выводить. Поясни пожалста, что имел в виду?
10 S_Scorp
 
05.10.11
15:57
Сумма2 это просто нахвание группировки ресурсов. Оно может быть любым - главное чтоб оно было одинаковое для нач и кон остатка. У меня есть два ресурса СуммаСкидки  и Сумма резерва, поэтому для каждого своя группировка "Сумма" и "Сумма2"
11 IronDemon
 
05.10.11
15:58
Ошибся, в выводимые поля. Чтобы детальные записи были.
12 S_Scorp
 
05.10.11
16:04
(11) так тож не получилось, эффект тот же:
http://savepic.su/185217.png
13 S_Scorp
 
05.10.11
16:14
интересно еще то, что ниже, по 2-й группировке "Скидки для сетей" конечный остаток посчитался верно
14 S_Scorp
 
05.10.11
16:30
пробовал засунуть объединение во вложенный запрос и с него получать данные - не помогло
15 S_Scorp
 
05.10.11
17:26
ап
16 chingiz
 
05.10.11
17:52
Глупое предложение аля - метод тыка. Попробуй в запросе ресурсы кинуть в суммируемые поля...
17 Vakhrin
 
05.10.11
20:34
кури типовые отчеты...
18 Necessitudo
 
05.10.11
21:35
Кури СКД:Бесплатный  курс. Намекну, что стоит поиграться с добавлением в список выбираемых полей Период - Секунда.
19 Necessitudo
 
05.10.11
21:36
Ну и еще вроде с галочкой Дополнительный)
20 S_Scorp
 
06.10.11
08:00
Я ведь писал, что пробовал Период-Секунда и как группировку и как выбранное поле, один фиг не получается.

Может кто нибудь показать пример запроса из двух виртуальных таблиц ОстатковИОборотов на скд, чтоб итоги правильно рассчитывались, несмотря на присутствие поля регистратор в детальных записях?
21 PVV65
 
06.10.11
09:04
Пример отчета http://www.fayloobmennik.net/1041072
22 S_Scorp
 
06.10.11
10:35
(21) благодарю! Но у тебя в связях наборов стоит галочка "Обязательная связь". Никак не могу разобраться, что она означает, но очень похоже, что левое соединение. А для моей задачи необходим аналог полного соединения, т.к. могут быть две похожие записи из разных регистров с одинаковыми измерениями (напр. Склад и Номенклатура), но разными регистраторами. В этом случае в отчет должны попасть обе записи в двух разных строках! Я пробовал делать полное соединение в рамках одного запроса, но там вытекают старые проблемы с расчетом нач. и кон.остатков!
23 S_Scorp
 
06.10.11
11:47
Разобрался. Создал еще один наборданных, в котором соединил все регистры в запросе полным соединением - получился некий сводный набор данных. Затем левым соединением присобачил к нему два предыдущих набора. Все работает.

Проблема с неправильным расчетом нач. и кон. остатков решилась после того, как я в связях наборов данных, помимо регистратора и измерений указал еще и ПериодСекунда. При этом, ПериодСекунду в выбранных полях СКД можно не указывать.

Спасибо всем, кто помогал. Отдельно спасибо PVV65, не поленился и прислал отчет, который натолкнул меня на верное решение.

Вот отчет на СКД для 8.2 на упр.форме законченном виде:
http://www.fayloobmennik.net/1041374
24 PVV65
 
06.10.11
12:03
(23) >>Создал еще один наборданных, в котором соединил все регистры в запросе полным соединением

В СКД есть набор данный - Объединение. Т.е. можно обойтись и без дополнительных запросов. Пример решения с полным соединением - http://www.fayloobmennik.net/1041421
Обрати внимание на роли набора данных - объединения.
25 S_Scorp
 
06.10.11
12:16
Я пробовал этот вариант, там ситуация была такова, что если период или регистратор присутствуют в выбранных полях, то итоги по измеренияи не считались или считались не правильно, а если рег. и периода не было, то все считалось правильно. Таким образом, первый вариант с соединением наборов данных единственно правильный, насколько я смог разобраться!
26 PVV65
 
06.10.11
12:27
(25) В (24) вполне рабочий отчет. Разве что - красоту навести.
27 S_Scorp
 
06.10.11
13:15
Спасибо!
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший