Как настроить автоматическое изменение суммы в назначении платежа в 1С:ERP 2

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет
← На главную

При работе с платежными поручениями в 1С:ERP Управление предприятием 2 пользователи часто сталкиваются с неудобством: если изменить сумму документа, текст в поле «Назначение платежа» не обновляется автоматически. Для актуализации данных приходится нажимать кнопку «Заполнить», но это действие полностью затирает любые изменения, внесенные в строку вручную. Разберем подробно, почему так происходит, как работает стандартный механизм и какими способами можно автоматизировать этот процесс.

Анализ стандартного механизма заполнения назначения платежа

В современных конфигурациях на базе платформы «1С:Предприятие 8.3» (ERP, КА, УТ) логика формирования назначения платежа завязана на строгом контроле целостности данных. Выясним причину, по которой система ведет себя именно так. В документе ПлатежноеПоручение существует скрытый или явный признак «Редактировать назначение платежа вручную» (часто отображается в виде иконки карандаша). Как только вы вносите любое изменение в текст назначения, этот флаг устанавливается в истину.

Проанализируем алгоритм работы программы:

  1. Если флаг ручного редактирования не установлен, система при изменении ключевых реквизитов (объект расчетов, договор, сумма, ставка НДС) может автоматически пересобрать строку целиком.
  2. Если флаг установлен, программа «считает», что пользователь ввел уникальный текст, который нельзя портить. Поэтому автоматическое обновление прекращается, чтобы не удалить важные дополнения, например: «Оплата по акции» или «Срочный платеж».

В отличие от старой версии УПП 1.3, где механизм был проще и зачастую просто стирал всё до шаблона, в ERP реализована более сложная объектная модель. Здесь назначение платежа часто формируется на основании связанных документов (заказов, накладных), и простая замена одного числа на другое в строке может быть технически неоднозначной, если чисел в назначении несколько (например, номер счета и сумма).

Способ 1: Использование типового функционала и «кнопки заполнения»

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

  1. Сначала заполните все финансовые реквизиты: Сумма, Ставка НДС, Объект расчетов.
  2. Только после окончательного утверждения суммы нажмите кнопку «Заполнить» (или иконку циклического обновления) рядом с назначением платежа.
  3. Если требуется добавить специфический текст, делайте это в самую последнюю очередь, после того как сумма в назначении уже сформирована системой.

Помните, что в 1С:ERP назначение формируется программным шаблоном, который зашит в общие модули. Любая попытка изменить сумму после ручной корректировки текста потребует повторного нажатия кнопки «Заполнить» и, как следствие, повторного внесения ваших правок.

Способ 2: Программная доработка через расширение конфигурации

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

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

Посмотрим на пример кода, который можно использовать в расширении:


&НаКлиенте
Процедура Расш_СуммаДокументаПриИзмененииПосле(Элемент)
    // Вызываем процедуру обновления назначения платежа
    ОбновитьСуммуВНазначенииПлатежа(Объект.СуммаДокумента, Объект.ВалютаДокумента);
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьСуммуВНазначенииПлатежа(НоваяСумма, Валюта)
    ТекущееНазначение = Объект.НазначениеПлатежа;
    // Логика поиска суммы в строке может быть сложной.
    // Самый простой вариант — использовать функцию СтрЗаменить, 
    // если мы знаем предыдущее значение суммы.
    // Но лучше использовать программное формирование строки через общий модуль.
    
    // В ERP за это отвечает серверный вызов:
    Объект.НазначениеПлатежа = СформироватьТекстНазначенияНаСервере(Объект);
КонецПроцедуры

Однако, как мы выяснили из обсуждения, просто вызывать типовое формирование — значит затереть ручные правки. Чтобы этого избежать, программисту необходимо реализовать алгоритм «умной замены» подстроки. Рассмотрим подробнее, как это реализовано в 1С:Бухгалтерии КОРП, где такой механизм присутствует в штатном режиме.

Реализация механизма «умной замены» (по опыту БП КОРП)

Проанализируем ситуацию: в строке назначения платежа обычно присутствует фрагмент вида «...Сумма 100-00...» или «...в т.ч. НДС (20%) 16-67...». Для реализации автоматического обновления без удаления авторского текста следует использовать регулярные выражения или функции поиска подстрок.

Алгоритм действий для разработчика:

  1. При открытии формы или при начале изменения суммы запомнить «старое» значение суммы.
  2. При изменении суммы найти в тексте НазначениеПлатежа подстроку, содержащую старую сумму.
  3. Заменить её на новую сумму, отформатированную согласно правилам банковских поручений (с разделителями и копейками через дефис).
  4. Аналогичную операцию провести для суммы НДС, если она выделяется в назначении.

Для поиска и формирования текста в 1С:ERP 2 рекомендуется обращаться к функциям общего модуля ДенежныеСредстваКлиентСервер. В частности, процедура СформироватьНазначениеПлатежа является ключевой. Вы можете изучить её код, чтобы понять, какой формат строки ожидает система и банк.

Влияние сервиса ДиректБанк и банковского контроля

Важно учитывать, что современные требования банков к назначению платежа становятся всё более строгими. При использовании прямого обмена 1С:ДиректБанк система проверяет соответствие назначения платежа формату, установленному конкретным банком. Критически важно, чтобы в строке корректно была указана ставка НДС и сумма налога.

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

Рекомендации для системных администраторов и программистов

Если вы решили внедрить автоматическое обновление суммы через расширение, обратите внимание на следующие моменты:

Таким образом, хотя «из коробки» 1С:ERP 2 требует нажатия кнопки для обновления суммы в назначении (ценой потери ручных правок), это ограничение обходится созданием небольшого расширения. Это позволит бухгалтеру экономить время и избегать ошибок при ручном пересчете сумм в текстовых полях.

← На главную