Имя: Пароль:
1C
1С v8
обход результат запроса по группировкам
0 ВежливаяТварь
 
09.05.12
15:56
Добрый день. Столкнулся с мало приятной проблемой. Есть код:
Запрос = Новый Запрос();
   Запрос.Текст = "ВЫБРАТЬ
                  |    РеализацияТоваровУслугТовары.Ссылка,
                  |    РеализацияТоваровУслугТовары.Ссылка.Контрагент,
                  |    РеализацияТоваровУслугТовары.Номенклатура,
                  |    РеализацияТоваровУслугТовары.Количество,
                  |    РеализацияТоваровУслугТовары.Цена,
                  |    РеализацияТоваровУслугТовары.СтавкаНДС
                  |ПОМЕСТИТЬ Продажи
                  |ИЗ
                  |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
                  |ГДЕ
                  |    РеализацияТоваровУслугТовары.Ссылка.Проведен = ИСТИНА
                  |    И РеализацияТоваровУслугТовары.Ссылка.Дата >= &ДатаНач
                  |    И РеализацияТоваровУслугТовары.Ссылка.Дата <= &ДатаКон
                  |    И РеализацияТоваровУслугТовары.Ссылка.Контрагент В ИЕРАРХИИ(&ПолучателиДляВыгрузки)
                  |;
                  |
                  |////////////////////////////////////////////////////////////////////////////////
                  |ВЫБРАТЬ
                  |    Штрихкоды.Штрихкод,
                  |    Штрихкоды.Владелец
                  |ПОМЕСТИТЬ ПереченьШтрихкодов
                  |ИЗ
                  |    РегистрСведений.Штрихкоды КАК Штрихкоды
                  |;
                  |
                  |////////////////////////////////////////////////////////////////////////////////
                  |ВЫБРАТЬ
                  |    Продажи.Ссылка,
                  |    Продажи.Ссылка.Дата КАК Дата,
                  |    Продажи.Ссылка.Номер КАК Номер,
                  |    Продажи.Ссылка.Контрагент.ИНН КАК ИНН,
                  |    Продажи.Ссылка.Контрагент.Код КАК Код,
                  |    Продажи.Ссылка.Контрагент.Наименование КАК Контрагент,
                  |    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Продажи.Номенклатура.Наименование) КАК НоменклатураНаименование,
                  |    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Продажи.Номенклатура.Артикул) КАК НоменклатураАртикул,
                  |    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПереченьШтрихкодов.Штрихкод) КАК Штрихкод,
                  |    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Продажи.Номенклатура.Код) КАК НоменклатураКод,
                  |    СУММА(Продажи.Количество) КАК Количество,
                  |    СУММА(Продажи.Цена) КАК Цена,
                  |    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Продажи.СтавкаНДС) КАК СтавкаНДС
                  |ИЗ
                  |    Продажи КАК Продажи
                  |        ЛЕВОЕ СОЕДИНЕНИЕ ПереченьШтрихкодов КАК ПереченьШтрихкодов
                  |        ПО Продажи.Контрагент.Ссылка = ПереченьШтрихкодов.Владелец.Ссылка
                  |
                  |СГРУППИРОВАТЬ ПО
                  |    Продажи.Ссылка,
                  |    Продажи.Ссылка.Дата,
                  |    Продажи.Ссылка.Номер,
                  |    Продажи.Ссылка.Контрагент.ИНН,
                  |    Продажи.Ссылка.Контрагент.Код,
                  |    Продажи.Ссылка.Контрагент.Наименование";
   
   Запрос.УстановитьПараметр("ПолучателиДляВыгрузки",ПолучателиДляВыгрузки);        
   Запрос.установитьПараметр("ДатаНач",НачалоДня(ДатаНачала));
   Запрос.установитьПараметр("ДатаКон",КонецДня(ДатаКонца));
   Запрос.установитьПараметр("ФактическийАдресКонтрагента",Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("000000008"));

   РезультатЗапроса = Запрос.Выполнить();
   Если РезультатЗапроса.Пустой() Тогда
       Сообщить ("Отсутствуют данные для вывода");
       Возврат;
   Конецесли;
   
   УдалитьСтарыеФайлыВыгрузки();
   Файл = Новый ТекстовыйДокумент();
   РезультатЗапроса=РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

   Пока РезультатЗапроса.Следующий() Цикл
       Файл.ДобавитьСтроку("НачалоДокумента -----------------------------------"); // отметка начала документа.
       Файл.ДобавитьСтроку("Ш " + "Дата " + РезультатЗапроса.Дата); // Дата документа
       Файл.ДобавитьСтроку("Ш " + "НомерДок " + РезультатЗапроса.Номер); // Номер документа
       Файл.ДобавитьСтроку("Ш " + "ИНН " + РезультатЗапроса.Инн);
       Файл.ДобавитьСтроку("Ш " + "КодПолучателя " + РезультатЗапроса.Код); // Код покупателя
       Файл.ДобавитьСтроку("Ш " + "ИмяПолучателя " + РезультатЗапроса.Контрагент); // Имя покупателя
       //Файл.ДобавитьСтроку("Ш " + "АдресДоставки " + ); // Адрес доставки
       
       // записываем данные табличной части: ИмяТовара, КодТовара, АртикулТовара, ШКТовара, Количество, Цена, НДС.
       
       ДеталиДокумента=РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.прямой);
       Пока ДеталиДокумента.Следующий() Цикл
           Файл.ДобавитьСтроку("Т " + "ИмяТовара " + ДеталиДокумента.НоменклатураНаименование); // Имя товара
           Файл.ДобавитьСтроку("Т " + "АртикулТовара " + ДеталиДокумента.НоменклатураАртикул); // Артикул товара
           Файл.ДобавитьСтроку("Т " + "ШКТовара " + ДеталиДокумента.Штрихкод);
           Файл.ДобавитьСтроку("Т " + "КодТовара " + ДеталиДокумента.НоменклатураКод); // Код товара
           Файл.ДобавитьСтроку("Т " + "Количество " +ДеталиДокумента.Количество); // Количество
           Файл.ДобавитьСтроку("Т " + "Цена " + ДеталиДокумента.Цена); // Цена
           Файл.ДобавитьСтроку("Т " + "НДС " +  ДеталиДокумента.СтавкаНДС); // НДС (значение, а не сумма)
       КонецЦикла;
       Файл.ДобавитьСтроку("КонецДокумента ===================================="); // отметка конца документа.
   КонецЦикла;    
   ПутьКФайлуВыгрузки=ПутьККаталогуСФайламиВыгрузки+СформироватьИмяФайла();
   Файл.Записать(ПутьКФайлуВыгрузки,"windows-1251");
   СжатьФайлВыгрузки(ПутьКФайлуВыгрузки);
   Сообщить("Выгрузка завершена. Расположение файла выгрузки: " + ПутьККаталогуСФайламиВыгрузки);


Всё работает нормально только вот этот кусуок:
ДеталиДокумента=РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.прямой);
       Пока ДеталиДокумента.Следующий() Цикл
           Файл.ДобавитьСтроку("Т " + "ИмяТовара " + ДеталиДокумента.НоменклатураНаименование); // Имя товара
           Файл.ДобавитьСтроку("Т " + "АртикулТовара " + ДеталиДокумента.НоменклатураАртикул); // Артикул товара
           Файл.ДобавитьСтроку("Т " + "ШКТовара " + ДеталиДокумента.Штрихкод);
           Файл.ДобавитьСтроку("Т " + "КодТовара " + ДеталиДокумента.НоменклатураКод); // Код товара
           Файл.ДобавитьСтроку("Т " + "Количество " +ДеталиДокумента.Количество); // Количество
           Файл.ДобавитьСтроку("Т " + "Цена " + ДеталиДокумента.Цена); // Цена
           Файл.ДобавитьСтроку("Т " + "НДС " +  ДеталиДокумента.СтавкаНДС); // НДС (значение, а не сумма)
       КонецЦикла;
не хочет выполнятся. что я делаю не так?
1 ВежливаяТварь
 
09.05.12
15:58
По сути дела код просто вытаскивает расходные накладные и записывает их в тхт. Где я групирую по документам он выводит нормально, а когда пытаюсь вывести детали он их как будто не видит.
2 proger2011
 
09.05.12
15:59
У тебя нет группировок для обхода, ты по сути свернул. Группировки будут если у тебя в запросе будут ИТОГИ
3 n1cr0s
 
09.05.12
16:00
(0) Итоги?
4 proger2011
 
09.05.12
16:02
Кстати такая группировка не имеет смысла


|СГРУППИРОВАТЬ ПО
                  |    Продажи.Ссылка,
                  |    Продажи.Ссылка.Дата,
                  |    Продажи.Ссылка.Номер,
                  |    Продажи.Ссылка.Контрагент.ИНН,
                  |    Продажи.Ссылка.Контрагент.Код,
                  |    Продажи.Ссылка.Контрагент.Наименование";


Или это конструктор такое нахерачил?
5 ВежливаяТварь
 
09.05.12
16:04
(4)Конструктор
(2)(3) А можно чуть подробней про итоги?
6 Ranger_83
 
09.05.12
16:06
(5)Используй консоль отчетов,закладку итоги в конструкторе и вывод в иерархический список
7 proger2011
 
09.05.12
16:07
(5) Когда используешь СГРУППИРОВАТЬ то промежуточные данные удаляются и создаются вместо них итоги, когда используешь ИТОГИ то промежуточные данные не удаляются, а просто добавляются строки с итогами
8 ВежливаяТварь
 
09.05.12
16:10
теперь понял. Сейчас попробую. Спасибо.
9 ВежливаяТварь
 
09.05.12
16:16
Все сработало. Огромное спасибо.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.