Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 11:23

ВПФ ошибка "В обработчике печати не был сформирован табличный документ для: АктВыполненныхРабот"

Автор sali, 23 окт 2024, 10:53

0 Пользователей и 1 гость просматривают эту тему.

sali

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

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

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
   
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = Представление;
    НоваяКоманда.Идентификатор = Идентификатор;
    НоваяКоманда.Использование = Использование;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
    НоваяКоманда.Модификатор = Модификатор;
   
КонецПроцедуры   

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

        ДанныеПечати.Вставить("Организация", Шапка.ОрганизацияПредставление);
        ДанныеПечати.Вставить("ОрганизацияПредставление", "Кыргызская Республика");
        ДанныеПечати.Вставить("РегОрг", Регион + " " + Индекс);
        ДанныеПечати.Вставить("УлОрг", СтрШаблон("%1, %2, %3", Улица, Дом, Квартира));
        ДанныеПечати.Вставить("ТелОрг", "Тел: " + Телефон);
        ДанныеПечати.Вставить("ЭПОрг", "E-mail: " + ЭлектроннаяПочта);
               
        ДанныеПечати.Вставить("Контрагент", Шапка.КонтрагентПредставление);           
        ДанныеПечати.Вставить("ФайлЛоготип", Шапка.ФайлЛоготип); 
       
        ТаблицаТовары     = Шапка.Товары.Выгрузить();
        ТаблицаУслуги     = Шапка.Услуги.Выгрузить();
       
        Всего = ТаблицаТовары.Итог("Всего") + ТаблицаУслуги.Итог("Всего");
        КоличествоНаименований = ТаблицаТовары.Количество() + ТаблицаУслуги.Количество();       
       
        ИтогоКОплате = Всего;
        ДанныеПечати.Вставить("ИтогоКОплате", ИтогоКОплате);
       
        ДанныеПечати.Вставить("Всего", Всего);
       
        // Подписи.
        РасшифровкаПодписиРуководителя = "";
        РасшифровкаПодписиГлавногоБухгалтера = "";
        ОтветственныеЛица = БухгалтерскийУчетСервер.ОтветственныеЛицаОрганизацийРуководители(Шапка.Организация, Шапка.Дата);
        БухгалтерскийУчетСервер.ФамилияИнициалыПоНаименованию(РасшифровкаПодписиРуководителя, ОтветственныеЛица.Руководитель);
        БухгалтерскийУчетСервер.ФамилияИнициалыПоНаименованию(РасшифровкаПодписиГлавногоБухгалтера, ОтветственныеЛица.ГлавныйБухгалтер);
        // Области
        МассивОбластейМакета = Новый Массив;
   
        // Печать с логотипом.
        Если ЗначениеЗаполнено(Шапка.ФайлЛоготип) Тогда 
            МассивОбластейМакета.Добавить("ЗаголовокСЛоготипом");
        Иначе     
            МассивОбластейМакета.Добавить("Заголовок");
        КонецЕсли;
        МассивОбластейМакета.Добавить("ШапкаТаблицы");
        МассивОбластейМакета.Добавить("Строка");
        МассивОбластейМакета.Добавить("ИтогоКОплате");
        МассивОбластейМакета.Добавить("Подвал");
       
        Для Каждого ИмяОбласти Из МассивОбластейМакета Цикл
            ОбластьМакета = Макет.ПолучитьОбласть(ИмяОбласти);
            Если ИмяОбласти = "ЗаголовокСЛоготипом" Тогда
                //Логотип = Новый Соответствие; // Ключ - имя картинки в области, Значение - имя реквизита
                //Логотип.Вставить("Логотип", "ФайлЛоготип");
                //ЗаполнитьЛоготипФаксимилеВОбластиМакета(ОбластьМакета, ДанныеПечати, Логотип, Ошибки); 
                Если не Шапка.ФайлЛоготип.Пустая() Тогда
                    ДвоичныеДанные = РаботаСФайлами.ДвоичныеДанныеФайла(Шапка.ФайлЛоготип);
                    Если значениеЗаполнено(ДвоичныеДанные) тогда
                        КартинкаЛоготипа = Новый Картинка(ДвоичныеДанные); 
                        ОбластьМакета.Рисунки.ФайлЛоготип.Картинка = КартинкаЛоготипа;
                    КонецЕсли;
                КонецЕсли;
            КонецЕсли;   
           
            Если ИмяОбласти <> "Строка"Тогда
                ЗаполнитьЗначенияСвойств(ОбластьМакета.Параметры, ДанныеПечати);
                ТабличныйДокумент.Вывести(ОбластьМакета);
               
            Иначе
                Для Каждого СтрокаТаблицы Из ТаблицаТовары Цикл
                    ОбластьМакета.Параметры.Заполнить(СтрокаТаблицы);
                    ОбластьМакета.Параметры.Цена = Формат(СтрокаТаблицы.Цена, "ЧЦ=23; ЧДЦ=" + Шапка.ТочностьЦены +" ; ЧГ=3,0");
                    ТабличныйДокумент.Вывести(ОбластьМакета);
                КонецЦикла;
               
                Для Каждого СтрокаТаблицы Из ТаблицаУслуги Цикл
                    ОбластьМакета.Параметры.Заполнить(СтрокаТаблицы);
                    ОбластьМакета.Параметры.Цена = Формат(СтрокаТаблицы.Цена, "ЧЦ=23; ЧДЦ=" + Шапка.ТочностьЦены +" ; ЧГ=3,0");
                    ТабличныйДокумент.Вывести(ОбластьМакета);
                КонецЦикла;
            КонецЕсли;   
        КонецЦикла;
       
        УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, Шапка.Ссылка);
    КонецЦикла;
   
    Возврат Новый ТабличныйДокумент;   

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

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

    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "СчетНаОплатуПокупателю", "Акт выполненных работ", СформироватьПечатнуюФорму(МассивОбъектов[0], ОбъектыПечати));

КонецПроцедуры

ошибка: В обработчике печати не был сформирован табличный документ для: АктВыполненныхРабот

chuevsf

Добрый день.
Посмотрите тут. После изучения никаких проблем с ВПФ больше не будет.

А что касается ошибки, то внимательно посмотрите на эти две строки:

ДобавитьКоманду(ТаблицаКоманд, "Акт выполненных работ", "АктВыполненныхРабот", "ВызовСерверногоМетода", Истина, "ПечатьMXL");

и

 УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "СчетНаОплатуПокупателю", "Акт выполненных работ", СформироватьПечатнуюФорму(МассивОбъектов[0], ОбъектыПечати));

"АктВыполненныхРабот" и "СчетНаОплатуПокупателю" наводят на подозрение.

fruitella

У тебя возврат всегда нового пустого табличного документа, который будет не заполнен.
Поставь Экспорт у СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати) и вызови из модуля формы, получишь результат.

sali


fruitella

sali, Я не понимаю твоего вопроса. У тебя изначально был  вопрос про печатную форму, причем тут эксель?
Если ты имеешь в виду, как прочитать файл эксель и загрузить его в 1С, то вот тут глянь: https://infostart.ru/1c/tools/1411881/

sali

fruitella, извините, да не по теме был задан вопрос. я просто хотел спросить не создавая темы :D
просто я находил кучу информации о загрузки данных с екселя, а вот загрузки данных в ексель для меня сложно было отыскать

Максим75

sali, вот ссылка
https://www.koderline.ru/expert/programming/article-metody-dlya-com-obekta-v-1s-excel-applications/

одна из вагона в сети

просто уже стараются ComОбъект стараются не использовать. Кому надо, делают нужную печатную форму и просто сохраняют в Екселе.

sali

Максим75, это код похож на загрузку из екселя только укороченный вариант, т к читать его не надо

Максим75

sali, Ексель уже никто не читает через создание COMОбъекта. В 8-ке конечно, в 7-ке никуда не денешься.

sali

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

    Если ДиалогОткрытия.Выбрать() Тогда
        ПутьККаталогу = ДиалогОткрытия.Каталог;
    КонецЕсли;   
   
    Если Прав(ПутьККаталогу,1) <> "\" Тогда
        Объект.КаталогСохранения = ПутьККаталогу+"\";
    Иначе
        Объект.КаталогСохранения = ПутьККаталогу;
       
    КонецЕсли;
    //Сформируем уникальное имя файла
    ДатаИВремя = СтрЗаменить(ТекущаяДата(),":",".");
    ИмяФайла = "Импорт_" + ДатаИВремя; 
   
    //Создадим табличный документ
    ТабДок = Новый ТабличныйДокумент;
   
    ФорматФайла =  Объект.ТипФайла;
   
    //Добавим выбранный каталог к именя файла
    ПолноеИмяФайла = Объект.КаталогСохранения + ИмяФайла + "." + ФорматФайла;
   
        // Определим в каком формате будет выгружен документ
    Если   ФорматФайла = "XLS" Тогда
        ЗадатьТип =  ТипФайлаТабличногоДокумента.xls;
    ИначеЕсли   ФорматФайла = "XLSX" Тогда
        ЗадатьТип =  ТипФайлаТабличногоДокумента.xlsx;
    Иначе
        Сообщить("Необходимо выбрать формат файла");
        Возврат;
    КонецЕсли;   
   
     //Создадим файл и запишем в табличный документ
        ТабДок.Записать(ПолноеИмяФайла, ЗадатьТип);
       
        //Заполним ТабДок на сервере
        ЗаполнитьТаблицуНаСервере(ТабДок);
       
        //Запишем заполненную таблицу в тот же файл
        ТабДок.Записать(ПолноеИмяФайла, ЗадатьТип);           

    Сообщить("Выгрузка данных успешно завершена!");
    ЗаполнитьТаблицуНаСервере(ТабДок);
КонецПроцедуры 

Функция ЗаполнитьТаблицуНаСервере(ТабДок) Экспорт
    Макет = Документы.ПоступлениеТоваров.ПолучитьМакет("Макет");
    ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
   
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ПоступлениеТоваров.Товары.(
        |        Номенклатура КАК Номенклатура,
        |        Количество КАК Количество,
        |        Цена КАК Цена,
        |        Сумма КАК Сумма
        |    ) КАК Товары
        |ИЗ
        |    Документ.ПоступлениеТоваров КАК ПоступлениеТоваров";
   
    РезультатЗапроса = Запрос.Выполнить();
   
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
   
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        ОбластьСтрока.Параметры.Заполнить(ВыборкаДетальныЕЗаписи);
        Табдок.Вывести(ОбластьСтрока);
    КонецЦикла;
    Возврат(ТабДок);
КонецФункции
Импорт_24.10.2024 18.28.23.XLSX - Excel 24.10.2024 18_36_04.pngКонфигуратор - Розница для Кыргызстана, редакция 2.3 24.10.2024 18_37_13.png 

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск