Имя: Пароль:
1C
1С v8
Пустая группировка
0 Retributor
 
11.04.12
12:04
1С 8.2
  Цель: Адекватный обход группировок.
  Суть: Есть запрос. В запрос передается таблица с колонками "Номенклатура, Характеристика, Спецификация, Количество", к ней левым соединением присобачивается регистр сведений (виртуальная таблица с остатками). Все по правилам, разумеется, из таблицы-параметра выборка во временную, потом ко временной присоединяется регистр.
Все бы замечательно, если бы не эта спецификация. Она почти никак не относится к номенклатуре (то есть, в таблице может быть N одинаковых номенклатурных позиций с разными спецификациями).
Выход прост. Делаем списание по типу партий, точнее, по спецификациям. То есть, в запросе берем итоги количества (сумма) и остатка (максимум) по номенклатуре и характеристике. А дальше просто обходим по группировкам.
  Проблема: Не работает. Характеристика почти постоянно пустая, но может попасться и не пустая. В связи с чем итоги получать только по номенклатуре будет неверно. А обход группировки по пустой характеристике выдает ошибку чтения значения. Есть ли выход из ситуации?
1 Jstunner
 
11.04.12
12:06
дальше "регистра сведений с остатками" не читал..
2 hhhh
 
11.04.12
12:09
(0) выкинуть этот запрос и написать нормальный, без закидонов.
3 Retributor
 
11.04.12
12:15
Запрос иначе не сделать. Таблица, к которой мне нужно получить остатки, никуда не пишется и передать эти данные в запрос нет иного способа, кроме как через параметр в качестве источника данных. При работе необходимо контролировать остатки (которые получаются по номенклатуре и характеристике), потому их приходится распределять таким вот макаром по трем полям (Номенклатура, Характеристика, Спецификация). Обычный механизм партионного списания.
Проблема с группировкой по характеристике.
4 Retributor
 
11.04.12
12:19
Да, пардон, регистр накопления, а не регистр сведений. Оговорился. Прошу прощения.
5 hhhh
 
11.04.12
12:19
(3) ну выкиньте поле Спецификация из запроса. Вы же не додумались еще партии по спецификациям вести?
6 Retributor
 
11.04.12
12:24
Выкинуть поле Спецификация нельзя.
Суть обработки в заполнении материалов по продукции с контролем остатков. И есть требование таскать спецификацию за собой.
7 hhhh
 
11.04.12
12:27
(6) ну код покажите. Всегда всё работает с пустыми полями. ПРограмме вообще-то всё равно, пустое там поле или непустое.
8 Retributor
 
11.04.12
12:31
//хвост текста запроса
"|ИТОГИ
|    СУММА(Количество),
|    МАКСИМУМ(КоличествоОстаток)
|ПО
|    Номенклатура,
|    ХарактеристикаНоменклатуры";
Запрос.УстановитьПараметр("Период", ОбъектОбработки.МоментВремени());
Запрос.УстановитьПараметр("ПредварительнаяТаблица", ТаблицаМатериалов);

ВыборкаГрупНом = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаГрупНом.Следующий() Цикл
 ВыборкаГруп = ВыборкаГрупНом.Выбрать();
 Пока ВыборкаГруп.Следующий() Цикл
   КолОст = ВыборкаГруп.КоличествоОстаток;
   Выборка = ВыборкаГруп.Выбрать();
   Пока Выборка.Следующий() Цикл
     //тут идет обработка, но сюда даже не заходит
   КонецЦикла;
 КонецЦикла;
КонецЦикла;
9 hhhh
 
11.04.12
12:33
ну так может?

ВыборкаГруп = ВыборкаГрупНом.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
10 Retributor
 
11.04.12
12:36
Смех и грех. Да, спасибо. Сам себе мозги вскипятил глупым промахом.