В процессе ведения бизнеса компании часто сталкиваются с необходимостью жесткого разделения финансовых потоков. У организации может быть открыто несколько расчетных счетов в разных банках. Из-за требований валютного контроля, специфики тарифов или жестких алгоритмов комплаенса по 115-ФЗ (система «знай своего клиента» / банковский светофор) некоторые банки крайне неохотно проводят платежи в адрес определенных контрагентов. В таких случаях бизнесу приходится строго разграничивать: какому поставщику с какого нашего счета должны уходить деньги.
Если платежами занимается один опытный главный бухгалтер, она может держать эти правила в голове. Но при её уходе в отпуск или передаче обязанностей рядовому бухгалтеру риск человеческой ошибки резко возрастает. Ошибка в выборе счета может привести к блокировке платежа, запросу кучи документов со стороны банка или даже к временной приостановке дистанционного банковского обслуживания (ДБО).
В этой статье мы подробно разберем, как решить проблему автоматической привязки конкретного расчетного счета нашей организации к определенным поставщикам в программе «1С:Бухгалтерия 3.0» (БП 3.0), проанализируем штатные возможности системы, рассмотрим организационные лайфхаки и покажем правильный технический путь автоматизации без снятия конфигурации с поддержки.
---
Для начала проанализируем, как устроена логика работы с банковскими счетами в типовом решении «1С:Бухгалтерия 3.0».
В карточке нашей организации (раздел Главное — Организации) мы можем создать сколько угодно банковских счетов. Однако система позволяет выбрать только один счет в качестве «Основного» (с помощью кнопки «Использовать как основной»). Именно этот счет программа будет по умолчанию подставлять во все вновь создаваемые документы «Платежное поручение» или «Списание с расчетного счета».
Что касается контрагентов, то в их карточках мы также можем задавать их банковские счета и выбирать один основной для подстановки в качестве получателя платежа. Но связать конкретного контрагента с конкретным нашим расчетным счетом в БП 3.0 стандартными средствами невозможно.
Важное примечание: некоторые начинающие пользователи путают расчетные счета с регистром Счета расчетов с контрагентами. Этот регистр предназначен исключительно для бухгалтерского учета (например, автоматической подстановки счетов 60.01, 60.02, 76.05 в документы) и никак не связан с банковскими расчетными счетами организации.
---
Если мы обратимся к архитектуре комплексных решений, таких как «1С:Комплексная автоматизация 2» (КА), «1С:ERP Управление предприятием» или «1С:Управление холдингом» (УХ), то увидим, что там эта потребность полностью закрыта на уровне типового функционала.
В этих программах расчетные счета нашей организации привязываются непосредственно к Договору контрагента. В карточке договора присутствует реквизит Банковский счет организации. При создании платежных документов по конкретному договору система автоматически считывает этот реквизит и подставляет нужный банк вместо общего основного счета компании.
В «1С:Бухгалтерия 3.0» такого реквизита в договорах, увы, нет. Но мы можем реализовать аналогичное поведение самостоятельно.
---
Если у вас нет штатного программиста или вы категорически не хотите вносить изменения в программу, можно применить проверенные практические лайфхаки, которые используют опытные бухгалтеры.
---
Главная проблема классического изменения («допила») конфигурации «1С:Бухгалтерия» заключается в том, что БП обновляется очень часто (иногда несколько раз в месяц в период сдачи отчетности). Постоянное ручное обновление нетиповой конфигурации требует времени и несет риски затереть измененный код.
Чтобы избежать этих проблем, мы применим современный механизм платформы — Расширение конфигурации. Расширение позволяет добавлять новые реквизиты и логику, не снимая основную конфигурацию с замка поддержки. Программа продолжит обновляться в автоматическом режиме.
Разберем по шагам, как реализовать автоматическую подстановку счета через расширение:
В нашем расширении мы заимствуем справочник ДоговорыКонтрагентов и добавляем в него новый реквизит. Назовем его, например, НашБанковскийСчет с типом ссылки на справочник БанковскиеСчетаОрганизаций. Этот реквизит мы выносим на форму элемента договора, чтобы бухгалтер мог вручную один раз указать привязку к нашему конкретному счету.
Далее нам необходимо переопределить логику изменения договора в документе «Платежное поручение». Заимствуем в расширение форму документа ФормаДокумента платежного поручения и процедуру, отвечающую за выбор договора.
Рассмотрим пример кода, который выполняет заполнение нашего счета при выборе договора контрагента:
&НаКлиенте
Процедура Расш1_ДоговорКонтрагентаПриИзмененииПосле(Элемент)
// Вызываем серверную процедуру для получения счета и перезаполнения реквизитов формы
Расш1_ЗаполнитьСчетОрганизацииПоДоговоруНаСервере();
КонецПроцедуры
&НаСервере
Процедура Расш1_ЗаполнитьСчетОрганизацииПоДоговоруНаСервере()
ДоговорСсылка = Объект.ДоговорКонтрагента;
Если ЗначениеЗаполнено(ДоговорСсылка) Тогда
// Считываем значение нашего нового реквизита из договора
НашЦелевойСчет = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДоговорСсылка, "НашБанковскийСчет");
// Если реквизит заполнен в договоре, подставляем его в документ
Если ЗначениеЗаполнено(НашЦелевойСчет) Тогда
Объект.СчетОрганизации = НашЦелевойСчет;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Этот простой механизм гарантирует: как только бухгалтер выберет в платежке договор, поле Счет организации мгновенно перезаполнится нужным счетом, даже если по умолчанию в настройках программы установлен совершенно другой основной счет.
---
Что делать, если бухгалтер создает платежное поручение не вручную, а, например, загружает проекты платежей из внешних систем, или если нужно жестко заблокировать проведение документа с ошибочным счетом? Для этого отлично подойдет механизм Подписки на события.
Мы можем создать подписку на событие ПередЗаписью или ОбработкаПроверкиЗаполнения для документа ПлатежноеПоручение.
Проанализируем пример серверного кода, выполняющего валидацию счета перед сохранением документа:
Процедура Расш1_ПроверитьСчетОрганизацииПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
// Если идет загрузка данных (например, обмен), проверку пропускаем
Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(Источник.ДоговорКонтрагента) Тогда
// Получаем привязанный к договору счет организации
НашЦелевойСчет = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Источник.ДоговорКонтрагента, "НашБанковскийСчет");
// Проверяем, настроено ли соответствие и совпадает ли выбранный счет с целевым
Если ЗначениеЗаполнено(НашЦелевойСчет) И Источник.СчетОрганизации <> НашЦелевойСчет Тогда
// Вариант А: Мягкое предупреждение пользователя
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
НСтр("ru = 'Внимание! Для договора """ + Строка(Источник.ДоговорКонтрагента) + """ установлен обязательный расчетный счет: " + Строка(НашЦелевойСчет) + ". Пожалуйста, проверьте реквизиты!'"),
Источник,
"СчетОрганизации"
);
// Вариант Б: Жесткий запрет проведения платежки (раскомментировать при необходимости)
// Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Благодаря этому коду программа автоматически проверит корректность выбранного банковского счета. В случае несовпадения она выведет понятное сообщение об ошибке, подсветит поле СчетОрганизации красным цветом и (при жесткой настройке) не позволит провести платеж с неверного счета.
---
Выбор оптимального метода зависит от масштабов вашей компании и регулярности подобных платежей: