При работе с платежными поручениями в 1С:ERP Управление предприятием 2 пользователи часто сталкиваются с неудобством: если изменить сумму документа, текст в поле «Назначение платежа» не обновляется автоматически. Для актуализации данных приходится нажимать кнопку «Заполнить», но это действие полностью затирает любые изменения, внесенные в строку вручную. Разберем подробно, почему так происходит, как работает стандартный механизм и какими способами можно автоматизировать этот процесс.
В современных конфигурациях на базе платформы «1С:Предприятие 8.3» (ERP, КА, УТ) логика формирования назначения платежа завязана на строгом контроле целостности данных. Выясним причину, по которой система ведет себя именно так. В документе ПлатежноеПоручение существует скрытый или явный признак «Редактировать назначение платежа вручную» (часто отображается в виде иконки карандаша). Как только вы вносите любое изменение в текст назначения, этот флаг устанавливается в истину.
Проанализируем алгоритм работы программы:
В отличие от старой версии УПП 1.3, где механизм был проще и зачастую просто стирал всё до шаблона, в ERP реализована более сложная объектная модель. Здесь назначение платежа часто формируется на основании связанных документов (заказов, накладных), и простая замена одного числа на другое в строке может быть технически неоднозначной, если чисел в назначении несколько (например, номер счета и сумма).
Прежде чем переходить к программированию, рассмотрим наиболее эффективный сценарий работы в рамках типовой конфигурации без доработок. Чтобы избежать двойной работы, рекомендуем соблюдать следующую последовательность действий:
Помните, что в 1С:ERP назначение формируется программным шаблоном, который зашит в общие модули. Любая попытка изменить сумму после ручной корректировки текста потребует повторного нажатия кнопки «Заполнить» и, как следствие, повторного внесения ваших правок.
Если специфика бизнеса требует, чтобы сумма в назначении платежа менялась «на лету», даже если текст был изменен вручную, необходимо прибегнуть к разработке. Наиболее корректный путь — создание расширения, которое будет перехватывать событие изменения суммы на форме документа.
Разберем по шагам, как это реализовать. Нам нужно внедриться в процедуру СуммаДокументаПриИзменении на форме документа ПлатежноеПоручение. Проблема заключается в том, что нам не нужно перезаписывать всю строку, а нужно найти в текущем тексте старое значение суммы и заменить его на новое.
Посмотрим на пример кода, который можно использовать в расширении:
&НаКлиенте
Процедура Расш_СуммаДокументаПриИзмененииПосле(Элемент)
// Вызываем процедуру обновления назначения платежа
ОбновитьСуммуВНазначенииПлатежа(Объект.СуммаДокумента, Объект.ВалютаДокумента);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьСуммуВНазначенииПлатежа(НоваяСумма, Валюта)
ТекущееНазначение = Объект.НазначениеПлатежа;
// Логика поиска суммы в строке может быть сложной.
// Самый простой вариант — использовать функцию СтрЗаменить,
// если мы знаем предыдущее значение суммы.
// Но лучше использовать программное формирование строки через общий модуль.
// В ERP за это отвечает серверный вызов:
Объект.НазначениеПлатежа = СформироватьТекстНазначенияНаСервере(Объект);
КонецПроцедуры
Однако, как мы выяснили из обсуждения, просто вызывать типовое формирование — значит затереть ручные правки. Чтобы этого избежать, программисту необходимо реализовать алгоритм «умной замены» подстроки. Рассмотрим подробнее, как это реализовано в 1С:Бухгалтерии КОРП, где такой механизм присутствует в штатном режиме.
Проанализируем ситуацию: в строке назначения платежа обычно присутствует фрагмент вида «...Сумма 100-00...» или «...в т.ч. НДС (20%) 16-67...». Для реализации автоматического обновления без удаления авторского текста следует использовать регулярные выражения или функции поиска подстрок.
Алгоритм действий для разработчика:
НазначениеПлатежа подстроку, содержащую старую сумму.Для поиска и формирования текста в 1С:ERP 2 рекомендуется обращаться к функциям общего модуля ДенежныеСредстваКлиентСервер. В частности, процедура СформироватьНазначениеПлатежа является ключевой. Вы можете изучить её код, чтобы понять, какой формат строки ожидает система и банк.
Важно учитывать, что современные требования банков к назначению платежа становятся всё более строгими. При использовании прямого обмена 1С:ДиректБанк система проверяет соответствие назначения платежа формату, установленному конкретным банком. Критически важно, чтобы в строке корректно была указана ставка НДС и сумма налога.
Если вы автоматизируете изменение суммы, убедитесь, что ваш код правильно пересчитывает НДС. В 1С:ERP 2 это делается через вызов серверных функций, которые учитывают настройки налогообложения конкретной операции. Если пользователь вручную изменил сумму, но забыл исправить НДС в назначении, банк может отклонить платеж по причине несоответствия расчетных данных.
Если вы решили внедрить автоматическое обновление суммы через расширение, обратите внимание на следующие моменты:
ПриИзменении не только для суммы, но и для ставки НДС.Таким образом, хотя «из коробки» 1С:ERP 2 требует нажатия кнопки для обновления суммы в назначении (ценой потери ручных правок), это ограничение обходится созданием небольшого расширения. Это позволит бухгалтеру экономить время и избегать ошибок при ручном пересчете сумм в текстовых полях.