Имя: Пароль:
1C
 
Внешние печатные формы
🠗 (Волшебник 06.03.2024 21:01)
, ,
0 Panda_17
 
naïve
06.03.24
12:29
Добрый день! В печатной форме выводятся работники. Печатная форма выходить на печать столько раз, сколько указано работников в документе. Если 3 работника, то 3 раза, если один работник, то 1 раз. Подскажите, пожалуйста, как можно сделать, чтобы в независимости от количества работников, указанных в документе, пф выводилась 1 один раз?
1 Волшебник
 
06.03.24
12:31
Если это расчётные листки, то так и должно быть.
2 Panda_17
 
naïve
06.03.24
12:33
(1) это не расчетные листки. ПФ нужна для документа заказ на ремонт
3 Волшебник
 
06.03.24
12:38
(2) Если в той ПФ выводится перечень ремонтных операций для каждого работника, то так и должно быть.
4 Panda_17
 
naïve
06.03.24
12:46
(3) В одном заказе указано несколько работников, которые должны сделать заказ, например 3. ПФ должна выводиться на печать в одном экземпляре с необходимыми данными, а сейчас выходит 3 раза  т.к. в документе указано 3 работника
5 Волшебник
 
06.03.24
12:48
(4) Вы меня не убедите, что так быть не должно. Если так кем-то запрограммировано, значит так и должно быть. Попробуйте изменить постановку задачи программисту, чтобы он запрограммировал по-другому.
6 Волшебник
 
06.03.24
12:49
(4) Не должна.
7 Gucci76
 
06.03.24
12:53
ВывестиГоризонтальныйРазделительСтраниц()  - нет?
8 yurikmellon2
 
06.03.24
13:25
(0) выкладывай уже свою ВПФ. В среду у телепатов выходной. Надо смотреть какой алгоритм вывода на печать там.
9 Panda_17
 
naïve
06.03.24
13:45
(8) Функция СформироватьПечатнуюФормуЗаказНаРемонтВПФ(МассивОбъектов, ОбъектыПечати, ПараметрыПечати)
    
    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ЗаказНаРемонтВПФ";
    
    МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    ОтветственныеЛицаСервер.СформироватьВременнуюТаблицуОтветственныхЛицДокументов(МассивОбъектов, МенеджерВременныхТаблиц);
    
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
    Запрос.Текст = ТекстЗапросаПечати();
    Запрос.УстановитьПараметр("МассивДокументов", МассивОбъектов);
    
    УстановитьПривилегированныйРежим(Истина);
    Попытка
        Выборка = Запрос.Выполнить().Выбрать();
    Исключение
        ЗаписьЖурналаРегистрации(ОписаниеОшибки());
    КонецПопытки;
    УстановитьПривилегированныйРежим(Ложь);
    
    
    ПервыйДокумент = Истина;
    Пока Выборка.Следующий() Цикл
        
        НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
        
        Макет = ПолучитьМакет ("ЗаказНаРемонт");
        
        Макет.КодЯзыка = Метаданные.Языки.Русский.КодЯзыка;
        
        Если ПервыйДокумент Тогда
            ПервыйДокумент = Ложь;
        Иначе
            ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
        
         Рез = Запрос.Выполнить().Выгрузить();
                 Производитель = "";
        
         Для Каждого СтрРез Из  Рез Цикл
             Производитель = Производитель + Строка(СтрРез.Работник)+ Символы.ПС;
         КонецЦикла;
        
        
        ОбластьШапкаДокумента = Макет.ПолучитьОбласть("ШапкаДокумента");    
        ОбластьШапкаДокумента.Параметры.Заполнить(Выборка);
        ОбластьШапкаДокумента.Параметры.Дата = формат(Выборка.Дата,"ДФ=dd.MM.yyyy");    
        ТабличныйДокумент.Вывести(ОбластьШапкаДокумента);  
        
        ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
        ОбластьШапкаТаблицы.Параметры.Заполнить(Выборка);
        ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы);  
        
        ОбластьСтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаблицы");
        ОбластьСтрокаТаблицы.Параметры.Заполнить(Выборка);  
        ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицы);  
        
        ОбластьШапкаТаблицыИсполнители = Макет.ПолучитьОбласть("ШапкаТаблицыИсполнители");
        ОбластьШапкаТаблицыИсполнители.Параметры.Заполнить(Выборка);
        ТабличныйДокумент.Вывести(ОбластьШапкаТаблицыИсполнители);
                
        ОбластьСтрокаТаблицыИсполнители = Макет.ПолучитьОбласть("СтрокаТаблицыИсполнители");
        ОбластьСтрокаТаблицыИсполнители.Параметры.Заполнить(Выборка);
        ОбластьСтрокаТаблицыИсполнители.Параметры.Исполнитель = Производитель;
        ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицыИсполнители);  
        
        ОбластьШапкаТаблицыРабот = Макет.ПолучитьОбласть("ШапкаТаблицыРабот");
        ОбластьШапкаТаблицыРабот.Параметры.Заполнить(Выборка);
        ТабличныйДокумент.Вывести(ОбластьШапкаТаблицыРабот);  
        
        ОбластьСтрокаТаблицыРабот = Макет.ПолучитьОбласть("СтрокаТаблицыРабот");
        ОбластьСтрокаТаблицыРабот.Параметры.Заполнить(Выборка);
        ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицыРабот);
                
        ОбластьПодвалДокумента = Макет.ПолучитьОбласть("ПодвалДокумента");
        ОбластьПодвалДокумента.Параметры.Заполнить(Выборка);
        ТабличныйДокумент.Вывести(ОбластьПодвалДокумента);
                                
        УправлениеПечатью.ЗадатьОбластьПечатиДокумента(
        ТабличныйДокумент,
        НомерСтрокиНачало,
        ОбъектыПечати,
        Выборка.Ссылка);
        
    КонецЦикла;
    
    Возврат ТабличныйДокумент;
    
КонецФункции
                 
Функция ТекстЗапросаПечати()
    
    ТекстЗапроса=    
    "ВЫБРАТЬ
    |    ЗаказНаРемонт.Ссылка КАК Ссылка,
    |    ЗаказНаРемонт.Номер КАК Номер,
    |    ЗаказНаРемонт.Дата КАК Дата,
    |    ЗаказНаРемонт.Организация КАК Организация,
    |    ЗаказНаРемонт.Подразделение КАК ПодразделениеОрганизации,
    |    ЗаказНаРемонт.ДатаНачала КАК ДатаНачала,
    |    ЗаказНаРемонт.ДатаЗавершения КАК ДатаОкончания,
    |    ЗаказНаРемонт.Ответственный.ФизическоеЛицо КАК Ответственный,
    |    ЗаказНаРемонт.Автор КАК Допускающий,
    |    ЗаказНаРемонт.НаименованиеРабот КАК Работа,
    |    ЗаказНаРемонт.ОбъектЭксплуатации КАК ОбъектыРемонта,
    |    ВложенныйЗапрос.Работник КАК Работник
    |ИЗ
    |    Документ.ЗаказНаРемонт КАК ЗаказНаРемонт
    |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |            ЗаказНаРемонтИсполнители.Ссылка КАК Ссылка,
    |            ЗаказНаРемонтИсполнители.Сотрудник КАК Работник
    |        ИЗ
    |            Документ.ЗаказНаРемонт.Исполнители КАК ЗаказНаРемонтИсполнители
    |        
    |        СГРУППИРОВАТЬ ПО
    |            ЗаказНаРемонтИсполнители.Сотрудник,
    |            ЗаказНаРемонтИсполнители.Ссылка) КАК ВложенныйЗапрос
    |        ПО ЗаказНаРемонт.Ссылка = ВложенныйЗапрос.Ссылка
    |ГДЕ
    |    ЗаказНаРемонт.Ссылка В(&МассивДокументов)";
            
    Возврат ТекстЗапроса;
    
КонецФункции
10 AlexeyKh
 
06.03.24
13:45
как вариант собрать работников в тадицу
получиться одна ПФ с таблицей Работники, где будет разное количество строк с работниками.
11 Волшебник
 
06.03.24
13:52
Следите за руками:

Выборка = Запрос.Выполнить().Выбрать();
...
    Пока Выборка.Следующий() Цикл
                
         Рез = Запрос.Выполнить().Выгрузить();



Запрос выполнен (в нём конечно всё задублировано), потом по нему открыта выборка и внутри выборки запрос выполняется повторно по каждой строке результата!
12 Волшебник
 
06.03.24
13:52
Девочка, отойди от компьютера. Позовите программиста.
13 Panda_17
 
naïve
06.03.24
14:03
(12) Спасибо за помощь!
Ошибка? Это не ошибка, это системная функция.