Конструктор внешних печатных форм NEW beta (обычные и управляемые приложения!)




Исходная обработка http://infostart.ru/public/162024/, здесь просто исправлены некоторые процедуры и функции для управляемого приложения. (Публикуется с согласия автора SeiOkami)
12.07.2024 — Версия 4.3 — убрал модальность для управляемой формы, изменена встроенная ВПФ .
23.11.2024 — Версия 4.4 — изменена встроенная ВПФ .
03.04.2024 — Версия 4.7 — исправлено сохранение ВПФ в клиент-серверном варианте от vshish.
11.05.2024 — Версия 4.8 — исправление от VovkaPutin плюс убрал из текста модуля ВПФ директивы препроцессора (то, что начинается с «#»), убрал модальность при открытии ВПФ из конструктора.
17.10.2024 — Версия 5.1 — тестировалось на платформе 8.3.15.1700, БП 3.0.73.54

Версия 5.1 БП 3.0.73.54 стал делать ВПФ, выяснилось (внезапно), что в общем модуле "УправлениеПечатью" процедура "ПодготовитьКоллекциюПечатныхФорм" лишилась "Экспорт", пришлось вставить немного изменённую в модуль формы ВПФ.

В принципе всё описано в исходной публикации //infostart.ru/public/162024/.

Могу добавить только, что для  последних версий БСП и, соответственно, конфигураций на управляемых формах, наметилась тенденция выносить процедуры и функции печати из модуля менеджера в общие модули. Поэтому, чаще всего, созданную конструктором ВПФ придётся допиливать, перенося в модуль ВПФ эти самые процедцры  и функции из общих модулей.

Инструкция для управляемого приложения

 

Создадим ВПФ, например, для документа Счет покупателю, печатная форма Счет-заказ (пример делаю на платформе 8.3.8.1784 БП 3.0.43.247 база ДЕМО).

Создание ВПФ

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

Итак, по пунктам:

  1. Копируем модуль менеджера документа Счет покупателю, открыв его в Конфигураторе. Копируется весь модуль, например, нажав Ctrl + A, потом Ctrl + С.
  2. Открываем конструктор в режиме учета, выбираем Тип документа СчетНаОплатуПокупателю и нажимаем кнопку Вставить:

  1. Жмём следующую кнопку Анализ. Получаем на закладке Команды и функции список доступных команд печати, список процедур и функций модуля менеджера, и текст выделенных процедур в правом окне. В левом верхнем окне снимаем все галки (кнопки управление вверху)  и отмечаем нужную нам печатную форму СчетЗаказ. В левом нижнем окне нужные для печати выбранной формы процедуры будут отмечены зелёным цветом автоматически. Если необходимо, можно отметить и другие процедуры и функции с помощью кнопки нужна не нужна, они будут перенесены в итоговую обработку, но использовать автоматически ВПФ их не будет, поэтому подумайте, оно Вам надо?  В правом окне можно просмотреть текст выделенных в левом нижнем окне процедур и функций. Текст можно изменить, правда никогда этой возможностью не пользовался, но мало ли кому понадобится?:

  1. Следующая кнопка Сформировать. Создаёт текст модуля обработки ВПФ:

  1. Жмём Скомпилировать – на экране ничего не изменится, просто будет создана ВПФ.
  2. Кнопка Сохранить предложит выбрать путь, куда сохранить созданную обработку и открыть созданную ВПФ для проверки. ВПФ создаётся со встроенной формой обработки, поэтому её можно отлаживать не прибегая к дополнительным средствам. При открытии ВПФ сразу проверяем работоспособность, выбрав документ и сформировав печатную форму:

Как уже говорилось, сейчас она ничем не отличается от типовой, и если нужно что-то изменить, это придётся делать руками, о чём расскажу ниже. Хочется заметить, что указанный порядок формирования ВПФ минимален, остальное пробуйте сами…или не пробуйте. Здесь фактически просто перечислены шаги быстрого создания ВПФ для последующей доработки.

Что удивило, и типовая и внешняя вместо суммы прописью выдают в демке сумму числом:

 

Изменение полученной ВПФ

Для исправления ситуации, и добавления чего-то своего в ВПФ, начнём вносить изменения:

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

КонецЕсли;

Из процедуры Печать видим, что нам нужен общий макет ПФ_MXL_СчетЗаказ. Копируем его в конфигураторе. Ветка Общие – Общие макеты:

Затем в обработке встаём на Макеты и вставляем, теперь макет есть в ВПФ, нужно изменить код модуля, чтобы использовать именно его, а не общий макет:

  1. Анализируем текст процедуры печати и добавляем процедуры и функции общих модулей, использующиеся при формировании печатной формы:
  • Первое, что меняем, это убираем из процедуры печать вызов общего макета – удаляем текст «ОбщийМакет.»
  • Видим, что табличный документ формируется в общем модуле ПечатьТорговыхДокументов, функцию ПечатьСчетаНаОплату из которого копируем в модуль нашей ВПФ (встаем на текст ПечатьСчетаНаОплату и жмём F12 , выбираем функцию и попадаем в общий модуль, где копируем функцию). Я предпочитаю добавленные процедуры и функции включать в отдельную область, которую выделяю в модуле ВПФ:
#Область ДобавленныеПроцедурыИФункции
//между этими строками вставляем скопированные из общих модулей процедуры
#КонецОбласти
  • Сохраняем то, что получилось (или нажимаем на синтаксис контроль). Получаем сообщение об ошибках:

{ВнешняяОбработка.СчетНаОплатуПокупателю_ВнешняяПечатная.МодульОбъекта(371,3)}: Процедура или функция с указанным именем не определена (ВывестиЗаголовокПредупреждение)

                               <<?>>ВывестиЗаголовокПредупреждение(СведенияОДокументе.Получатель, ТабличныйДокумент, Макет); (Проверка: Сервер).

Поскольку  не определена процедура без указания через точку, делам вывод, что она находится в том же общем модуле, что и скопированная нами перед этим функция ПечатьСчетаНаОплату – находим её там, и копируем в модуль ВПФ. И вновь пробуем сохранить. В данном случае нам повезло – ошибок больше нет. В обще-то это редкость, по большому счёту, это самый трудоёмкий момент. Бывает, что может понадобится копирование нескольких процедур и функций, и, может быть, даже не из одного модуля. Главное не просто скопировать, но и правильно их потом вызывать. Универсального рецепта для этого у меня нет.

  • Убираем в процедуре печать строку «ПечатьТорговыхДокументов.» — теперь эта функция будет вызываться из модуля ВПФ.
  • Сохраняем ВПФ, проверяеем в режиме учёта – всё работает, только теперь, всё, что нужно для изменений, у нас находятся в ВПФ. Теперь можно делать необходимые изменения .
  1. Изменяем текст модуля ВПФ:
  • Вызов встроенного макеета вместо общего – находим строку "ОбщийМакет.ПФ_MXL_СчетЗаказ", видим, что находится она в добавленной функции из общего модуля, и не меняя общий модуль ПечатьТорговыхДокументов (сохраняя типовую конфигурацию на полной поддержке) изменяем функцию модуля ВПФ:
//Макет = УправлениеПечатью.МакетПечатнойФормы("ОбщийМакет.ПФ_MXL_СчетЗаказ"); //Было
Макет = ПолучитьМакет("ПФ_MXL_СчетЗаказ"); //Стало

Внимание: После каждого изменения лучше сохранять ВПФ и проверять работоспособность, если менять всё подряд, потом может получится, что легче будет начать с начало, чем исправить то, что наменяли. Ещё совет, когда всё работает, и собираетесь что- то допилить, создайте новую версию ВПФ, и меняйте её – останется рабочий вариант, и текущий, с попыткой допила)))

  • Исправим сумму прописью – сейчас она почему – то выводится числом, вариантов много, можно, например, использовать форматную строку в ячейке макета СуммаПрописью, но это некрасиво, поэтому попробуем найти место в тексте модуля, где заполняется этот параметр и исправим его. Видим строку:
ДанныеПечатиСуммаПрописью.СуммаПрописью = ОбщегоНазначенияБПВызовСервера.СформироватьСуммуПрописью(СуммаКПрописи, СведенияОДокументе.Валюта);

Отладчиком смотрим, где собака порылась. На вид всё фильдиперсово, однако видим вместо строки число. Видим, что при вызове функции общего модуля ОбщегоНазначенияБПВызовСервера.СформироватьСуммуПрописью в параметре СведенияОДокументе.Валюта пусто. Вариантов исправления много – можно вытащить процедуру СформироватьСуммуПрописью в модуль ВПФ, можно посмотреть заполнение строки СведенияОДокументе и заполнить валюту там, можно проверить заполнение валюты, и если там пусто использовать валюту по умолчанию из константы. Мне лень, поэтому возьмём валюту из договора:

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

Сохраняем, проверяем:

  • Теперь добавим в макет новый параметр, например Комментарий и выведем после итоговой строки (пример условный, просто как пример)))):

Обратите внимание, что параметр находится внутри области макета, создал я его так (профи просьба не читать далее)))), встав на СуммаПрописью правой кнопкой – раздвинуть, потом скопировал СуммаПрописью, вставил в среднюю стоку и поменял в третьей строчке СуммаПрописью на Комментарий.

В тексте модуля делаем следующие изменения:

ДанныеПечатиСуммаПрописью = Новый Структура("ИтоговаяСтрока, СуммаПрописью, Комментарий");

и четырьмя строчками ниже вставляем строку:

ДанныеПечатиСуммаПрописью.Комментарий = СокрЛП(СведенияОДокументе.Документ.Комментарий);

В итоге получим кусок кода:

// Вывести Сумму прописью
ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописью");
ДанныеПечатиСуммаПрописью = Новый Структура("ИтоговаяСтрока, СуммаПрописью, Комментарий");
СуммаКПрописи = Сумма + ?(СведенияОДокументе.СуммаВключаетНДС, 0, СуммаНДС);
ДанныеПечатиСуммаПрописью.ИтоговаяСтрока = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Всего наименований %1, на сумму %2'"),     НомерСтроки, ОбщегоНазначенияБПВызовСервера.ФорматСумм(СуммаКПрописи, СведенияОДокументе.Валюта));
ДанныеПечатиСуммаПрописью.СуммаПрописью = ОбщегоНазначенияБПВызовСервера.СформироватьСуммуПрописью(СуммаКПрописи, СведенияОДокументе.ДоговорКонтрагента.ВалютаВзаиморасчетов);//СведенияОДокументе.Валюта);
ДанныеПечатиСуммаПрописью.Комментарий = СокрЛП(СведенияОДокументе.Документ.Комментарий);

Сохраняем, проверяем:

 

Заключение

 

Не претендую на полноту и истину в последней инстанции в изложении. Просто показал на простом примере, как быстро создать и немного изменить внешнюю печатную форму счет на оплату покупателю в БП 3.0. Может кому поможет…

 

99 Comments

  1. progr-2008

    Метод объекта не обнаружен (Печать).

    Reply
  2. Alex_E

    (1) progr-2008, Расскажите подробней, как Вы использовали обработку?

    Вот две ВПФ, которые я только что создал для обычного и управляемого приложения.

    Читайте исходную статью, как пользоваться обработкой (изменял для управляемого приложенгия, если найдёте косяки в обычном — пишите — исправлю)

    Reply
  3. TrinitronOTV

    «…наметилась тенденция выносить процедуры и функции печати из модуля менеджера в общие модули. Поэтому, чаще всего, созданную конструктором ВПФ придётся допиливать, перенося в модуль ВПФ эти самые процедцры и функции из общих модулей.»

    А как-то можно эти общий процедуры и функции программно перенести в ВПФ?

    Reply
  4. Alex_E

    (3) TrinitronOTV,

    А как-то можно эти общий процедуры и функции программно перенести в ВПФ

    овчинка выделки не стоит… Для этого всё равно придётся скопировать тексты общих модулей в конструктор и придумать анализатор текста, чтобы из вызовов процедур общих модулей убрать их имена. Проще создать заготовку ВПФ конструктором, а потом нужные процедуры и функции общих модулей (те, в которых планируется сделать изменения) перенести в модуль ВПФ и тут уже отредактировать. Время на разработку ВПФ всё равно в разы сокращается…

    Reply
  5. TrinitronOTV

    (4) в общем-то согласен с вами

    Reply
  6. progr-2008

    (2)2. Alex_E, а можно подробнее, по шагам, как получили эти формы?

    У меня разнообразные ошибки выдаются при разных наборах требуемых функций.

    Reply
  7. Alex_E

    (6) progr-2008,

    У меня разнообразные ошибки выдаются при разных наборах требуемых функций.

    — про подробнее, будет время выложу инструкцию — сейчас полугодие — не дадут)))

    Вы пишИте, что не получается, может в таком режиме смогу помочь…

    А то у меня информации 0, только по первому посту могу предположить, что пробуете в обычном приложении…

    Reply
  8. progr-2008

    (7) и в обычном, и в управляемых, в разных конфигурациях — сообщения разные.

    Формирую по-умолчанию в УПП 1.3 и в БП 3.0.

    Похоже, от версии конфигурации зависит — в некоторых работает, в некоторых нет.

    Reply
  9. Alex_E

    (8) progr-2008, Давайте попробуем таки на абстракное

    в разных конфигурациях — сообщения разные.

    а пойдём прям по примерам, в такой то конфигурации для такого то документа возникает такая-то ошибка, лучше с картинками, по другому я ничего понять не смогу…

    Reply
  10. Alex_E

    Выложил описание на примере счет покупателю в БП 3.0, вот ВПФ из того примера

    Reply
  11. progr-2008

    (10)Alex_E, отличное описание, особенно важно про изменения ВПФ.

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

    Пункты 1-6 так и делала раньше, только версии конфигураций другие были, не во всех работало, а еще — по несколько форм сразу включала.

    Проще намного по одной форме делать, а не сразу пакет.

    Теперь достаточно понятно стало.

    Спасибо!

    Reply
  12. Alex_E

    (11) progr-2008, Всегда пожалуйста!!!

    Про ошибки так ничего конкретного и не скажете, или их нет больше?

    Reply
  13. progr-2008

    (12) с этой версией БП 3.0, если делать по одной форме — ошибок пока нет, пробовала на нескольких документах. Получилось и несколько форм для реализации.

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

    А вот если несколько форм сразу включить — тогда проблемы, связанные с параметрами печати и т.д.

    Но лучше по одной форме делать, намного проще разбираться.

    Например, для счета в УПП, если основная Печать:

    {ВнешняяОбработка.СчетНаОплатуПокупателю_ВнешняяПечатная.МодульОбъекта(18,19)}: Ожидается выражение

    ПараметрыПечати =<<?>> ;

    {ВнешняяОбработка.СчетНаОплатуПокупателю_ВнешняяПечатная.МодульОбъекта(19,25)}: Ожидается выражение

    КоллекцияПечатныхФорм =<<?>> ;

    {ВнешняяОбработка.СчетНаОплатуПокупателю_ВнешняяПечатная.МодульОбъекта(21,19)}: Ожидается выражение

    ПараметрыВывода =<<?>> ;

    А в реализации еще:

    {ВнешняяОбработка.РеализацияТоваровУслуг_ВнешняяПечатная.МодульОбъекта(47)}: Значение не является значением объектного типа (ДоступнаПечатьПоКомплектно)

    ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина;

    Reply
  14. Alex_E

    (13) progr-2008, Надо будет посмотреть на досуге…которого сейчас практически нет))) УПП 1.3? Вижу, выше было, зря спрашиваю)))

    Reply
  15. Alex_E

    Модераторы, а почему в еженедельном обзоре публикацию не выложили?

    Reply
  16. Alraune

    (15) этим занимаются не модераторы. Тем не менее, проверила письмо с рассылкой, Ваша публикация там есть. В блоке «Новые разработки за StartMoney», примерно в середине списка

    Reply
  17. Alex_E

    (16) Alraune, Спасибо Ирина! У меня наверное очки запылились — не увидел))))

    Reply
  18. Alex_E

    (13) progr-2008, покрутил на УПП 1.3, сразу — запускать только в обычном приложении! Потом — под одной печатной форме однозначно) Если нужен пакет — сделать на основании одной ВПФ не проблема, могу, конечно, написать инструкцию, но оно надо?

    Reply
  19. progr-2008

    (18) по одной форме — все получается, с УПП работаю только в обычном.

    А вот пакет — очень хорошо бы инструкцию, для УПП надо.

    Reply
  20. Alex_E

    (19) progr-2008, если только позже — сейчас на части рвут — полугодие………

    Reply
  21. hitchkock

    Есть проблема с сохранением печатной формы, когда конфа серверная. Компилируется и создается начальное представление на сервере, а конечное сохранение происходит на клиенте, а это разные пути, соответственно файла не видит. Я побыстрому выпутался так:

    1. Создал реквизит формы произвольного типа — ДвоичныеДанныеОбработки;

    2. поправил код команды «КомандаСохранить»:

    //Не работает когда серверная
    //ДвоичныеДанныеОбработки = Новый ДвоичныеДанные(Объект.ИмяГотовогоФайла);
    //ФайлОбработки = Новый Файл(Объект.ИмяГотовогоФайла);
    ПолучитьДвоичныеДанные();
    ФайлОбработкиСуществует = СуществованиеФайлаОбработки();
    
    //Если ФайлОбработки.Существует() тогда
    Если ФайлОбработкиСуществует тогда
    

    Показать

    3. создал соответственно серверную процедуру и функцию:

    &НаСервере
    Процедура ПолучитьДвоичныеДанные()
    ДвоичныеДанныеОбработки = Новый ДвоичныеДанные(Объект.ИмяГотовогоФайла);
    КонецПроцедуры
    
    &НаСервере
    Функция СуществованиеФайлаОбработки()
    ФайлОбработки = Новый Файл(Объект.ИмяГотовогоФайла);
    Возврат ФайлОбработки.Существует();
    КонецФункции
    

    Показать

    Reply
  22. Alex_E

    (21) hitchkock, Спасибо, включу, как будет время…

    Reply
  23. BigB

    (0), на мой взгляд — отличная дыра в безопасности.

    Я с помощью Вашей обработки легко получу доступ к серваку где будет находится база.

    Не спрашивайте: -Как?

    Догадайтесь сами.

    Reply
  24. Alex_E

    (23) BigB, Дыр в безопасности существует много, но есть поговорка — нато и щука в пруду, что бы карась не зевал)))

    ЗЫ Обработка вообще то не моя, см. анонс, и существует здесь уже довольно таки длительное время… Но, если вы имеете доступ к базе, то зачем Вам получать его ещё?

    Reply
  25. Alex_E

    (23) BigB, Так что там про дыры? 🙂

    Reply
  26. l-Rain

    Спасибо, в БП 3.0 работает замечательно!

    Reply
  27. Alex_E

    (26) l-Rain, Пожалуйста!!!

    Reply
  28. Светлый ум

    Выдается ошибка пробовал на 2х конфигурациях платформа 8.3.8.2027:

    Возможно, обработка (отчет) устарела или не является дополнительной:Метод объекта не обнаружен (СведенияОВнешнейОбработке)

    ——————-

    Нашел решение, необходимо добавить функции в модуль объекта обработки — как сказано в статье:

    (Для того чтобы добавить дополнительную обработку или отчет в тонкий клиент нужно в модули отчета или обработки прописать одну процедуру и две функции.)

    http://infostart.ru/public/305037/

    Reply
  29. Alex_E

    (28) Светлый ум, А можно поподробнее о каких конфигурациях идёт речь? И хотя бы текст ошибки — просто пробую на БП 3.0 УТ 11 .2 ЗУП 3.0 — всё на УФ — ошибок нет, ежели есть — хочу увидеть и исправить…правда…

    Reply
  30. Светлый ум

    (29)

    — Розница 2.1

    — Управление складом 4.0 (Акселот)

    Reply
  31. Светлый ум

    Текст ошибки я уже приводил:

    «Возможно, обработка (отчет) устарела или не является дополнительной:Метод объекта не обнаружен (СведенияОВнешнейОбработке)»

    — только этот текст, видимо дело в БСП (судя по комментам в http://infostart.ru/public/305037/ )

    Reply
  32. Alex_E

    (31) Светлый ум, Да блин — тест ошибки можно показать?

    Reply
  33. Alex_E

    (31) Светлый ум, Вот ничё не делая для Розница 2.2.4.22 ВПФ Заказ поставщику…. Усё работает, ещё раз — напишите полный текст ошибки и конфигурацию.

    Reply
  34. Alex_E

    (31) Светлый ум,

    Возможно, обработка (отчет) устарела или не является дополнительной:Метод о

    — это реально из БСП, но, опять же — нужна конфигурация и полный текст ошибки, и вообще полный фарш — ВПФ, с этой ошибкой

    Reply
  35. Светлый ум

    (34) значит такая петрушка только в отраслевках:

    — у меня докрученная Розница «Розница 8. Магазин бытовой техники и средств связи, редакция 2.1 (2.1.8.16)»,

    поэтому сильно не заморачивайтесь по поводу ошибки, кому надо тот из комментов возьмет — способ допила.

    (Плюс комменту 28 поставьте, чтобы в шапке публикации решение было)

    Reply
  36. Alex_E

    (35) Светлый ум, Как скажете (поставил)… Вообще этот конструктор не решает всех проблем — просто даёт заготовку для разработки с минимизацией времени на типовое решение))))

    Reply
  37. WeLap

    Почему может такая ошибка выдаваться при компиляции:{ВнешняяОбработка.КонструкторВнешнихПечатныхФорм.МодульОбъекта(78)}: Метод объекта не обнаружен (Run)

    WshShell.Run(СтрокаЗапуска, 0, Истина);

    Reply
  38. Alex_E

    (37) WeLap, Озвучьте пожалуйста конфигурацию и объект, где получили эту ошибку…

    Reply
  39. zxcvbnm,.

    (38)

    Здравствуйте!

    У меня не открывается файл. Конфигурация и ошибка во вложении.

    Reply
  40. Alex_E

    (39) Попробуйте на платформе постарше, у мня таких проблем не наблюдается, но ставить 8.3.6.* при наличии 8.3.9.* как то не хочется. Если очень нужно — пишите в личку — мог посмотреть через амми админ

    Reply
  41. zxcvbnm,.

    (40) Но в 8.3 (8.3.5.1146) работает, только она локальная версия. Может быть причина в том, что удаленный доступ?

    Reply
  42. Alex_E
    Может быть причина в том, что удаленный доступ?

    не могу сказать, нужно видеть, что происходит….

    Reply
  43. Cartman

    Вот такая ошибка, что в обычном, что в клиент-серверном режиме.

    Платформа 1С:Предприятие 8.3 (8.3.8.1933)

    {ВнешняяОбработка.КонструкторВнешнихПечатныхФорм.МодульОбъекта(1311,9)}: Процедура или функция с указанным именем не определена (РазобратьСтрокуRegEx)

    рез=<<?>>РазобратьСтрокуRegEx(НРег(ОбрабатываемаяПроцедураФункция.ТекстПроцедуры),»[().,;s=]»+имя+»[().,;s=]»);

    Reply
  44. Alex_E

    (43) Вы попробуйте пройти по обработке создани «по умолчанию», в смысле выделте только нужную печатную форму. Будет так же?

    Reply
  45. Cartman

    (44) Это при открытии. Забыл указать.

    Обычное приложение.

    Reply
  46. AlexO

    (2)

    Вот две ВПФ, которые я только что создал для обычного и управляемого приложения.

    Это для каких конф?

    Reply
  47. AlexO

    (0)»наметилась тенденция выносить процедуры и функции печати из модуля менеджера в общие модули»

    сейчас это уже и не тенденция вовсе, а «стандарт» — разные БСП в разных конфигурациях и разных внутренних версиях БП, ЗУП и УПП, все во внешних модулях, которые бесконечно вызывают друг друга, и постоянное изменение кода модулей (от правки кода до исправления описаний функций и комментариев).

    Так что если кто желает сделать пусть даже простенькую общую ВПФ для разных конфигураций (не говоря уже про универсальные обработки) — предстоит веселенькое занятие сбора, а потом и бесконечной актуализации по всем версиям.

    Молодец 1С, как обычно, сделала все правильно — теперь еще и зарубила на корню универсальные обработки.

    Reply
  48. Alex_E

    (46) БП 2.0 и БП 3.0

    Reply
  49. Alex_E

    (47) идите в SAP — тем всё универсально просто))))

    Reply
  50. AlexO

    (0)»Отладчиком смотри, где собака порылась, на вид всё фильдиперсово»

    Вы же не в блоге у себя, исправьте, что ли, такие высказывания ))

    Reply
  51. AlexO

    (48) а тот авансовый отчет, который выложили у SeiOkami — он тоже для БП3 был?

    Reply
  52. Alex_E

    (50) Вот прям всё прочитал, публикацию и комменты, но приведённой цитаты не нашёл))))) но это ничего, тем более поправить что-то можно только в течении получаса, так что терпите, сэр, или просто, коли не нравится, уйдите по английски))))

    ЗЫ если бы и нашёл, то исправлять бы не стал, ибо не вижу ничего криминального

    Reply
  53. Alex_E

    (51) не помню для чего и не помню, что выкладывал — наверное давно дело было

    Reply
  54. AlexO

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

    У вас форма как раз есть в примере, только не указано, насколько она будет важна в дальнейшем.

    Reply
  55. AlexO

    (52) это ближе к концу, абзацем ниже от

    «Внимание: После каждого изменения лучше сохранять ВПФ и проверять работоспособность, если менять всё подряд, потом может получится, что легче будет начать с начало, чем исправить то, что наменяли. Ещё совет, когда всё работает, и собираетесь что- то допилить, создайте новую версию ВПФ, и меняйте её – останется рабочий вариант, и текущий, с попыткой допила» 🙂

    Reply
  56. Alex_E

    (54) Форма для отладки создается всегда, в реальной работе (после подключения ВПФ) она не используется, нужна только для отладки. В принципе никому не мешает, но если дело принципа — можно удалить, на работоспобность ВПФ не повлияет

    Reply
  57. Alex_E

    (55) Вот новая редакция

    Отладчиком смотрим, где собака порылась. На вид всё фильдиперсово, однако видим вместо строки число.

    , в старой реально была ошибка. Этот вариант менять не буду — мне нравится так)))

    Reply
  58. Amur_MVS

    Спасибо, очень полезная обработка!

    Reply
  59. vshish

    Нормальная обработка, но не все работает если база серверная.

    1. Кнопка сохранить пытается сохранить на клиенте то, что сформировано на сервере и нет на клиенте.

    2. кнопка зарегистрировать тоже не работает( не разбирался почему.

    а так да очень удобно создать ВПФ и подправить ее под себя.

    Reply
  60. Alex6600

    Очень полезная штука.

    Reply
  61. kazzuss

    Алексей, спасибо большое!

    Только учусь делать ВПФ — с Вашей обработкой все получилось и многое стало понятно.

    Reply
  62. Alex_E

    (65) Пожалуйста.

    Reply
  63. vpaoli

    Если программист сделал за свою жизнь сам хотя бы одну внешнюю печатную форму, то сделать вторую не представляется трудным. И времени на это нужно немного.

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

    Reply
  64. Alex_E

    (67) Я где-то прописал обязательность использования этого констуктора?))))

    Reply
  65. vpaoli

    Ну а поговорить…))

    Reply
  66. Alex_E

    (69) Аааа, ну эт мы всегда пожалуйста)))

    Итак, ИМХО — по мне так он ценен как раз не тем, кто постоянно этим занимается (им не нужно, когда конвейер работает давно и ставбильно, он не требует пристального внимания наладчиков), а тому, кто делает ВПФ от случая к случаю, и загружать свой мозг информацией, как это делается нет никакой необходимости — есть инструмент, в который это заложено, им и пользуемся…

    А то, ить, все знают как копать ямы, но можно копать руками, а можно экскаватором, в разных ситуациях использование каждого из этих способов может быть вполне себе оправдано, но по мне так, в любом случае, лопату нужно иметь…

    Reply
  67. vpaoli

    Для того , чтобы копать экскаватором , нужно сначала на курсы экскаваторщиков устроиться. Поучиться недельку другую. Спасибо за ваш инструмент. Как только придется сделать ВПФ, сразу о нем вспомню!

    Reply
  68. Alex_E

    (71) а для того чтобы делать ВПФ ничё не нужно?…вот прям так взять любого гуманоида с улицы, и он раз и наваяет любую ВПФ?

    Reply
  69. vpaoli

    Гуманоидов, инопланетян и др. не рассматриваем. Берем обычного отечественного 1С программиста. Вот что действительно ему нужно, так это принципы, приемы построения (кодирования) ВПФ. Из учебников 1С, ИТС и др. Иначе он не программист , а студент-гуманоид. А инструменты — это дело наживное, хочу использую, хочу нет. Но не подумайте, что я спорю. Безусловно , инструменты всякие нужны, инструменты всякие важны!

    Reply
  70. Alex_E

    (73) я вообще к Вашему

    чтобы копать экскаватором , нужно сначала на курсы экскаваторщиков устроиться.

    , но не суть…

    Reply
  71. vshish

    Уже писал в (63), что при серверном варианте базы обработка не работает.

    Компилируется на сервере, а сохраняется на клиенте. и файл не передается.

    исправить можно заменой процедуры Команда сохранить на исправленный вариант

    Алексей. Если не сложно исправь и опубликуй.

    &НаСервереБезКонтекста
    Функция ПолучитьДвоичныеДанныеФайла(ИмяГотовогоФайла, Отказ)
    
    ФайлОбработки = Новый Файл(ИмяГотовогоФайла);
    
    Если ФайлОбработки.Существует() тогда
    Возврат Новый ДвоичныеДанные(ИмяГотовогоФайла);
    Иначе
    Отказ = Истина;
    Возврат Неопределено;
    КонецЕсли;
    
    КонецФункции // ПолучитьДвоичныеДанныеФайла()
    
    
    &НаКлиенте
    Процедура КомандаСохранить(Команда)
    
    Если НЕ Объект.сФайлВродеБыГотов тогда
    ПоказатьПредупреждение(,»Скомпилируйте файл ВПФ!»);
    Возврат;
    КонецЕсли;
    
    Отказ = Ложь;
    ДвоичныеДанныеОбработки = ПолучитьДвоичныеДанныеФайла(Объект.ИмяГотовогоФайла, Отказ);
    
    Если не Отказ тогда
    ДиалогФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
    ДиалогФайла.Фильтр = «*.epf»;
    ДиалогФайла.Расширение = «epf»;
    ДиалогФайла.ПолноеИмяФайла = Объект.ИмяНовойОбработки;
    Если ДиалогФайла.Выбрать() Тогда
    ИмяФайла = ДиалогФайла.ПолноеИмяФайла;
    ДвоичныеДанныеОбработки.Записать(ИмяФайла);
    ГотовыйФайлик = Новый Файл(ИмяФайла);
    
    Счетчик = 0;
    Пока НЕ ГотовыйФайлик.Существует() И Счетчик < 999 цикл
    Счетчик = Счетчик + 1;
    КонецЦикла;
    
    сФайлСохранен = Истина;
    
    Если ГотовыйФайлик.Существует() тогда
    Объект.ПолныйПутьВПФ = ГотовыйФайлик.ПолноеИмя;
    Режим = РежимДиалогаВопрос.ДаНет;
    Оповещение = Новый ОписаниеОповещения(«ПослеЗакрытияОткрытияВПФ», ЭтаФорма, Параметры);
    ПоказатьВопрос(Оповещение, «Файл внешней печатной формы сохранен. Открыть его для проверки?», Режим, 0);
    Иначе
    ПоказатьПредупреждение(,»Чего-то не так =(«);
    КонецЕсли;
    
    КонецЕсли;
    КонецЕсли;
    
    КонецПроцедуры
    

    Показать

    Reply
  72. Alex_E

    (77) Спасибо. Сделаю.

    Reply
  73. vshish

    (77) и зарегистрировать в полученном шаблоне тоже не работает в серверном варианте. Но ее я не стал править

    Reply
  74. Alex_E

    (79) я пока выложу Ваше исправление, а с регистрацией срозхданной ВПФ на сервере потом — нет времени развернуть сервер, когда сделаю — сделаю и это, а так потестить не на чем….

    Reply
  75. Alex_E

    Выложил новую версию, с исправлением от vshish. Ещё раз спасибо!

    Reply
  76. Dmitri93

    (81) Привет! Скачал версию 4.7, она в модуле объекта почему-то не до конца пишет слово «КонецПроцедуры» в процедуре печать. Естественно потом не открывается) после исправления в конфигураторе открывается нормально.

    Reply
  77. Alex_E

    Видел такое у кого-то из клиентов, когда на его компе делал ВПФ, потом стал исправлять на своём — не проявилось… В принципе дописать КонецПроцедуры не проблема, но…порядок быть должЁн — пишите в личку — посмотрим серез АА на Вашем компе — может удастся словить причину…

    Reply
  78. VovkaPutin

    (83)где код, в котором это прописывается (конецпроцедуры)? У нас тоже не дописывается, Зарплата и управление персоналом, редакция 3.1 (3.1.6.37)

    Reply
  79. Alex_E

    (84) Уже отвечал в (83) — Вам такое же предложение…

    Reply
  80. VovkaPutin

    (85), решение ниже

    Reply
  81. VovkaPutin

    (85), Исправил так, работает (в скриншоте). Так же ошибка после кнопки Сохранить — Открыть. Скриншот также прилагается

    Reply
  82. Alex_E

    (87) Спасибо — посмотрю.

    Reply
  83. VovkaPutin

    (88), также добавил код в модуль объекта, чтобы обработка регистрировалась во внешних отчетах,обработках в Зуп 3.1:

    код
    Reply
  84. Alex_E

    (89) Вот это, ИМХО, лишнее… Обработка запускается в разных базах, используется редко, потому регистрация ни к чему…если конечно не стоит задача постоянно ваять ВПФ для конкретной базы))))

    Reply
  85. VovkaPutin

    (90), при внедрении УФ не помешает)

    Reply
  86. Alex_E

    (91) Кто ж против?

    Reply
  87. VovkaPutin

    (92), по ошибке модальных окон есть идеи?

    Reply
  88. Alex_E

    (93) Сейчас исправлю, выложу. Дайте почту в личку — пришлю новый вариант для теста

    Reply
  89. Alex_E

    Выложил новую версию 4.8 с исправление от VovkaPutin (ещё раз спасибо), плюс убрал из текста модуля ВПФ все строки с #Если… #КонецЕсли #Область … #КонецОбласти итд. Плюс убрал модальность при открытии ВПФ из конструктора, в последних версиях конфигураций на УФ от неё совсем отказались, потому падало с ошибкой…

    Reply
  90. alexvi33

    Сделал ВПФ М11 для документа Требование-накладная БП 3. БЫСТРО И ПРОСТО. Проверил — РАБОТАЕТ.

    Инструкция подробная.

    Reply
  91. alexvi33

    СПАСИБО

    Reply
  92. Alex_E

    (97) Пожалуйста.

    Reply
  93. Kaspirovsky

    Хорошая обработка! Может для новичков что то будет и «сложновато»(если будут какие то запинки), НО реально экономит время 🙂

    Reply
  94. VKuser15680667

    Создал ВПФ «Накладная на перемещение» для ERP, чтоб в нем автоматически проставлялся «ответственный», прописал , запустил через «открыть» (отладка) всё прекрасно сработало, регистрирую обработку в ERP и она перестает работать с ошибкой » Значение не является значение объектного типа Ответственный»….0_0

    Reply
  95. Alex_E

    (100) К сожалению я не вижу этой ошибки и смоделировать её не могу, могу посмотреть через АА, если хотите — пишите в личку…

    Reply
  96. VovkaPutin

    (100), отладкой пользоваться умеете?

    Reply
  97. Helsin_G

    Добрый день создал ВПФ «ПриложениеКДоговору» в БП 3.0 (3.0.64.48) 1С:Предприятие 8.3 (8.3.12.1529)

    При открытии печатной формы выходит ошибка —

    {ОбщийМодуль.УправлениеПечатьюБП.Модуль(911)}: Значение не является значением объектного типа (Свойство)

    Если НЕ ПараметрыПечати.Свойство(«ИсключаемыеТипыДокументов») Тогда

    Reply
  98. Alex_E

    (103) Ошибка в общем модуле, надо смотреть откуда вызов…могу глянуть через АА, пишите в личку.

    Reply
  99. FilatovRA

    Спасибо огромное за ваш труд!

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *