Имя: Пароль:
1C
1С v8
Внешний отчет на УНФке Заказ на производство
0 alexodel
 
04.04.19
14:29
Здравствуйте дорогие профессионалы, поделитесь пожалуйста со мной опытом

т.е. Пишу внешку которая должна формировать при нажатии кнопки таблице... т.е. нужны вывести табличную часть документа из УНФ 1.6 Заказ на производство  
и не могу вынести табличную часть спецификации детально к каждой продукции...

Функция СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати)
    
Перем ПервыйДокумент, НомерСтрокиНачало, Ошибки;

ТабличныйДокумент    = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Макет");                    

ДанныеПечати = Новый Структура;

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



    Продукция = Запрос.Выполнить().Выбрать();
    
    Пока Продукция.Следующий() Цикл
        
        ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");//
        НомерДокумента = ПечатьДокументовУНФ.ПолучитьНомерНаПечатьСУчетомДатыДокумента(Продукция.ДатаДокумента, Продукция.Номер, Продукция.Префикс);
        ДатаДокумента = Формат(Продукция.ДатаДокумента, "ДЛФ=DD");
        ДанныеПечати.Вставить("ТекстЗаголовка", СтрШаблон(НСтр("ru ='Требование на склад № %1 от %2'"), НомерДокумента, ДатаДокумента));
        
        ОбластьМакета.Параметры.Заполнить(Продукция);
        ОбластьМакета.Параметры.Заполнить(ДанныеПечати);
        ТабличныйДокумент.Вывести(ОбластьМакета);
        
        ОбластьМакета = Макет.ПолучитьОбласть("ШапкаПродукция");
        ТабличныйДокумент.Вывести(ОбластьМакета);
        ОбластьМакетаИтого = Макет.ПолучитьОбласть("Итого1");
        
        ТаблицаПродукция = Продукция.ТаблицаПродукция.Выгрузить();
        ПараметрыНоменклатуры = Новый Структура;
        ОбластьМакетаСтрока = Макет.ПолучитьОбласть("СтрокаПродукция");    
        
        
            Для каждого СтрокаТабличнойЧастиПродукция Из ТаблицаПродукция Цикл
            
            ДанныеПечати.Очистить();
            ДанныеПечати.Вставить("НомерСтроки", СтрокаТабличнойЧастиПродукция.НомерСтроки);
            
            ПараметрыНоменклатуры.Очистить();
            ПараметрыНоменклатуры.Вставить("Содержание", Неопределено);
            ПараметрыНоменклатуры.Вставить("ПредставлениеНоменклатуры", СтрокаТабличнойЧастиПродукция.ПредставлениеНоменклатуры);
            ПараметрыНоменклатуры.Вставить("ПредставлениеХарактеристики", СтрокаТабличнойЧастиПродукция.Характеристика);
            ПараметрыНоменклатуры.Вставить("ПредставлениеАртикула", СтрокаТабличнойЧастиПродукция.Артикул);
            ПараметрыНоменклатуры.Вставить("НеобходимоВыделитьКакСоставНабора", Ложь);
            
            ДанныеПечати.Вставить("ПредставлениеНоменклатуры", ПечатьДокументовУНФ.ПредставлениеНоменклатуры(ПараметрыНоменклатуры));
            ДанныеПечати.Вставить("ПредставлениеКодаНоменклатуры", ПечатьДокументовУНФ.ПредставлениеКодаНоменклатуры(СтрокаТабличнойЧастиПродукция));
            
            ДанныеПечати.Вставить("Количество", СтрокаТабличнойЧастиПродукция.Количество);
            ДанныеПечати.Вставить("ЕдиницаИзмерения", СтрокаТабличнойЧастиПродукция.ЕдиницаИзмерения);
            
            ОбластьМакетаСтрока.Параметры.Заполнить(ДанныеПечати);
            
            ТабличныйДокумент.Вывести(ОбластьМакетаСтрока);
            
            
            //
            // цикл спецификации
            //
            ОбластьМакетаСтрокаСпецификации = Макет.ПолучитьОбласть("СтрокаСпецификации");
            ЗапросСпецификация = Новый Запрос;
            ЗапросСпецификация .УстановитьПараметр("МассивОбъектов", МассивОбъектов);
            ЗапросСпецификация.Текст=
            "ВЫБРАТЬ
            |    ЗаказНаПроизводство.Ссылка КАК Ссылка,
            |    ЗаказНаПроизводство.ЗаказПокупателя КАК Заказ,
            |    ЗаказНаПроизводство.СтруктурнаяЕдиница КАК Подразделение,
            |    ЗаказНаПроизводство.Организация.Префикс КАК Префикс,
            |    ЗаказНаПроизводство.Продукция.(
            |        НомерСтроки КАК НомерСтроки,
            |        ВЫБОР
            |            КОГДА (ВЫРАЗИТЬ(ЗаказНаПроизводство.Продукция.Номенклатура.НаименованиеПолное КАК СТРОКА(100))) = """"
            |                ТОГДА ЗаказНаПроизводство.Продукция.Номенклатура.Наименование
            |            ИНАЧЕ ЗаказНаПроизводство.Продукция.Номенклатура.НаименованиеПолное
            |        КОНЕЦ КАК ПредставлениеНоменклатуры,
            |        Номенклатура.Артикул КАК Артикул,
            |        Номенклатура.Код КАК Код,
            |        Характеристика КАК Характеристика,
            |        ЕдиницаИзмерения КАК ЕдиницаИзмерения,
            |        Количество КАК Количество
            |    ) КАК ТаблицаПродукция,
            |    ЗаказНаПроизводство.Запасы.(
            |        НомерСтроки КАК НомерСтроки,
            |        ВЫБОР
            |            КОГДА (ВЫРАЗИТЬ(ЗаказНаПроизводство.Запасы.Номенклатура.НаименованиеПолное КАК СТРОКА(100))) = """"
            |                ТОГДА ЗаказНаПроизводство.Запасы.Номенклатура.Наименование
            |            ИНАЧЕ ЗаказНаПроизводство.Запасы.Номенклатура.НаименованиеПолное
            |        КОНЕЦ КАК ПредставлениеНоменклатуры,
            |        Номенклатура.Артикул КАК Артикул,
            |        Номенклатура.Код КАК Код,
            |        Характеристика КАК Характеристика,
            |        ЕдиницаИзмерения КАК ЕдиницаИзмерения,
            |        Количество КАК Количество
            |    ) КАК ТаблицаЗапасы
            |ИЗ
            |    Документ.ЗаказНаПроизводство КАК ЗаказНаПроизводство
            |ГДЕ
            |    ЗаказНаПроизводство.Ссылка В(&МассивОбъектов)
            |
            |УПОРЯДОЧИТЬ ПО
            |    Ссылка,
            |    НомерСтроки";
            
            Спецификация = Запрос.Выполнить().Выбрать();
            ОбластьМакетаСтрокаСпецификации = Макет.ПолучитьОбласть("СтрокаСпецификации");    
            
            Пока Спецификация.Следующий() Цикл
                
                ТаблицаСпецификация = Спецификация.ТаблицаЗапасы.Выгрузить();
                Для каждого СтрокаТабличнойЧастиСпецификации Из ТаблицаСпецификация Цикл
                    
                    ДанныеПечати.Очистить();
                    ДанныеПечати.Вставить("НомерСтроки", СтрокаТабличнойЧастиСпецификации.НомерСтроки);
                    
                    ПараметрыНоменклатуры.Очистить();
                    ПараметрыНоменклатуры.Вставить("Содержание", Неопределено);
                    ПараметрыНоменклатуры.Вставить("ПредставлениеНоменклатуры", СтрокаТабличнойЧастиСпецификации.ПредставлениеНоменклатуры);
                    ПараметрыНоменклатуры.Вставить("ПредставлениеХарактеристики", СтрокаТабличнойЧастиСпецификации.Характеристика);
                    ПараметрыНоменклатуры.Вставить("ПредставлениеАртикула", СтрокаТабличнойЧастиСпецификации.Артикул);
                    ПараметрыНоменклатуры.Вставить("НеобходимоВыделитьКакСоставНабора", Истина); //Ложь
                    
                    ДанныеПечати.Вставить("ПредставлениеНоменклатуры", ПечатьДокументовУНФ.ПредставлениеНоменклатуры(ПараметрыНоменклатуры));
                    ДанныеПечати.Вставить("ПредставлениеКодаНоменклатуры", ПечатьДокументовУНФ.ПредставлениеКодаНоменклатуры(СтрокаТабличнойЧастиСпецификации));
                    
                    ДанныеПечати.Вставить("Количество", СтрокаТабличнойЧастиСпецификации.Количество);
                    ДанныеПечати.Вставить("ЕдиницаИзмерения", СтрокаТабличнойЧастиСпецификации.ЕдиницаИзмерения);
                    
                    ОбластьМакетаСтрокаСпецификации.Параметры.Заполнить(ДанныеПечати);
                    ТабличныйДокумент.Вывести(ОбластьМакетаСтрокаСпецификации);
                    
                КонецЦикла;
                //    
            КонецЦикла;
            
        КонецЦикла;
        ТабличныйДокумент.Вывести(ОбластьМакетаИтого);          
    КонецЦикла;
    
    //    МАТЕРИАЛЫ
    
    Материалы = Запрос.Выполнить().Выбрать();
    ОбластьМакетаШапкаМатериалов = Макет.ПолучитьОбласть("ШапкаМатериалов");    
    ТабличныйДокумент.Вывести(ОбластьМакетаШапкаМатериалов);
    ОбластьМакетаСтрока = Макет.ПолучитьОбласть("СтрокаМатериалов");
    ОбластьМакетаИтого = Макет.ПолучитьОбласть("Итого2");
    
    Пока Материалы.Следующий() Цикл
        
        ТаблицаЗапасы = Материалы.ТаблицаЗапасы.Выгрузить();
        Для каждого СтрокаТабличнойЧастиЗапасы Из ТаблицаЗапасы Цикл
            
            ДанныеПечати.Очистить();
            ДанныеПечати.Вставить("НомерСтроки", СтрокаТабличнойЧастиЗапасы.НомерСтроки);
            
            ПараметрыНоменклатуры.Очистить();
            ПараметрыНоменклатуры.Вставить("Содержание", Неопределено);
            ПараметрыНоменклатуры.Вставить("ПредставлениеНоменклатуры", СтрокаТабличнойЧастиЗапасы.ПредставлениеНоменклатуры);
            ПараметрыНоменклатуры.Вставить("ПредставлениеХарактеристики", СтрокаТабличнойЧастиЗапасы.Характеристика);
            ПараметрыНоменклатуры.Вставить("ПредставлениеАртикула", СтрокаТабличнойЧастиЗапасы.Артикул);
            ПараметрыНоменклатуры.Вставить("НеобходимоВыделитьКакСоставНабора", Ложь);
            
            ДанныеПечати.Вставить("ПредставлениеНоменклатуры", ПечатьДокументовУНФ.ПредставлениеНоменклатуры(ПараметрыНоменклатуры));
            ДанныеПечати.Вставить("ПредставлениеКодаНоменклатуры", ПечатьДокументовУНФ.ПредставлениеКодаНоменклатуры(СтрокаТабличнойЧастиЗапасы));
            
            ДанныеПечати.Вставить("Количество", СтрокаТабличнойЧастиЗапасы.Количество);
            ДанныеПечати.Вставить("ЕдиницаИзмерения", СтрокаТабличнойЧастиЗапасы.ЕдиницаИзмерения);
            
            ОбластьМакетаСтрока.Параметры.Заполнить(ДанныеПечати);
            ТабличныйДокумент.Вывести(ОбластьМакетаСтрока);
            
        КонецЦикла;
        ТабличныйДокумент.Вывести(ОбластьМакетаИтого);          
        ОбластьМакета = Макет.ПолучитьОбласть("Подписи");
        ОбластьМакета.Параметры.Заполнить(Материалы);
        ТабличныйДокумент.Вывести(ОбластьМакета);
            
    КонецЦикла;
    
    
Возврат ТабличныйДокумент;

КонецФункции

Можете посмотреть макет здесь
http://prntscr.com/n7dt6a

Жду от Вас.....
1 runoff_runoff
 
04.04.19
15:57
а где заполнение списка ОбъектыПечати?..
2 alexodel
 
04.04.19
17:56
(1) ну, в этой теле цикл выдает одно и то же спецификацию... а мне нужно каждого продукта свою спецификацию...