При работе с конфигурацией 1С:Бухгалтерия 3.0, особенно при взаимодействии с банковскими платежами, пользователи часто сталкиваются с необходимостью изменить стандартные свойства объектов. Один из таких запросов – это увеличение длины строкового реквизита, например, НазначениеПлатежа в документе ПлатежноеПоручение, которое по умолчанию ограничено 210 символами. Давайте рассмотрим, как можно попытаться решить эту задачу технически, и что говорят нормативные документы по этому поводу.
Предположим, перед нами стоит задача увеличить длину реквизита НазначениеПлатежа с 210 символов до, скажем, 500 символов, при этом не снимая конфигурацию с поддержки. Это позволит бухгалтерам вводить более подробную информацию о платеже. Однако, как мы убедимся, техническая возможность не всегда означает практическую целесообразность.
Первая попытка изменить длину реквизита через расширение может привести к ошибке, как это было описано в сообщении: "Обнаружены проблемы при применении расширения конфигуратора. Документ ПлатежноеПоручение.Реквизит НазначениеПлатежа Значение контролируемого свойства Тип у объекта Документ.ПлатежноеПоручение.Реквизит.НазначениеПлатежа не совпадает со значением в расширяемой конфигурации. Исправить...". Эта ошибка возникает, потому что в более старых версиях платформы 1С:Предприятие (до 8.3.18) расширения не позволяли напрямую изменять свойства примитивных типов заимствованных реквизитов, так как это затрагивает структуру базы данных.
Чтобы обойти это ограничение и сохранить конфигурацию на поддержке, мы можем применить следующий подход, основанный на добавлении нового реквизита в расширение и замене им стандартного:
ПлатежноеПоручение. Заимствуйте этот документ в ваше расширение. Затем заимствуйте его форму (обычно это ФормаДокумента) также в расширение.В расширении, в заимствованном документе ПлатежноеПоручение, добавьте новый реквизит. Назовем его, например, НазначениеПлатежаРасш. Укажите для него тип "Строка" и задайте желаемую длину, например, 500 или даже неограниченную, если это необходимо только для внутренних целей и не будет передаваться в банк. Для примера мы используем 500.
НазначениеПлатежаРасшОткройте заимствованную форму документа ПлатежноеПоручение в расширении.
НазначениеПлатежа. Скройте его или сделайте недоступным для редактирования (свойство "Видимость" или "Доступность").НазначениеПлатежаРасш из списка реквизитов документа. Расположите его на месте скрытого стандартного поля.Этот шаг является ключевым, так как простого добавления нового реквизита недостаточно. Необходимо, чтобы данные из нового реквизита попадали в нужные места системы и, что более важно, чтобы стандартные механизмы, использующие НазначениеПлатежа, работали с вашим новым расширенным полем. Для этого нам придется немного "поколдовать", как было предложено в сообщении на форуме.
Вам потребуется заместить стандартные обработчики или модули, которые работают с реквизитом НазначениеПлатежа.
ПлатежноеПоручение, или в модуле объекта, мы можем добавить обработчики событий (например, ПередЗаписьюНаСервере или ПриЗаписи) для того, чтобы скопировать данные из нашего расширенного реквизита в стандартный. Если стандартный реквизит все еще нужен для выгрузки, но мы не хотим, чтобы пользователи его редактировали, то такой подход подойдет.
// Пример кода в модуле объекта документа ПлатежноеПоручение (в расширении)
// или в модуле формы ПередЗаписьюНаСервере
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ПараметрыЗаписи)
// Копируем значение из расширенного реквизита в стандартный перед записью
Если ЗначениеЗаполнено(ЭтотОбъект.НазначениеПлатежаРасш) Тогда
ЭтотОбъект.НазначениеПлатежа = СокрЛП(ЭтотОбъект.НазначениеПлатежаРасш);
// Ограничиваем длину до 210 символов для стандартного поля
Если СтрДлина(ЭтотОбъект.НазначениеПлатежа) > 210 Тогда
ЭтотОбъект.НазначениеПлатежа = Лев(ЭтотОбъект.НазначениеПлатежа, 210);
КонецЕсли;
Иначе
ЭтотОбъект.НазначениеПлатежа = "";
КонецЕсли;
КонецПроцедуры
НазначениеПлатежа, вам нужно будет найти соответствующие процедуры или функции в модулях, отвечающих за выгрузку платежных поручений (например, в обработке "Клиент-банк") и заместить их в расширении. В замещенной процедуре вы будете использовать ваш новый реквизит НазначениеПлатежаРасш, а затем, если требуется передать его в стандартное поле для дальнейшей обработки, усекать его до 210 символов, как того требуют банковские правила.
// Пример кода в замещенной процедуре выгрузки (в расширении)
// Допустим, это функция, которая формирует строку для поля "Назначение платежа"
&НаСервере
Функция ПолучитьНазначениеПлатежаДляВыгрузки(ДокументСсылка)
// Получаем расширенный реквизит
ЗначениеНазначения = ДокументСсылка.НазначениеПлатежаРасш;
// Проверяем и усекаем до 210 символов в соответствии с требованиями банка
Если СтрДлина(ЗначениеНазначения) > 210 Тогда
Возврат Лев(ЗначениеНазначения, 210);
Иначе
Возврат ЗначениеНазначения;
КонецЕсли;
КонецФункции
Важно: При этом подходе, несмотря на то что пользователи могут вводить до 500 символов, в выгрузку в банк все равно попадут только первые 210 символов.
С выходом платформы 1С:Предприятие 8.3.18, появилась значительно упрощенная возможность изменения свойств примитивных типов реквизитов из основной конфигурации с помощью расширений. Это означает, что если ваша версия платформы 8.3.18 или новее, вы можете сделать это гораздо проще и без создания нового реквизита.
Откройте стандартную конфигурацию, найдите документ ПлатежноеПоручение. В ветке "Реквизиты" найдите реквизит НазначениеПлатежа. Вызовите контекстное меню (правая кнопка мыши) и выберите пункт "Заимствовать в расширение".
После заимствования, этот реквизит появится в вашем расширении. Теперь, в свойствах заимствованного реквизита НазначениеПлатежа в расширении, вы можете изменить его длину на желаемое значение (например, 500). Платформа 1С сама позаботится о расширении соответствующего поля в базе данных при первом запуске системы после внесения изменений.
Важно: При этом способе вы напрямую меняете свойства стандартного реквизита. Все стандартные механизмы будут работать с измененной длиной.
Это решение гораздо элегантнее и проще в реализации, поскольку не требует дополнительной логики синхронизации или модификации форм. Однако, как мы сейчас увидим, техническая простота не отменяет нормативных требований.
Несмотря на техническую возможность увеличить длину реквизита НазначениеПлатежа, это является крайне нерекомендуемой практикой. Платежные поручения – это стандартизированный документ, и каждый его реквизит имеет четко регламентированную длину и формат.
Согласно Положению Банка России № 762-П от 29.06.2021 "О правилах осуществления перевода денежных средств", которое является действующим документом (и заменило ранее упоминавшееся Положение № 383-П), максимальное количество символов для реквизита 24 "Назначение платежа" в платежном поручении, составляемом в электронном виде, составляет 210 символов.
Это требование является обязательным для всех банковских систем и участников расчетов. Банки настроены принимать платежи, соответствующие этому стандарту. Превышение этого лимита приведет к серьезным проблемам.
Поле "Назначение платежа" должно содержать исчерпывающую, но лаконичную информацию о сути платежа, включая наименование товаров (работ, услуг), номера и даты договоров, номера и даты первичных учетных документов (счетов-фактур, накладных и т.д.). Важно учиться формулировать эту информацию максимально кратко и емко. Для автоматического создания платежек с корректными ссылками на первичные документы можно использовать обработку для формирования платежных поручений по поступлениям товаров.
Если вы или ваши бухгалтеры попытаются отправить в банк платежное поручение, где поле "Назначение платежа" будет длиннее 210 символов, это может привести к следующим проблемам:
Подводя итог, мы можем констатировать следующее:
НазначениеПлатежа в 1С:Бухгалтерии 3.0 возможно:
НазначениеПлатежа в расширение и изменить его длину в свойствах. Это будет работать, и платформа сама позаботится об изменении структуры базы данных.НазначениеПлатежа нецелесообразно и опасно:
Независимо от технических возможностей 1С, нормативные документы Банка России четко устанавливают максимальную длину в 210 символов для этого поля. Превышение этого лимита неизбежно приведет к проблемам с проведением платежей, их отклонению банками, задержкам и другим негативным последствиям.
Наши рекомендации:
Мы настоятельно рекомендуем не увеличивать длину реквизита НазначениеПлатежа выше установленных 210 символов. Вместо этого, работайте с вашими бухгалтерами над тем, чтобы они формулировали назначение платежа максимально лаконично и информативно, используя ссылки на номера и даты договоров и первичных документов. Если информация слишком обширна, возможно, стоит рассмотреть внутренние поля или примечания для хранения дополнительной детализации, которая не предназначена для передачи в банк.
Информируйте пользователей о требованиях Банка России, чтобы они понимали, почему существуют такие ограничения и почему важно их соблюдать. Это позволит избежать многих проблем в будущем.