Имя: Пароль:
1C
1С v8
Нарастающий итог и ВычислитьВыражение в СКД
0 pessok
 
06.07.12
16:05
Всем доброго времени суток. Рисую простенький отчетик, в котором надо потребность на производство и фактическое списане под него. Нужно вывести нарастающие итоги по периодичности неделя. Усмотрел в СКД прекрасную функцию ВычислитьВыражение, раскурил, попробовал, все отлично, за одним маленьким исключением... Она не суммирует, если в текущем периоде вычисляемое выражение = 0.

Запрос:

ВЫБРАТЬ
   ВложенныйЗапрос.Период КАК Период,
   ВложенныйЗапрос.Номенклатура КАК Номенклатура,
   ВложенныйЗапрос.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
   СУММА(ЕСТЬNULL(ВложенныйЗапрос.Лимит, 0)) КАК Лимит,
   СУММА(ЕСТЬNULL(ВложенныйЗапрос.Отпущено, 0)) КАК Отпущено
ИЗ
   (ВЫБРАТЬ
       МатериалыВПроизводствеОстаткиИОбороты.Период КАК Период,
       МатериалыВПроизводствеОстаткиИОбороты.Затрата КАК Номенклатура,
       МатериалыВПроизводствеОстаткиИОбороты.ХарактеристикаЗатраты КАК ХарактеристикаНоменклатуры,
       0 КАК Лимит,
       СУММА(ЕСТЬNULL(МатериалыВПроизводствеОстаткиИОбороты.КоличествоПриход, 0)) КАК Отпущено
   ИЗ
       РегистрНакопления.МатериалыВПроизводстве.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Неделя, , ) КАК МатериалыВПроизводствеОстаткиИОбороты
   
   СГРУППИРОВАТЬ ПО
       МатериалыВПроизводствеОстаткиИОбороты.Затрата,
       МатериалыВПроизводствеОстаткиИОбороты.ХарактеристикаЗатраты,
       МатериалыВПроизводствеОстаткиИОбороты.Период
   
   ОБЪЕДИНИТЬ
   
   ВЫБРАТЬ
       ПотребностиЗаказовНаПроизводствоОстаткиИОбороты.Период,
       ПотребностиЗаказовНаПроизводствоОстаткиИОбороты.Номенклатура,
       ПотребностиЗаказовНаПроизводствоОстаткиИОбороты.ХарактеристикаНоменклатуры,
       ПотребностиЗаказовНаПроизводствоОстаткиИОбороты.КоличествоПриход,
       0
   ИЗ
       РегистрНакопления.ПотребностиЗаказовНаПроизводство.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Неделя, , ) КАК ПотребностиЗаказовНаПроизводствоОстаткиИОбороты) КАК ВложенныйЗапрос

СГРУППИРОВАТЬ ПО
   ВложенныйЗапрос.Период,
   ВложенныйЗапрос.ХарактеристикаНоменклатуры,
   ВложенныйЗапрос.Номенклатура

УПОРЯДОЧИТЬ ПО
   Период,
   Номенклатура,
   ХарактеристикаНоменклатуры


В самой СКД делаю вычисляемое поле КонечныйОстаток
ВычислитьВыражение("Сумма(Лимит-Отпущено)", "Период" , ,"Первая", "Текущая")
делаю его ресурсом. Все по классике.

В отчет вывожу таблицу - в строках Номенклатура/Характеристика, в колонках - Период.

По тем периодам, где движение было - прекрасно суммирует, где движения не было - NULL, проверки на NULL вроде быб есть... По логике, я думал, что она возьмет значение предыдущей группировки и прибавит к нему 0, но не тут то было. Куда копать? Заранее спасибо!
1 pessok
 
06.07.12
16:19
вовремя я, да :) пятница, вечер :)
отложим до понедельника :)
2 pessok
 
09.07.12
09:32
ну вот и утро понедельника. апну :)
3 ChAlex
 
09.07.12
10:05
Попробуй задать явно тип значения функции "число" и значимость
4 ChAlex
 
09.07.12
10:07
+(3) Можно еще EСТЬNULL(ВычислитьВыражение("Сумма(Лимит-Отпущено)", "Период" , ,"Первая", "Текущая"),0)
5 pessok
 
09.07.12
10:09
(3), (4) пробовал, не взлетает. на этот период совсем нет оборота, и не считает таким образом...
6 pessok
 
09.07.12
10:16
(4) даже больше скажу:
EСТЬNULL(ВычислитьВыражение("Сумма(Лимит-Отпущено)", "Период" , ,"Первая", "Текущая"),"ФФФФФФФ") эти самые ФФФФФФФ не выводит. Т.е. в колонке даже не нулл, а хз что...
7 Bober
 
09.07.12
11:51
попробуй тогда такую вещь как дополнение периода
8 IVT_2009
 
09.07.12
12:13
Проблема аналогичная , есть взаиморасчеты . Если нет движения в периоде - то почему то начинает начальный остаток терять. Как решить ? (Дополнение - Движение и граница периода)
9 acsent
 
09.07.12
12:17
ВычислитьВыражение("Сумма(EСТЬNULL(Лимит-Отпущено, 0))", "Период" , ,"Первая", "Текущая")
10 pessok
 
09.07.12
12:46
(7), (8) не помогло :(
(8) тоже не помогло

З.Ы. Пробовал прицеплять к производственному календарю обороты и, проверяя на нулл, писать нули, но тоже не выводит
11 pessok
 
09.07.12
13:24
разобрался. идея такая:
берем таблицу с периодами, например производственный календарь.
к ней по периоду, левым соединением, цепляем таблицу номенклатуры (без оборотов!) из виртуальной таблицы ОстаткиИОбороты. Все это запихиваем во вложенный запрос. Второй вложенный запрос - все тоже самое, но уже добавляем обороты по периодам. К первому вложенному запросу присоединяем левым соединением второй, по номенклатуре, характеристике, периоду. У меня взлетело!
12 Bober
 
09.07.12
13:38
(11) попробуй тогда такой вариант
13 Bober
 
10.07.12
20:10
(11) как вариант:
закрой пользовательский доступ к полю-ресурс из набора
и создай свое вычисляемое поле с выражением
"ВЫБОР КОГДА Лимит есть null тогда 0 иначе Лимит конец"

или другой