Имя: Пароль:
1C
1С v8
групповая печать УПД
↓ (Волшебник 24.04.2023 11:21)
0 kodblack
 
24.04.23
09:29
Добрый день!
Подскажите, где ошибка… 2 дня уже мучаюсь.
Есть документ «распред» в нем формируются ТЧ:
Заказ, клиент, накл, и СФ.
Создана форма по групповой печати: ТТН, ТН, и тд и УПД.
Если печатать из распр: УПД – то из в документа.распред – все данные по СФ – выходят.
НО, если печатать из формы групп печать, где данные формируются из 5-20 распред, в которых по 3-20 СФ, выдает ошибку.

В модуле распр:

Подробности
&НаСервере
Функция ПечатьНаСервере () Экспорт        
    МассивНаправлений = Направление.НаправленияСборки.ВыгрузитьКолонку("Направление");
    тзРаспределения = тРаспределения.Выгрузить(Новый Структура("Выбор", Истина),"Распределение");
    МассивРаспределений = тзРаспределения.ВыгрузитьКолонку("Распределение");
    МассивРеализаций = Новый Массив;  
    МассивСФ = Новый Массив;
    МассивОбъектов = Новый Массив;
    
    Для Каждого СтрТЧ ИЗ МассивРаспределений Цикл
        Для  Каждого СтрЗаказы ИЗ СтрТЧ.Заказы Цикл
             МассивРеализаций.Добавить(СтрЗаказы.Накладная);
             МассивСФ.Добавить(СтрЗаказы.СчетФактура);
        КонецЦикла;
    КонецЦикла;
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.АвтоМасштаб = Истина;
    ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
    ТабДокумент.ОтображатьЗаголовки = Ложь;
    ТабДокумент.ОтображатьСетку = Ложь;
    ТабДокумент.Защита = Истина;    

Если ПечатьУПД Тогда  
        ТабДокУПД = Документы.Распределение.СформироватьНесколькоУПД(МассивСФ, МассивНаправлений);
        ТабДокумент.Вывести(ТабДокУПД);
     КонецЕсли;
Возврат  ТабДокумент;
КонецФункции

&НаКлиенте
Процедура Печать (Команда)
    Если Дата = '00010101' Тогда
        Сообщить("Не указана дата");
        Возврат;
    КонецЕсли;
    Если Не ВсеНаправления И Направление.Пустая() Тогда
        Сообщить ("Не выбрано направление");
        Возврат;
    КонецЕсли;
    Если тРаспределения.Количество() = 0 Тогда
         Сообщить("Не заполнен список документов для печати");
         Возврат;
    КонецЕсли;    
    ЕстьДокументы = Ложь;
    Для Каждого стр Из тРаспределения Цикл
        Если стр.Выбор Тогда
            ЕстьДокументы = Истина;
            Прервать;
        КонецЕсли;    
    КонецЦикла;
    
    Если Не ЕстьДокументы Тогда    
         Сообщить("Не выбраны документы для печати");
        Возврат;
    КонецЕсли;
    
    //ПечатьНаСервере();
    ТабДок = ПечатьНаСервере();
    
    //Вывод формы печать из БСП    
    ЭлементКоллекцииДляПечати = Новый Структура;
    Для Каждого ИмяКолонки Из УправлениеПечатьюКлиентСервер.ИменаПолейКоллекцииПечатныхФорм() Цикл
        ЭлементКоллекцииДляПечати.Вставить(ИмяКолонки);
    КонецЦикла;
    ЭлементКоллекцииДляПечати.ТабличныйДокумент = ТабДок;
    ЭлементКоллекцииДляПечати.Экземпляров = 1;
    
    КоллекцияПечатныхФорм = Новый Массив;
    КоллекцияПечатныхФорм.Добавить(ЭлементКоллекцииДляПечати);
    
    ПараметрыОткрытия = Новый Структура("КоллекцияПечатныхФорм, ИсточникДанных, ПараметрыПечати, СтруктураТипов, ДанныеДляПечати, ОбъектыПечати");
    ПараметрыОткрытия.КоллекцияПечатныхФорм = КоллекцияПечатныхФорм;
    ПараметрыОткрытия.ИсточникДанных = КоллекцияПечатныхФорм;
    ПараметрыОткрытия.ПараметрыПечати     = Новый Структура;
    ПараметрыОткрытия.ПараметрыПечати.Вставить("ЗаголовокФормы", "Печать комплекта документов");
    ПараметрыОткрытия.ПараметрыПечати.Вставить("ПереопределитьПользовательскиеНастройкиКоличества", Истина);
    ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия, ЭтаФорма, Строка(Новый УникальныйИдентификатор));
КонецПроцедуры


В модуле менеджера - распр:

Подробности
Функция   СформироватьНесколькоУПД(МассивОбъектов, МассивНаправлений = "ВСЕ", ДанныеДляПечати, ОбъектыПечати) Экспорт

    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.АвтоМасштаб = Истина;
    ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
    ТабличныйДокумент.ОтображатьЗаголовки = Ложь;
    ТабличныйДокумент.ОтображатьСетку = Ложь;
    ТабличныйДокумент.Защита = Ложь;
    ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_УПД";
    Для каждого Ссылка из МассивОбъектов Цикл
        ТабДокументОбъекта = Обработки.ПечатьОбщихФорм.ЗаполнитьТабличныйДокументУПД(ТабличныйДокумент,ДанныеДляПечати,ОбъектыПечати);
        Если ТабличныйДокумент.ВысотаТаблицы > 0 И ТабДокументОбъекта.ВысотаТаблицы > 0 Тогда
            ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
        ТабличныйДокумент.Вывести(ТабДокументОбъекта);
    КонецЦикла;  
    
    Возврат ТабличныйДокумент;
КонецФункции




Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт    
    
    ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина;

СтруктураТипов = ОбщегоНазначенияУТ.СоответствиеМассивовПоТипамОбъектов(МассивОбъектов);
    
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "УПД") Тогда
        МассивСчетовФактур = Новый Массив;
        
        Для Каждого ДокСсылка из МассивОбъектов Цикл
            
            ДокРаспределение = ДокСсылка.ПолучитьОбъект();
            Для Каждого стр из ДокРаспределение.Заказы Цикл
                Если стр.СчетФактура.ДокументОснование <> Неопределено Тогда
                    нуженУПД = стр.СчетФактура.Контрагент.ДокументыПечатьУПД=стр.СчетФактура.Контрагент.ДокументыПечатьТОРГ12;
                    Если стр.СчетФактура.Контрагент.ДОС_ДокументыПечатьУПД  или нуженУПД Тогда
                        МассивСчетовФактур.Добавить(стр.СчетФактура);
                    КонецЕсли;
                КонецЕсли;
            КонецЦикла;
        КонецЦикла;
        
        Если МассивСчетовФактур.Количество() > 0 Тогда
            СтруктураТипов = ОбщегоНазначенияУТ.СоответствиеМассивовПоТипамОбъектов(МассивСчетовФактур);
        
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,"УПД",НСтр("ru='Универсальный передаточный документ (УПД)'"),
        Обработки.ПечатьОбщихФорм.СформироватьПечатнуюФормуУПД(СтруктураТипов, ОбъектыПечати, ПараметрыПечати));
        Иначе
            ПустойТабДок = Новый ТабличныйДокумент;
            
            УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
            КоллекцияПечатныхФорм,
            "УПД",
            НСтр("ru='Универсальный передаточный документ (УПД)'"),
            ПустойТабДок);
        КонецЕсли;
        
    КонецЕсли;
        
        Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ТОРГ12") Тогда
        
        МассивНакладных = Новый Массив;
        
        Для Каждого ДокСсылка из МассивОбъектов Цикл
            ДокРаспределение = ДокСсылка.ПолучитьОбъект();
            Для Каждого стр из ДокРаспределение.Заказы Цикл
                Если стр.Накладная.Контрагент.ДОС_ДокументыПечатьТОРГ12 Тогда
                    МассивНакладных.Добавить(стр.Накладная);
                КонецЕсли;
            КонецЦикла;
        КонецЦикла;
        
        Если МассивНакладных.Количество() > 0 Тогда
            СтруктураТипов = ОбщегоНазначенияУТ.СоответствиеМассивовПоТипамОбъектов(МассивНакладных);

            СинонимМакета = НСтр("ru='Товарная накладная без услуг (ТОРГ-12)'");
            ПараметрыПечати.Вставить("ВыводитьУслуги",Ложь);
            УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
            КоллекцияПечатныхФорм,
            "ТОРГ12",
            СинонимМакета,
            Обработки.ПечатьОбщихФорм.СформироватьПечатнуюФормуТОРГ12(СтруктураТипов, ОбъектыПечати, ПараметрыПечати));
        Иначе Сообщить ("В документе нет созданных накладных, печать невозможна. У контрагента, на вкладке: дополнительные данные, не проставлено печатать ТОРГ-12");    
        КонецЕсли;
        
    КонецЕсли;


ОШИБКА:

Недостаточно фактических параметров
{Документ._Распределение.Форма.ФормаПакетнойПечати.Форма(43)}:ТабДокУПД = Документы._Распределение.СформироватьНесколькоУПД(МассивСФ, МассивНаправлений);
{Документ._Распределение.Форма.ФормаПакетнойПечати.Форма(98)}:ТабДок = ПечатьНаСервере();



ПЫСЫ
Синтаксис предлагает: МассивОбъектов, МассивНаправлений, ДанныеДляПечати, ОбъектыПечати
но ни как не данныеДляПечати, ОбъекыПечати и т.д.

Если в функцию &НаСервере

Функция ПечатьНаСервере () Экспорт

ТабДокУПД = Документы.ДОС_Распределение.СформироватьНесколькоУПД(МассивСФ, МассивНаправлений, ДанныеДляПечати, ОбъектыПечати);
то ошибка, : Переменная не определена (ДанныеДляПечати), Переменная не определена (ОбъектыПечати)
1 shuhard
 
24.04.23
09:17
(0)[2 дня уже мучаюсь]
поставить точку останова что-то мешает ?
3 Волшебник
 
24.04.23
09:26
Функция   СформироватьНесколькоУПД(МассивОбъектов, МассивНаправлений = "ВСЕ", ДанныеДляПечати, ОбъектыПечати) Экспорт

параметры 3 и 4 обязательные

при вызове они не заданы:

Документы._Распределение.СформироватьНесколькоУПД(МассивСФ, МассивНаправлений);
4 kodblack
 
24.04.23
10:24
(0), (3)
в функцию добавил:ДанныеДляПечати, ОбъектыПечати)
Функция   СформироватьНесколькоУПД(МассивОбъектов, ДанныеДляПечати, ОбъектыПечати, МассивНаправлений = "ВСЕ") Экспорт

и в вызове в функции добавил:

Функция ПечатьНаСервере () Экспорт    
Если ПечатьУПД Тогда  
        ТабДокУПД = Документы.ДОС_Распределение.СформироватьНесколькоУПД(МассивОбъектов, ДанныеДляПечати, ОбъектыПечати, МассивНаправлений);
        ТабДокумент.Вывести(ТабДокУПД);
     КонецЕсли;

падает в ошибку:
шибка при вызове метода контекста (ОткрытьФорму)
{Документ._Распределение.Форма.ФормаСписка.Форма(65)}:    ОткрытьФорму("Документ._Распределение.Форма.ФормаПакетнойПечати")
по причине:
Ошибка инициализации модуля: Документ._Распределение.Форма.ФормаПакетнойПечати.Форма
по причине:
{Документ._Распределение.Форма.ФормаПакетнойПечати.Форма(46,87)}: Переменная не определена (ДанныеДляПечати)

по причине:
Ошибка инициализации модуля: Документ._Распределение.Форма.ФормаПакетнойПечати.Форма
по причине:
{Документ._Распределение.Форма.ФормаПакетнойПечати.Форма(46,87)}: Переменная не определена (ДанныеДляПечати)
{Документ._Распределение.Форма.ФормаПакетнойПечати.Форма(46,87)}: Переменная не определена (ДанныеДляПечати)
ТабДокУПД = Документы.ДОС_Распределение.СформироватьНесколькоУПД(МассивОбъектов, <<?>>ДанныеДляПечати, ОбъектыПечати, МассивНаправлений);
5 mikecool
 
24.04.23
11:01
начал читать топик, но сломал мозг на "Если печатать из распр: УПД – то из в документа.распред"
6 Волшебник
 
24.04.23
11:20
(4) Вы вообще понимаете, что Вы делаете?
7 Волшебник
 
24.04.23
11:24
У Вас переменная не определена (ДанныеДляПечати).

Программирование — это не копирование и вставка фрагментов кода. Тут думать надо.

Я продублирую свой тезис:

Главное, чтобы не пытались получить от ИИ работающий программный код. Между "около осмысленным текстом" и "работающим программным кодом" есть граница, когда программист визуализирует себя в качество экзекутора программного кода. Для программного кода нужна точность 100% на уровне этой визуализации.
8 kodblack
 
24.04.23
11:58
(7) По что она не определена, я понял. Как ее передать в функцию?
9 Волшебник
 
24.04.23
12:02
(8) Чтобы передавать значение параметра в функцию, его надо иметь, т.е. определить
10 kodblack
 
24.04.23
12:04
(6) понимаю.
т.к  Обработки.ПечатьОбщихФорм.СформироватьПечатнуюФормуУПД(СтруктураТипов, ОбъектыПечати, ПараметрыПечати));  - у меня расширением изменена форма, до "неузнаваемости", для избежания правки основных форм.

ФормаПакетнойПечати - по мимо упд - еще 10 видов печатных форм, но упд, т.к использую основную функцию из системы, не выдает.

(8) из Функция   СформироватьНесколькоУПД(МассивОбъектов, ДанныеДляПечати, ОбъектыПечати, МассивНаправлений = "ВСЕ") Экспорт
у меня же передается ДанныеДляПечати
Для каждого Ссылка из МассивОбъектов Цикл
        ТабДокументОбъекта = Обработки.ПечатьОбщихФорм.ЗаполнитьТабличныйДокументУПД(ТабличныйДокумент,ДанныеДляПечати,ОбъектыПечати);
11 Волшебник
 
24.04.23
12:15
(10) Прекратите бредить. Вы ничего не понимаете
12 kodblack
 
24.04.23
13:32
(11) подсказали... так себе!