Имя: Пароль:
1C
1С v8
Печать реестра сертификатов
0 neo-55555
 
13.08.15
14:53
Добрый день, друзья. Написал внешнюю печатную форму для печати сертификатов в УТ 10.3. Выдает только первый товар из накладной. Как сделать, чтобы выводился весь товар. Помогите пожалуйста.
Код:
Функция Печать() Экспорт

    ТабДок        = Новый ТабличныйДокумент;
    Макет         = ПолучитьМакет("Сертификат");
    ОбластьШапки  = Макет.ПолучитьОбласть("Шапка");
    ОбластьДанные = Макет.ПолучитьОбласть("Данные");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    
    ОбластьШапки.Параметры.ТекстЗаголовка = "Товарная накладная " + СсылкаНаОбъект.Номер;
    ТабДок.Вывести(ОбластьШапки);
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
    Запрос.Текст =
    "ВЫБРАТЬ
    |    РеализацияТоваровУслугТовары.Номенклатура
    |ИЗ
    |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    |ГДЕ
    |    РеализацияТоваровУслугТовары.Ссылка = &Ссылка";
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        ЗаполнитьЗначенияСвойств(ОбластьДанные.Параметры, Выборка);

        Товар = Выборка.Номенклатура;
        Запрос1 = Новый Запрос;
        Запрос1.Текст =
        "ВЫБРАТЬ
        |    СерииНоменклатуры.Сертификат
        |ИЗ
        |    Справочник.СерииНоменклатуры КАК СерииНоменклатуры
        |ГДЕ
        |    СерииНоменклатуры.Владелец = &Номенклатура";
        Запрос1.УстановитьПараметр("Номенклатура", Товар);
        Выборка = Запрос1.Выполнить().Выбрать();
        Пока Выборка.Следующий() Цикл
            

            ОбластьДанные.Параметры.Сертификат = Выборка.Сертификат;
        КонецЦикла;
        ТабДок.Вывести(ОбластьДанные);
    КонецЦикла;
    Возврат ТабДок;

КонецФункции
1 ДенисЧ
 
13.08.15
14:54
Самое главное в выводе таблицы в табдок - выводить область строки после цикла... Зачем время тратить?
2 neo-55555
 
13.08.15
15:00
или может у кого есть готовая внешняя печатная форма?
3 Nuobu
 
13.08.15
15:03
Пока Выборка.Следующий() Цикл
            

            ОбластьДанные.Параметры.Сертификат = Выборка.Сертификат;
ТабДок.Вывести(ОбластьДанные);
        КонецЦикла;
4 neo-55555
 
13.08.15
15:48
Теперь вообще не выводит ничего
5 neo-55555
 
13.08.15
15:54
Я знаю, что нужно Выводить область нужно в цикле перебора номенклатуры. Но как это прописать не знаю
6 alex_shkut
 
13.08.15
15:56
Пока Выборка.Следующий() Цикл
Запрос1 = Новый Запрос;
КонецЦикла
И сколько раз ты Новый объект создавать собираешься?
Запасись оперативкой...
7 alex_shkut
 
13.08.15
15:58
Точнее - попкорном. Плохой код. Вынеси все за цикл, а в цикле меняй только значение Параметра.
8 alex_shkut
 
13.08.15
15:59
И назови вторую Выборку другим именем, она затирает верхнюю, потому только один сертификат.
9 alex_shkut
 
13.08.15
16:00
Пока Выборка.Следующий() Цикл
и внутри
Выборка = Запрос1.Выполнить().Выбрать();
        Пока Выборка.Следующий() Цикл
затирает первую
10 neo-55555
 
13.08.15
16:46
Спасибо большое, попробую!
11 Михаил Козлов
 
13.08.15
18:45
Можно одним запросом (чтобы не выполнять запрос в цикле) с итогами и обходом результата запроса по группировкам.
Что вроде этого:
ВЫБРАТЬ
    РТиУ.Номенклатура,
    серии.Сертификат КАК Сертификат
ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РТиУ
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СерииНоменклатуры КАК серии
ПО РТиУ.Номенклатура = серии.Владелец
ГДЕ РТиУ.Ссылка = &Ссылка
ИТОГИ ПО РТиУ.Номенклатура

Зачем ЗаполнитьЗначенияСвойств(ОбластьДанные.Параметры, Выборка), если в выборке всего 1 поле (Номенклатура)?
12 sFAQer
 
14.08.15
02:18
Кто нибудь уже кинул в него тапком за запрос в цикле?
13 sFAQer
 
14.08.15
02:20
(11) Вот к этому нафиг джойн, серии в табличной части дока лежат...
14 Михаил Козлов
 
14.08.15
15:29
(13) Может человек хочет распечатать все серии по номенклатуре?