Имя: Пароль:
1C
 
Отладка внешней печатной формы. Розница
0 SnowBarsCloud
 
31.03.22
22:39
Добрый вечер.
База Розница, редакция 2.3
Платформа 1С:Предприятие 8.3 (8.3.19.1150)

Попросили добавить внешнюю печатную форму, создал внешний отче, в модуле указал данные о внешней обработке. Код, может нужно:

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

Вынул функцию печати из модуля менеджера, дописал кусок, проверил через форму (добавил форму и запускаю функцию печати)

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

    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,
        "НакладнаяНаПеремещениеЦеныМагазина", "Накладная на перемещение | Цены магазина",
        ПечатьНакладная(МассивОбъектов, ОбъектыПечати));

КонецПроцедуры // Печать()

Из модуля формы

&НаКлиенте
Процедура Команда1(Команда)
    
   ТабДок = ПечатьНаСервере();
   ТабДок.Показать();
  
КонецПроцедуры

&НаСервере
Функция ПечатьНаСервере()
    
    Назначения = Новый Массив;
    Назначения.Добавить(Реквизит1);
    
    ДокументОбъект = РеквизитФормыВЗначение("Отчет");
    Возврат ДокументОбъект.ПечатьНакладная(Назначения, Неопределено);

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

Печатная форма печатается, все отлично. Но при попытке загрузить в базу выходит ошибка плана


Невозможно подключить дополнительный отчет из файла.
Возможно, он не подходит для этой версии программы.

Техническая информация:
Итератор для значения не определен

Понимаю, что мой косяк, но как найти ошибку? Как отладить и понять в чем проблема? Возможно что-то очень очевидное, но не вижу..

Заранее всем спасибо за обсуждение :)
1 SnowBarsCloud
 
31.03.22
22:41
Код самой функции печати


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

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

    ОкончаниеИмениОбласти = ?(ВыводитьЦены И НЕ ТолькоПоРозничнымЦенам,"РозничныеЦены","");
    
    ОбластьЗаголовок         = Макет.ПолучитьОбласть("Заголовок|Основная" + ОкончаниеИмениОбласти);
    ОбластьШапка             = Макет.ПолучитьОбласть("Шапка|Основная" + ОкончаниеИмениОбласти);
    
    ОбластьШапкаТаблицыНачало     = Макет.ПолучитьОбласть("ШапкаТаблицы|НачалоСтроки");
    ОбластьСтрокаТаблицыНачало     = Макет.ПолучитьОбласть("СтрокаТаблицы|НачалоСтроки");
    ОбластьПодвалТаблицыНачало     = Макет.ПолучитьОбласть("ПодвалТаблицы|НачалоСтроки");
    
    ОбластьШапкаТаблицыКолонкаКодов     = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаКодов");
    ОбластьСтрокаТаблицыКолонкаКодов     = Макет.ПолучитьОбласть("СтрокаТаблицы|КолонкаКодов");
    ОбластьПодвалТаблицыКолонкаКодов     = Макет.ПолучитьОбласть("ПодвалТаблицы|КолонкаКодов");
    
    ОбластьШапкаТаблицыКолонкаКодов.Параметры.ИмяКолонкиКодов = КолонкаКодов;
    
    ОбластьШапкаТаблицыКолонкаУпаковок         = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаУпаковок");
    ОбластьСтрокаТаблицыКолонкаУпаковок     = Макет.ПолучитьОбласть("СтрокаТаблицы|КолонкаУпаковок");
    ОбластьПодвалТаблицыКолонкаУпаковок        = Макет.ПолучитьОбласть("ПодвалТаблицы|КолонкаУпаковок");
    
    ОбластьШапкаТаблицыКолонкаКоличество     = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаКоличество");
    ОбластьСтрокаТаблицыКолонкаКоличество     = Макет.ПолучитьОбласть("СтрокаТаблицы|КолонкаКоличество");
    ОбластьПодвалТаблицыКолонкаКоличество    = Макет.ПолучитьОбласть("ПодвалТаблицы|КолонкаКоличество");
    
    ОбластьШапкаТаблицыЦеныПоступления  = Макет.ПолучитьОбласть("ШапкаТаблицы|ЦеныПоступления");
    ОбластьСтрокаТаблицыЦеныПоступления = Макет.ПолучитьОбласть("СтрокаТаблицы|ЦеныПоступления");
    ОбластьПодвалТаблицыЦеныПоступления = Макет.ПолучитьОбласть("ПодвалТаблицы|ЦеныПоступления");
    
    //ОбластьШапкаТаблицыРозничныеЦены  = Макет.ПолучитьОбласть("ШапкаТаблицы|РозничныеЦены");
    //ОбластьСтрокаТаблицыРозничныеЦены = Макет.ПолучитьОбласть("СтрокаТаблицы|РозничныеЦены");
    //ОбластьПодвалТаблицыРозничныеЦены = Макет.ПолучитьОбласть("ПодвалТаблицы|РозничныеЦены");
    
    ОбластьКолонкаТоваров = Макет.Область("КолонкаТоваров");
    
    Если НЕ ВыводитьКоды Тогда
        
        ОбластьКолонкаТоваров.ШиринаКолонки = ОбластьКолонкаТоваров.ШиринаКолонки + Макет.Область("КолонкаКодов").ШиринаКолонки;
        
    КонецЕсли;
    
    Если НЕ ВыводитьУпаковки Тогда
        
        ОбластьКолонкаТоваров.ШиринаКолонки = ОбластьКолонкаТоваров.ШиринаКолонки + Макет.Область("КолонкаУпаковокКоличество").ШиринаКолонки
        + Макет.Область("КолонкаУпаковокПредставление").ШиринаКолонки;         
        
    КонецЕсли;
    
    ОбластьШапкаТаблицыКолонкаТоваров     = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаТоваров");
    ОбластьСтрокаТаблицыКолонкаТоваров     = Макет.ПолучитьОбласть("СтрокаТаблицы|КолонкаТоваров");
    ОбластьПодвалТаблицыКолонкаТоваров     = Макет.ПолучитьОбласть("ПодвалТаблицы|КолонкаТоваров");
    
    ОбластьПодписей       = Макет.ПолучитьОбласть("Подписи|Основная" + ОкончаниеИмениОбласти);
    ОбластьИтого          = Макет.ПолучитьОбласть("Итого|Основная" + ОкончаниеИмениОбласти);
    
    ВыборкаПоДокументам = Результаты[0].Выбрать();
    ВыборкаПоТабличнымЧастям = Результаты[ИндексРезультатаТовары].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    ПервыйДокумент = Истина;
    
    Пока ВыборкаПоДокументам.Следующий() Цикл
        
        Если НЕ ВыборкаПоТабличнымЧастям.НайтиСледующий(Новый Структура("Ссылка",ВыборкаПоДокументам.Ссылка)) Тогда
            
            Продолжить;
            
        КонецЕсли;
        
        ВыборкаПоСтрокамТЧ = ВыборкаПоТабличнымЧастям.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
        
        Если НЕ ПервыйДокумент Тогда
            
            ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
            
        КонецЕсли;
        
        ПервыйДокумент = Ложь;
        НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
        
        // ЗАГОЛОВОК
        ЗаполнитьЗначенияСвойств(РеквизитыДокумента, ВыборкаПоДокументам);
        ОбластьЗаголовок.Параметры.Заполнить(ВыборкаПоДокументам);
        ОбластьЗаголовок.Параметры.ТекстЗаголовка = ФормированиеПечатныхФормСервер.СформироватьЗаголовокДокумента(РеквизитыДокумента, СинонимДокумента);
        ТабличныйДокумент.Вывести(ОбластьЗаголовок);
        
        // ШАПКА
        ОбластьШапка.Параметры.Заполнить(ВыборкаПоДокументам);
        ТабличныйДокумент.Вывести(ОбластьШапка);
        ТабличныйДокумент.Вывести(ОбластьШапкаТаблицыНачало);
        
        Если ВыводитьКоды Тогда
            
            ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыКолонкаКодов);
            
        КонецЕсли;
        
        ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыКолонкаТоваров);
        
        Если ВыводитьУпаковки Тогда
            
            ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыКолонкаУпаковок);
            
        КонецЕсли;
        
        ПараметрыШапкаКолонкаКоличество = Новый Структура;
        Если ВыводитьУпаковки Тогда
            ПараметрыШапкаКолонкаКоличество.Вставить("ЕдиницаКоличество", НСтр("ru = '(Ед. изм.)'"));
        Иначе
            ПараметрыШапкаКолонкаКоличество.Вставить("ЕдиницаКоличество", "");
        КонецЕсли;
        ОбластьШапкаТаблицыКолонкаКоличество.Параметры.Заполнить(ПараметрыШапкаКолонкаКоличество);
        
        ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыКолонкаКоличество);
        
        Если НЕ ВыводитьУпаковки Тогда
            ТабличныйДокумент.Область("ОбластьЕдиницаКоличество").Объединить();
            ТабличныйДокумент.Область("ОбластьЕдиницаКоличество").ВертикальноеПоложение = ВертикальноеПоложение.Центр;
        КонецЕсли;
        
        Если НЕ ТолькоПоРозничнымЦенам Тогда
            ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыЦеныПоступления);
        КонецЕсли;
        
        //Если ВыводитьЦены Тогда
        //    
        //    ПараметрыШапкаРозничныеЦены = Новый Структура;
        //    Если ВыводитьУпаковки Тогда
        //        ПараметрыШапкаРозничныеЦены.Вставить("РозничнаяЦенаЕдиница", НСтр("ru = '(Ед. изм.)'"));
        //    Иначе
        //        ПараметрыШапкаРозничныеЦены.Вставить("РозничнаяЦенаЕдиница", "");
        //    КонецЕсли;
        //    //ОбластьШапкаТаблицыРозничныеЦены.Параметры.Заполнить(ПараметрыШапкаРозничныеЦены);
        //    
        //    //ТабличныйДокумент.Присоединить(ОбластьШапкаТаблицыРозничныеЦены);
        //    
        //    Если НЕ ВыводитьУпаковки Тогда
        //        ТабличныйДокумент.Область("РозничнаяЦенаЕдиница").Объединить();
        //        ТабличныйДокумент.Область("РозничнаяЦенаЕдиница").ВертикальноеПоложение = ВертикальноеПоложение.Центр;
        //    КонецЕсли;
        //    
        //КонецЕсли;
        
        ВсегоНаименований  = 0;
        Итого              = 0;
        ИтогоНДС           = 0;
        ИтогоРозничныеЦены = 0;
        
        // СТРОКИ ТЧ
        Пока ВыборкаПоСтрокамТЧ.Следующий() Цикл
            
            ОбластьСтрокаТаблицыНачало.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
            ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицыНачало);
            
            Если ВыводитьКоды Тогда
                
                ОбластьСтрокаТаблицыКолонкаКодов.Параметры.Артикул = ВыборкаПоСтрокамТЧ["КолонкаКодов"];
                ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКолонкаКодов);
                
            КонецЕсли;
            
            ОбластьСтрокаТаблицыКолонкаТоваров.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
            ОбластьСтрокаТаблицыКолонкаТоваров.Параметры.Товар = ФормированиеПечатныхФормСервер.ПолучитьПредставлениеНоменклатурыДляПечати(ВыборкаПоСтрокамТЧ.НоменклатураПредставление,ВыборкаПоСтрокамТЧ.ХарактеристикаПредставление);
            ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКолонкаТоваров);
            
            Если ВыводитьУпаковки Тогда
                
                ОбластьСтрокаТаблицыКолонкаУпаковок.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
                ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКолонкаУпаковок);
                
            КонецЕсли;
            
            ОбластьСтрокаТаблицыКолонкаКоличество.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
            ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыКолонкаКоличество);
            
            Если НЕ ТолькоПоРозничнымЦенам Тогда
                ОбластьСтрокаТаблицыЦеныПоступления.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
                ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыЦеныПоступления);
                
            КонецЕсли;
            
            //Если ВыводитьЦены Тогда
            //    ОбластьСтрокаТаблицыРозничныеЦены.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
            //    ТабличныйДокумент.Присоединить(ОбластьСтрокаТаблицыРозничныеЦены);
            //КонецЕсли;
            
            
            ВсегоНаименований = ВсегоНаименований + 1;
            Итого             = Итого + ВыборкаПоСтрокамТЧ.Сумма;
            ИтогоНДС          = ИтогоНДС + ВыборкаПоСтрокамТЧ.СуммаНДС;
            
            //Если ВыводитьЦены Тогда
            //    
            //    ИтогоРозничныеЦены = ИтогоРозничныеЦены  +ВыборкаПоСтрокамТЧ.СуммаРозничная;
            //    
            //КонецЕсли;
            
        КонецЦикла;
        
        ТабличныйДокумент.Вывести(ОбластьПодвалТаблицыНачало);
        
        Если ВыводитьКоды Тогда
            
            ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыКолонкаКодов);
            
        КонецЕсли;
        
        ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыКолонкаТоваров);
        
        Если ВыводитьУпаковки Тогда
            ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыКолонкаУпаковок);
        КонецЕсли;
        
        ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыКолонкаКоличество);
        
        Если НЕ ТолькоПоРозничнымЦенам Тогда
            ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыЦеныПоступления);
        КонецЕсли;
        
        //Если ВыводитьЦены Тогда
        //    ТабличныйДокумент.Присоединить(ОбластьПодвалТаблицыРозничныеЦены);
        //КонецЕсли;
        
        // ИТОГО
        
        
        Если ТолькоПоРозничнымЦенам Тогда
            
            ТекстИтоговойСтроки = НСтр("ru = '%Итого%'");
            ТекстИтоговойСтроки = СтрЗаменить(ТекстИтоговойСтроки,"%Итого%",ФормированиеПечатныхФормСервер.ФорматСумм(ИтогоРозничныеЦены));
            ОбластьИтого.Параметры.Итого = ТекстИтоговойСтроки;
            
        Иначе
            
            ТекстИтоговойСтроки = НСтр("ru = '%Итого%'");
            ТекстИтоговойСтроки = СтрЗаменить(ТекстИтоговойСтроки,"%Итого%",ФормированиеПечатныхФормСервер.ФорматСумм(Итого));
            ОбластьИтого.Параметры.Итого = ТекстИтоговойСтроки;
            
        КонецЕсли;
        
        //Если ВыводитьЦены И НЕ ТолькоПоРозничнымЦенам Тогда
        //    ТекстИтоговойСтроки = НСтр("ru = '%Итого%'");
        //    ТекстИтоговойСтроки = СтрЗаменить(ТекстИтоговойСтроки,"%Итого%",ФормированиеПечатныхФормСервер.ФорматСумм(ИтогоРозничныеЦены));
        //    ОбластьИтого.Параметры.ИтогоРозничныеЦены = ТекстИтоговойСтроки;
        //КонецЕсли;
        
        ТабличныйДокумент.Вывести(ОбластьИтого);
        
        // ПОДПИСИ
        ОбластьПодписей.Параметры.Заполнить(ВыборкаПоДокументам);
        ОбластьПодписей.Параметры.Получил = ФормированиеПечатныхФормСервер.ФамилияИнициалыФизЛица(ВыборкаПоДокументам.Получил);
        ТабличныйДокумент.Вывести(ОбластьПодписей);
        
        //УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ВыборкаПоДокументам.Ссылка);
        
    КонецЦикла;
    
    ТабличныйДокумент.АвтоМасштаб = Истина;
    
    Возврат ТабличныйДокумент;
    
КонецФункции
2 SnowBarsCloud
 
31.03.22
22:53
При флаге "Остановка по ошибке" стопает в функции ДополнитьСтруктуру из модуля "ОбщегоНазначенияКлиентСервер". Может кто сталкивался. Может есть какие то особенности, как, например в УНФ
3 hhhh
 
01.04.22
01:48
(2) вообще-то это не отчет, а обработка
4 Мимохожий Однако
 
01.04.22
07:28
(0) //ПараметрыРегистрации.Вид        = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет();
ПараметрыРегистрации.Вид        = "ПечатнаяФорма";