В процессе разработки в крупных компаниях программисты часто сталкиваются с ситуацией, когда прямое редактирование конфигурации невозможно из-за использования Хранилища конфигурации или строгих политик безопасности. Рассмотрим типичную задачу: необходимо изменить текст в печатной форме «Счет на оплату», добавив в поле «Назначение платежа» информацию о договоре, при этом не имея возможности захватить объекты в хранилище. Разберем несколько эффективных способов решения этой задачи, от использования расширений до внешних обработок.
Использование расширений — это современный и наиболее предпочтительный способ изменения логики типовых конфигураций (ERP, УТ 11, КА 2). Он позволяет вносить изменения, не снимая основную конфигурацию с поддержки и не требуя монопольного доступа к хранилищу.
Проанализируем ситуацию: нам нужно изменить одну конкретную переменную в процедуре печати. Для этого не нужно переписывать всю обработку печати. Достаточно использовать механизм перехвата функций.
Рассмотрим пошагово, как это реализовать:
СчетНаОплатуПокупателю (в некоторых версиях это может быть ЗаказКлиента, если счет печатается из него).СформироватьСтруктуруПараметровПечати или находится внутри основной процедуры Печать.&После (After), чтобы наша логика сработала сразу после выполнения типового кода.Пример кода в расширении для изменения назначения платежа:
&После("ЗаполнитьПараметрыНазначенияПлатежа")
Процедура Расш1_ЗаполнитьПараметрыНазначенияПлатежа(ПараметрыПечати, ДанныеДокумента)
// Добавляем информацию о договоре в уже сформированную строку
ДоговорСсылка = ДанныеДокумента.Договор;
Если ЗначениеЗаполнено(ДоговорСсылка) Тогда
ПараметрыПечати.НазначениеПлатежа = ПараметрыПечати.НазначениеПлатежа + " по договору № " + ДоговорСсылка.Номер + " от " + Формат(ДоговорСсылка.Дата, "ДЛФ=D");
КонецЕсли;
КонецПроцедуры
Преимущество этого метода в том, что при обновлении типовой конфигурации ваш код останется рабочим, так как он лишь дополняет существующую структуру данных.
Если политика компании запрещает использование расширений (например, из-за требований к стабильности или безопасности), отличным выходом станет создание Внешней печатной формы. Этот объект хранится в справочнике «Дополнительные отчеты и обработки» и никак не затрагивает код конфигурации.
Разберем процесс создания такой формы:
СведенияОВнешнейОбработке(). Это необходимо для того, чтобы БСП (Библиотека стандартных подсистем) смогла зарегистрировать вашу форму.НазначениеПлатежа.Пример функции регистрации внешней обработки:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
ПараметрыРегистрации.Назначение.Добавить("Документ.СчетНаОплатуПокупателю");
ПараметрыРегистрации.Наименование = "Счет на оплату (с договором)";
ПараметрыРегистрации.Команды.Добавить("СчетСДоговором", "Счет на оплату (с договором)", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
Возврат ПараметрыРегистрации;
КонецФункции
После регистрации в режиме «1С:Предприятие» у пользователей появится дополнительный пункт в меню «Печать».
Выясним, можно ли обойтись без программирования вообще. В современных версиях 1С есть мощный инструмент — «Макеты печатных форм».
Рассмотрим алгоритм действий:
Важное ограничение: если в макете нет параметра «Договор», просто вписать его в треугольных скобках <Договор> может быть недостаточно. Если программный код документа не передает данные договора в макет, ячейка останется пустой. Однако, если договор уже присутствует в структуре данных печати, этот способ будет самым быстрым и безопасным.
В конфигурациях 1С:ERP и 1С:Управление торговлей 11 текст назначения платежа часто формируется на основе настроек в справочнике «Организации» или «Банковские счета».
Проанализируем этот функционал:
[НомерДокумента], [ДатаДокумента]. В некоторых релизах поддерживается и [Договор].Если ваш случай подходит под стандартный шаблон, это избавит вас от необходимости писать код и создавать расширения.
Если вы стажер и вам нужно «потренироваться» на копии базы, но конфигуратор требует подключение к хранилищу, выполните следующие действия:
Помните: изменения, внесенные в копию после отключения от хранилища, не попадут в основную базу автоматически. Вам придется переносить их (например, через файлы расширений .cfe или внешние обработки .epf).
Для решения задачи по изменению печатной формы в условиях ограниченного доступа лучше всего подходит Расширение конфигурации с использованием аннотации &После. Это минимизирует риски при обновлениях и позволяет быстро внедрить изменения. Если же расширения запрещены — используйте Внешнюю печатную форму. Оба метода позволяют добавить вывод договора в «Назначение платежа», не затрагивая стабильность основной конфигурации.