Практика создания заказной внешней печатной формы для УТ 11.3

08.09.20

Учетные задачи - Печатные формы

Внешняя печатная форма "Счёт на оплату" для конфигурации Управление торговлей, редакция 11.3

Скачать файлы

Наименование Файл Версия Размер
СчётВПФ
.epf 24,55Kb
33
.epf 1.12 24,55Kb 33 Скачать

Доброго времени суток!

   Раз уж уважаемый читатель моей статьи решил потратить своё драгоценное время на чтение, постараюсь раскрыть тему как можно более тщательно.

   В организации эксплуатируется конфигурация "Управление Торговлей". На момент приобретения актуальным был релиз 11.1.10.ХХХ

   После проведения пуско-наладочных работ, руководству понадобилось немного модифицировать счёт на оплату покупателю. Доработка несложная: нужно добавить логотип организации и одну строчку под итогом суммы. Вот так:

   То есть нужно добавить контактную информацию о менеджере. Логотип решил оставить на десерт и начать именно с этого. Всё можно было бы сделать крайне просто: зайти в "Макеты печатных форм", найти нужную и тупо вбить необходимую информацию.

   Если бы не одно НО, при выписке счёта конкретным менеджером должна указываться информация именно об этом менеджере. То есть нужно проанализировать текущего пользователя и вывести соответствующие данные. Сначала попробовал подсоединить внешнюю печатную форму, но готовой не нашёл, а с ходу сделать свою не смог, решил пойти по другому пути. Если перефразировать похабный анекдот про кота Матроскина и корову Мурку, получается: моя конфигурация, что хочу, то и делаю.

   Сказано ==> сделано. Зашёл в конфигуратор, включил возможность изменения, нашёл необходимый макет, доработал модуль и вуа-ля: всё работает. Так продолжалось полтора года. Всё было бы хорошо, если бы не один подводный камень. При всей несложности доработки почему-то с неопределённого момента перестали ставится обновления.

   Однако руководство решило работать на последнем обновившемся релизе и ничего не менять, но наступил 2017 год и перестал работать сервис "1С-Контрагент". Настало время вешать обратно замочек в конфигураторе. Долго ли умеючи? Конечно нет. Новый клиент стал снова заводиться по ИНН, а вот со счётом получилась печалька. Решил не наступать на те же грабли, а сделать внешнюю обработку. Однако, не смотря на солидный возраст дружбы с 1С стал немножечко буксовать.

   Нашёл интересную статью //infostart.ru/public/431523/ уважаемого El_Loco и решил всё делать по инструкции на конфигурации Управление торговлей, редакция 11 (11.3.3.159).  Мне была как раз нужна внешняя печатная форма для документа "Заказ клиента".

   1) Создал новую внешнюю обработку:

   2) Проанализировал модуль менеджера документа ЗаказКлиента:

#Область Печать
// Заполняет список команд печати.
//
// Параметры:
//   КомандыПечати - ТаблицаЗначений - состав полей см. в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
    Если ПраваПользователяПовтИсп.ЭтоПартнер() Тогда
        // Заказ клиента
        КомандаПечати = КомандыПечати.Добавить();
        КомандаПечати.МенеджерПечати = "Обработка.ПечатьЗаказовНаТоварыУслуги";
        КомандаПечати.Идентификатор = "ЗаказКлиента";
        КомандаПечати.Представление = НСтр("ru = 'Заказ клиента'");
        КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
        // Счет на оплату
        КомандаПечати = КомандыПечати.Добавить();
        КомандаПечати.МенеджерПечати = "Обработка.ПечатьСчетовНаОплату";
        КомандаПечати.Идентификатор = "СчетНаОплату";
        КомандаПечати.Представление = НСтр("ru = 'Счет на оплату'");
        КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;

Соответственно, мне нужна обработка "ПечатьСчетовНаОплату"

   El_Loco рекомендует весь модуль менеджера обработки "ПечатьСчетовНаОплату" перенести в модуль нашей обработки. Там оказалось 9 процедур и 7 функций. Но нет ничего проще копипасты. Скопировал. Сохранил обработку, подгрузил в программу. Всё шло, как и предсказывал El_Loco:

   А вот тут что-то пошло не так. Рекомендовалось убрать лишний аргумент ПараметрыПечати из процедуры "Печать" и прописать его в начале процедуры:

	
	ПараметрыПечати = Новый Структура();
	

   Так я и сделал, но вместо того, чтобы макет вывелся на печать, хоть и не тот, получил сообщение: "В обработчике печати не был сформирован табличный документ для: ЗаказКлиента". Оказалось, что не всё так просто. Процедура СведенияОВнешнейОбработке пишется не просто так:

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

   В ней есть оператор ДобавитьКоманду, и третий параметр в нём должен содержать именно ту команду, которая потом будет использоваться в процедуре Печать.

   Эта ошибка была устранена, попробовал напечатать получившуюся форму. Но получилось вот так:

   Стал разбираться, откуда взялось НаименованиеБанкаПолучателя, оказалось, что это значение процедуры ЗаполнитьТабличныйДокументИзвещение, которая в свою очередь вызывается из функции СформироватьПечатнуюФормуИзвещение.

   Анатолий Наумович Рыбаков придумал крылатую фразу "Нет человека - нет проблемы", в нашем случае это "Нет кода - нет проблемы". Тем более, что разработчики исходного кода заботливо поместили функцию и процедуру внутрь области "Извещение":

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

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

   Ну вот, теперь другое дело. Внешняя печатная форма наконец-то напечаталась. С единственной оговоркой, что вместо описанного El_Loco способа в самом начале процедуры ЗаполнитьРеквизитыШапкиСчетаНаОплату нужно прописать вот такой код:

Макет = ПолучитьМакет("ПФ_MXL_СчетНаОплату");

   Теперь нужно доработать макет, собственно ради чего всё и затевалось. Сначала в секцию ПодвалСчета я добавил строку ВашМенеджер:

   Для красоты объединил все ячейки, которые находятся под жирной сплошной линией в самом верху секции. Затем зашёл в свойства получившейся ячейки и оформил заполнение как параметр:

   Осталось только правильно вписать код в процедуру "ЗаполнитьРеквизитыПодвалаСчетаНаОплату". Сразу после строк в ней

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

добавил код:

СтруктураДанныхПодвал.Вставить("ВашМенеджер","Ваш менеджер: "+ДанныеПечати.Менеджер+
	" 8(23232)23232, 8(23232)32323, e-mail:paradise777@mail.ru");

   Разумеется, здесь, или в другой любой области макета каждый может написать то, что нужно конкретно ему, здесь мы обсуждаем принцип размещения данных. Вообще использование внешнего макета раскрывает огромный простор для полёта фантазии. Главное всё тестировать и сохранять предыдущие версии макета и обработки, иначе легко запутаться и всё придётся начинать заново.

   Наступило время разобраться с логотипом. Оказалось всё достаточно примитивно. В разных релизах может быть свой способ открыть справочник Организации, в Управлении торговлей 11.3.3.159 это делается так: жмём шестерёночку сверху "НСИ и администрирование", в левом вертикальном меню выбираем пункт "Сведения о предприятии", в центральной области окна отобразится соответствующая информация, выбираем первый пункт "Сведения об организации" и выходим на такое окно:

   Соответственно переходим на вкладочку "Настройка печати" и попадаем в окно для установки логотипа и факсимиле:

   В результате получился доработанный счёт с логотипом. Здесь нужно отметить, что красота полученного счёта прямо пропорциональна размерам логотипа, если он квадратный и небольшой, то всё будет хорошо, а если прямоугольный вытянутый, то нужно немножко поколдовать с макетом:

   То есть растянуть область картинки под логотип и сжать текст мелким шрифтом справа от него.

   Однако при таком построении отчёта не будет выводиться область  факсимиле, а это уже плохо, потому что в некоторых случаях она нужна, а в некоторых нет. Ещё раз проанализировал модуль менеджера документа ЗаказКлиента:

        // Счет на оплату
		КомандаПечати = КомандыПечати.Добавить();
		КомандаПечати.МенеджерПечати = "Обработка.ПечатьСчетовНаОплату";
		КомандаПечати.Идентификатор = "СчетНаОплату";
		КомандаПечати.Представление = НСтр("ru = 'Счет на оплату'");
		КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
		
		// Счет на оплату
		КомандаПечати = КомандыПечати.Добавить();
		КомандаПечати.МенеджерПечати = "Обработка.ПечатьСчетовНаОплату";
		КомандаПечати.Идентификатор = "СчетНаОплату";
		КомандаПечати.Представление = НСтр("ru = 'Счет на оплату с факсимиле'");
		КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
		КомандаПечати.ДополнительныеПараметры.Вставить("ОтображатьФаксимиле", Истина);

   Разница только в последней строчке, осталось только подумать, куда её вставить. В процедуре ЗаполнитьРеквизитыПодвалаСчетаНаОплату есть вызов процедуры общего модуля ФормированиеПечатныхФорм:

Процедура ВывестиФаксимилеВТабличныйДокумент(Макет, ОбластьМакета, Организация, ПараметрыПечати = Неопределено) Экспорт
	
	ОтображатьФаксимиле = Ложь;
	Если ПараметрыПечати <> Неопределено И ПараметрыПечати.Свойство("ОтображатьФаксимиле") Тогда
		ОтображатьФаксимиле = ПараметрыПечати.ОтображатьФаксимиле;
	КонецЕсли;

   То есть, если в структуру ПараметрыПечати добавить свойство ОтображатьФаксимиле в положении Истина, то всё должно получиться. Так я и сделал в процедуре Печать:

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

   Всё получилось. Теперь нужно разобраться с тем, что факсимиле нужно выводить не всегда, а для этого понадобятся две команды печати. Сначала хотел сделать две внешние обработки, одну с факсимиле, а другую без, но это было бы немножко не профессионально. Нужно, чтобы одна внешняя печатная форма создавала две команды печати, поэтому стал разбираться и эксперементировать. Сначала скопировал строку ДобавитьКоманду в функции СведенияОВнешнейОбработке:

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

   Потом сделал соответствующую доработку в процедуре Печать:

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

   Теперь всё чётко. Есть два варианта, с факсимиле и без в одной внешней форме. Можно было бы ещё проанализировать, не осталось ли неиспользуемых процедур или функций, но это уже на работу никак не влияет, поэтому решил оставить так.

   Спасибо за внимание.

Внешняя печатная форма счёт УТ11.3

См. также

SALE! 20%

Автоматический заказ поставщику в 1С: загрузка прайсов и анализ цен поставщиков для УТ 10.3, УТ 11, КА2, УНФ, УПП, ERP, Розница 2

Бюджетирование и планирование Оптовая торговля Розничная торговля Логистика, склад и ТМЦ Анализ продаж Платформа 1С v7.7 Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Система управления запасами для 1С помогает работать с запасами правильно: автоматически рассчитывает потребность и делает заказ поставщику, загружает прайсы, перемещает товары по филиалам, анализирует продажи и позволяет управлять ассортиментом.

28500 22800 руб.

21.04.2017    90173    105    39    

190

ЕГАИС++. Опт, производство, импорт

Оптовая торговля Розничная торговля Обмен с ГосИС Платформа 1С v8.3 1С:Управление торговлей 10 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Рестораны, кафе и фаст-фуд Россия Бухгалтерский учет Управленческий учет Акцизы Платные (руб)

Полнофункциональное расширение (ранее известное как Модуль 1С-ЕГАИС) для взаимодействия типовых конфигураций 1С и ЕГАИС, предоставляющее максимум возможностей по работе с УТМ. Получение и отправка ТТН, отправка акта о постановке на баланс и акта о списании. Получение остатков. Загрузка и сопоставление номенклатуры и контрагентов. Оправка в ЕГАИС отчетов о производстве и импорте.

8970 руб.

15.12.2015    165958    679    362    

385

SALE! 25%

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 15300 руб.

06.10.2023    7263    21    6    

39

Обмен с системой ЦРПТ (Универсальная конфигурация ХамелеонЦРПТ + маркировка табака, обуви, одежды, лекарств, фото, молока, духов(парфюма), питьевой воды, велосипедов и шин)

Оптовая торговля Розничная торговля Обмен с ГосИС Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Россия Бухгалтерский учет Управленческий учет Платные (руб)

Данная публикация создана для помощи разработчикам, интеграторам и другим заинтересованным лицам по настройке системы маркировки обуви, одежды, лекарств, табака, фото, молока, духов(парфюма), питьевой воды, велосипедов и шин. Смело задавайте нам вопросы по работе с ЦРПТ, GS1, ЭДО, Национальным каталогом, мы накопили достаточно большую базу знаний по данным темам и готовы ответить на все Ваши вопросы.

104000 руб.

18.03.2019    110322    34    114    

178

Обмен с системой Меркурий через Web + Ветис.API для любых конфигураций (универсальная конфигурация Хамелеон Меркурий)

Оптовая торговля Производство готовой продукции (работ, услуг) Розничная торговля Обмен с ГосИС Платформа 1С v8.3 Конфигурации 1cv8 Сельское хозяйство и рыболовство Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Рестораны, кафе и фаст-фуд Пищевая промышленность Россия Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная конфигурация Хамелеон Меркурий для взаимодействия с системой Меркурий(тестовый+рабочий+демо контур) может использоваться для интеграции в любую конфигурацию на базе 1С, версии ПРОФ и выше. Основное отличие от других решений - работа через веб-интерфейс и API 2.0(API 2.1). Для удобства реализован общий интерфейс в виде обработки, схожей с интерфейсом Меркурий, но возможностей гораздо больше, т.к. при интеграции в Вашу учетную систему, можно на основании Ваших справочников и документов, создавать соответствующие документы и справочники в системе Меркурий и наоборот.

104000 руб.

08.11.2017    120855    296    138    

392
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Matveev_VS 159 10.05.17 10:21 Сейчас в теме
Спасибо! Очень полезно
2. user633533_encantado 11 11.05.17 14:20 Сейчас в теме
Не по феншую, не используются соответствующие БСП в модулях описания внешней обработки.
3. Hamsik 13 15.05.17 09:55 Сейчас в теме
Что в вашей практике необычного ? Обычное создание ВПФ ?
5. zemskov 64 16.05.17 06:18 Сейчас в теме
(3) На необычность не претендовал. Хотел как раз осветить сам процесс.
kalashnikov_s; +1 Ответить
4. dock 44 15.05.17 11:19 Сейчас в теме
Прекрасная статья! Читается замечательно :)
ИМХО, основная полезность не в коде (и результирующей обработке), а именно в описании процесса: как думал, о чем думал, как реагировал на внезапно возникший перед носом черенок от граблей...
buh.simf; MrKondr; kalashnikov_s; M.Nikitin; +4 Ответить
6. Scop 61 16.05.17 07:59 Сейчас в теме
Спасибо, тема отлично раскрыта, плюсик в карму.
kalashnikov_s; +1 Ответить
7. AlX0id 16.05.17 09:26 Сейчас в теме
Еще бы добавить про использование http://infostart.ru/public/162019/ для отладки - было бы вообще в тему )
kalashnikov_s; +1 Ответить
8. sss999 48 08.06.17 23:48 Сейчас в теме
Спасибо хорошим людям!Я бы сам не догадался про команду в печати и в описании
kalashnikov_s; +1 Ответить
9. -=AleXX=- 26.06.18 17:27 Сейчас в теме
Очень помогло! Спасибо!
10. vgv8 22.10.20 03:01 Сейчас в теме
Плюсанул , давно искал такое описание
А, что надо для последних версий УТ 11.4.13 и БП 3.0.83 ?
11. zemskov 64 22.10.20 07:41 Сейчас в теме
(10)Спасибо
Не работает, что ли?
Оставьте свое сообщение