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

Розница 2.3. Внешняя обработка

Автор nikoloc2009, 24 мар 2021, 18:37

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

nikoloc2009

При попытке распечатать внешнюю печатную форму появляется ошибка "Печатная форма недоступна" .
Подскажите, пожалуйста, дураку, где ошибка ?

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

Возврат ПараметрыРегистрации;

конецфункции

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

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

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

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



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



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






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

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

ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетНаОплату";

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

Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);

Результаты = Запрос.ВыполнитьПакет();

//Макет = обработки.ВнешняяПечать.ПолучитьМакет("ПФ_MXL_СчетНаОплату");

макет=ПолучитьМакет("ПФ_MXL_СчетНаОплату");
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");

ОбластьШапкаНомера         = Макет.ПолучитьОбласть("ШапкаТаблицы|НомерСтроки");
ОбластьШапкаКодов          = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаКодов");
ОбластьШапкаДанных         = Макет.ПолучитьОбласть("ШапкаТаблицы|Данные");
ОбластьШапкаСкидок         = Макет.ПолучитьОбласть("ШапкаТаблицы|Скидка");
ОбластьШапкаСуммы          = Макет.ПолучитьОбласть("ШапкаТаблицы|Сумма");

ОбластьКолонкаТовар = Макет.Область("Товар");
Если Не ВыводитьКоды Тогда
ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки
                                  + Макет.Область("КолонкаКодов").ШиринаКолонки;
КонецЕсли;
ОбластьСтрокаНомера         = Макет.ПолучитьОбласть("Строка|НомерСтроки");
ОбластьСтрокаКодов          = Макет.ПолучитьОбласть("Строка|КолонкаКодов");
ОбластьСтрокаДанных         = Макет.ПолучитьОбласть("Строка|Данные");
ОбластьСтрокаСкидок         = Макет.ПолучитьОбласть("Строка|Скидка");
ОбластьСтрокаСуммы          = Макет.ПолучитьОбласть("Строка|Сумма");

ОбластьИтогоНДСНомера = Макет.ПолучитьОбласть("ИтогоНДС|НомерСтроки");
ОбластьИтогоНДСКодов  = Макет.ПолучитьОбласть("ИтогоНДС|КолонкаКодов");
ОбластьИтогоНДСДанных = Макет.ПолучитьОбласть("ИтогоНДС|Данные");
ОбластьИтогоНДССкидок = Макет.ПолучитьОбласть("ИтогоНДС|Скидка");
ОбластьИтогоНДССуммы  = Макет.ПолучитьОбласть("ИтогоНДС|Сумма");

// Вывести Итого.
ОбластьИтогоНомера         = Макет.ПолучитьОбласть("Итого|НомерСтроки");
ОбластьИтогоКодов          = Макет.ПолучитьОбласть("Итого|КолонкаКодов");
ОбластьИтогоДанных         = Макет.ПолучитьОбласть("Итого|Данные");
ОбластьИтогоСкидок         = Макет.ПолучитьОбласть("Итого|Скидка");
ОбластьИтогоСуммы          = Макет.ПолучитьОбласть("Итого|Сумма");

ОбластьСуммаПрописью = Макет.ПолучитьОбласть("СуммаПрописью");
ОбластьПодписей      = Макет.ПолучитьОбласть("ПодвалСчета");

ВыборкаПоДокументам = Результаты[0].Выбрать();
ВыборкаПоТабличнымЧастям = Результаты[1].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

ПервыйДокумент = Истина;

Пока ВыборкаПоДокументам.Следующий() Цикл

Если НЕ ВыборкаПоТабличнымЧастям.НайтиСледующий(Новый Структура("Ссылка",ВыборкаПоДокументам.Ссылка)) Тогда

Продолжить;

КонецЕсли;

ВыборкаПоСтрокамТЧ = ВыборкаПоТабличнымЧастям.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Если НЕ ПервыйДокумент Тогда

ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();

КонецЕсли;

ПервыйДокумент = Ложь;
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;

ЗаполнитьЗначенияСвойств(РеквизитыДокумента, ВыборкаПоДокументам);

РеквизитыСчета = Справочники.БанковскиеСчетаОрганизаций.РеквизитыБанковскогоСчетаОрганизации(ВыборкаПоДокументам.БанковскийСчет);
ОбластьЗаголовок.Параметры.Заполнить(РеквизитыСчета);

Если Не ЗначениеЗаполнено(ОбластьЗаголовок.Параметры.Банк) Тогда
ОбластьЗаголовок.Параметры.Банк = Строка(ВыборкаПоДокументам.БанковскийСчет);
КонецЕсли;

ОбластьЗаголовок.Параметры.Заполнить(ВыборкаПоДокументам);

ТекстНазначениеПлатежа = НСтр("ru='Оплата по заказу клиента №%Номер%'");
ТекстНазначениеПлатежа = СтрЗаменить(
ТекстНазначениеПлатежа,
"%Номер%",
ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(РеквизитыДокумента.Номер, Ложь, Истина));

ОбластьЗаголовок.Параметры.НазначениеПлатежа = ТекстНазначениеПлатежа;

ОбластьЗаголовок.Параметры.ТекстЗаголовка = ФормированиеПечатныхФормСервер.СформироватьЗаголовокДокумента(
РеквизитыДокумента,
СинонимДокумента);

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

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

ТабличныйДокумент.Вывести(ОбластьЗаголовок);

// Шапка
ТабличныйДокумент.Вывести(ОбластьШапкаНомера);
Если ВыводитьКоды Тогда
ОбластьШапкаКодов.Параметры.ИмяКолонкиКодов = КолонкаКодов;
ТабличныйДокумент.Присоединить(ОбластьШапкаКодов);
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьШапкаДанных);
ТабличныйДокумент.Присоединить(ОбластьШапкаСкидок);
ТабличныйДокумент.Присоединить(ОбластьШапкаСуммы);


ВсегоНаименований = 0;
Сумма             = 0;
ВсегоСкидок       = 0;
ВсегоБезСкидок    = 0;
СуммаНДС          = 0;

// Строки ТЧ
Пока ВыборкаПоСтрокамТЧ.Следующий() Цикл
Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамТЧ.Номенклатура) Тогда
Продолжить;
КонецЕсли;

ОбластьСтрокаНомера.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ТабличныйДокумент.Вывести(ОбластьСтрокаНомера);

Если ВыводитьКоды Тогда

ОбластьСтрокаКодов.Параметры.Артикул = ВыборкаПоСтрокамТЧ["КолонкаКодов"];
ТабличныйДокумент.Присоединить(ОбластьСтрокаКодов);

КонецЕсли;

ОбластьСтрокаДанных.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ОбластьСтрокаДанных.Параметры.Товар = ФормированиеПечатныхФормСервер.ПолучитьПредставлениеНоменклатурыДляПечати(
ВыборкаПоСтрокамТЧ.НоменклатураПредставление,ВыборкаПоСтрокамТЧ.ХарактеристикаПредставление);
ТабличныйДокумент.Присоединить(ОбластьСтрокаДанных);

ОбластьСтрокаСкидок.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ТабличныйДокумент.Присоединить(ОбластьСтрокаСкидок);

ОбластьСтрокаСуммы.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ТабличныйДокумент.Присоединить(ОбластьСтрокаСуммы);

ВсегоНаименований = ВсегоНаименований + 1;

Сумма          = Сумма       + ВыборкаПоСтрокамТЧ.Сумма;
ВсегоСкидок    = ВсегоСкидок + ВыборкаПоСтрокамТЧ.Скидка;
ВсегоБезСкидок = Сумма       + ВсегоСкидок;
СуммаНДС       = СуммаНДС    + Окр(ВыборкаПоСтрокамТЧ.СуммаНДС, 2, 1);

КонецЦикла;

ТабличныйДокумент.Вывести(ОбластьИтогоНомера);
Если ВыводитьКоды Тогда
ТабличныйДокумент.Присоединить(ОбластьИтогоКодов);
КонецЕсли;

ТабличныйДокумент.Присоединить(ОбластьИтогоДанных);
ОбластьИтогоСкидок.Параметры.ВсегоСкидок    = ВсегоСкидок;
ОбластьИтогоСкидок.Параметры.ВсегоБезСкидок = ВсегоБезСкидок;
ТабличныйДокумент.Присоединить(ОбластьИтогоСкидок);
ОбластьИтогоСуммы.Параметры.Всего = Сумма;
ТабличныйДокумент.Присоединить(ОбластьИтогоСуммы);


// Вывести ИтогоНДС
ТабличныйДокумент.Вывести(ОбластьИтогоНДСНомера);
Если ВыводитьКоды Тогда
ТабличныйДокумент.Присоединить(ОбластьИтогоНДСКодов);
КонецЕсли;

ОбластьИтогоНДСДанных.Параметры.НДС = ?(ВыборкаПоДокументам.ЦенаВключаетНДС, НСтр("ru = 'В том числе НДС:'"), НСтр("ru = 'Сумма НДС:'"));
ТабличныйДокумент.Присоединить(ОбластьИтогоНДСДанных);
ТабличныйДокумент.Присоединить(ОбластьИтогоНДССкидок);

Если НЕ ВыборкаПоДокументам.УчитыватьНДС Тогда
СуммаНДССтрока = НСтр("ru = 'Без НДС'");
Иначе
СуммаНДССтрока = Строка(СуммаНДС);
КонецЕсли;

ОбластьИтогоНДССуммы.Параметры.ВсегоНДС = СуммаНДССтрока;
ТабличныйДокумент.Присоединить(ОбластьИтогоНДССуммы);


// Вывести Сумму прописью.
ТекстИтоговойСтроки = НСтр("ru = 'Всего наименований %ВсегоНаименований%, на сумму %Итого%'");

ТекстИтоговойСтроки = СтрЗаменить(ТекстИтоговойСтроки,"%ВсегоНаименований%", ВсегоНаименований);
ТекстИтоговойСтроки = СтрЗаменить(ТекстИтоговойСтроки,"%Итого%", ФормированиеПечатныхФормСервер.ФорматСумм(Сумма));

ОбластьСуммаПрописью.Параметры.ИтоговаяСтрока = ТекстИтоговойСтроки;
ОбластьСуммаПрописью.Параметры.СуммаПрописью  = ФормированиеПечатныхФормСервер.СформироватьСуммуПрописью(Сумма);

ТабличныйДокумент.Вывести(ОбластьСуммаПрописью);

// Подписи
СтруктураОтветственных = ФормированиеПечатныхФормСервер.ОтветственныеЛицаОрганизаций(ВыборкаПоДокументам.Поставщик, ТекущаяДатаСеанса());

ОбластьПодписей.Параметры.ФИОРуководителя = СтруктураОтветственных.Руководитель;
ОбластьПодписей.Параметры.ФИОБухгалтера = СтруктураОтветственных.ГлавныйБухгалтер;
ОбластьПодписей.Параметры.ФИОМенеджер = ФормированиеПечатныхФормСервер.ФамилияИнициалыФизЛица(ВыборкаПоДокументам.Ответственный);

ТабличныйДокумент.Вывести(ОбластьПодписей);

УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ВыборкаПоДокументам.Ссылка);

КонецЦикла;

ТабличныйДокумент.АвтоМасштаб = Истина;

Возврат ТабличныйДокумент;

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

LexaK

попробуйте процедуру печати по такому примеру сделать, (только внимательно свои переменные/имена/реквизиты подставьте)

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

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

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

если помогло нажмите: Спасибо!

Теги:

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

Рейтинг@Mail.ru

Поиск