Почему при смене договора исчезает банковский счет в 1С:Бухгалтерия 8.3 и появляется ошибка «Реквизиты банковского счета не заполнены»

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

При работе с документами «Счет на оплату покупателю» в конфигурации «1С:Бухгалтерия предприятия 8» (редакция 3.0) пользователи могут столкнуться с нетипичным поведением: документ выгружен из внешнего источника (например, из «1С:Торговля и Склад 7.7»), счет расчетов в шапке визуально заполнен, но при попытке сменить договор контрагента реквизит БанковскийСчет мгновенно очищается. В результате провести документ становится невозможно из-за ошибки: «Реквизиты банковского счета не заполнены».

Рассмотрим подробнее причины возникновения этой неполадки, изучим работу внутренних механизмов 1С и разберем по шагам варианты ее устранения.

Анализ причины: почему программный код очищает банковский счет

Проанализируем ситуацию в отладчике. В форме документа Документ.СчетНаОплатуПокупателю при смене договора выгодоприобретателя запускается обработчик события ПриИзмененииДоговора. Внутри этого обработчика конфигурация производит поиск и подстановку основного банковского счета организации.

Поиск банковского счета выполняется алгоритмами типовой конфигурации по следующим условиям:

  1. Банковский счет должен принадлежать именно той организации, которая указана в документе.
  2. Валюта банковского счета должна строго совпадать с валютой расчетов по выбираемому договору.
  3. У банковского счета должен быть установлен признак «Основной».

В документах, перенесенных из внешних систем через правила конвертации данных (КД 2.0 или КД 3.0), часто возникает скрытая проблема: реквизит шапки Организация на форме выглядит заполненным, однако служебный реквизит ОрганизацияПолучатель остается равным значению ЗначениеНеЗаполнено() (пустая ссылка).

Так как процедура поиска счета берет данные из реквизита ОрганизацияПолучатель, код не может сопоставить владельца счета и возвращает пустую ссылку. В результате стандартный механизм очищает поле БанковскийСчет на форме.

Решение 1. Заполнение реквизита «ОрганизацияПолучатель» в загруженных документах

Выяснив причину, разберем по шагам, как исправить незаполненные документы без необходимости править их вручную каждый раз.

Вариант А: Использование стандартной обработки «Групповое изменение реквизитов»

Если в базе нет возможности запустить программную обработку, используем штатный механизм платформы 1С:

  1. Перейдем в раздел Администрирование — Обслуживание — Корректировка данных — Групповое изменение реквизитов.
  2. В поле «Изменять» выберем объект Счет на оплату покупателю.
  3. Нажмем Добавить условие отбора и отфильтруем документы, в которых реквизит Проведен равен Ложь.
  4. В списке реквизитов найдем служебный реквизит ОрганизацияПолучатель (или Организация) и укажем требуемую организацию.
  5. Нажмем кнопку Изменить реквизиты.

Вариант Б: Программное заполнение реквизита обработкой

Посмотрим на пример кода, который можно выполнить во внешней обработке или через внешнюю обработку произвольного кода для массового проставления организации-получателя:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	СчетНаОплату.Ссылка КАК Ссылка,
    |	СчетНаОплату.Организация КАК Организация
    |ИЗ
    |	Документ.СчетНаОплатуПокупателю КАК СчетНаОплату
    |ГДЕ
    |	СчетНаОплату.Проведен = ЛОЖЬ
    |	И СчетНаОплату.ОрганизацияПолучатель = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка)";

РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетали = РезультатЗапроса.Выбрать();

Пока ВыборкаДетали.Следующий() Цикл
    ОбъектДокумент = ВыборкаДетали.Ссылка.ПолучитьОбъект();
    ОбъектДокумент.ОрганизацияПолучатель = ВыборкаДетали.Организация;
    
    // Заполняем основной банковский счет при необходимости
    Если НЕ ЗначениеЗаполнено(ОбъектДокумент.БанковскийСчет) Тогда
        ОбъектДокумент.БанковскийСчет = ВыборкаДетали.Организация.ОсновнойБанковскийСчет;
    КонецЕсли;
    
    ОбъектДокумент.Записать(РежимЗаписиДокумента.Запись);
КонецЦикла;

Решение 2. Проверка статуса основного счета и соответствия валют

Если реквизиты организации заполнены корректно, но банковский счет все равно сбрасывается при смене договора, проверим настройку самого справочника банковских счетов и договоров контрагента.

  1. Откроем карточку организации в справочнике Организации.
  2. Перейдем на вкладку Банковские счета.
  3. Убедимся, что у нужного рублевого счета установлен статус основного (кнопка Использовать как основной).
  4. Откроем договор контрагента и проверим валюту расчетов в секции «Расчеты». Если в договоре указаны условные единицы или иностранная валюта (USD, EUR), а у организации создан только счет в рублях (RUB), платформа не сможет подобрать рублевый счет и очистит поле. Для валютных договоров необходимо создать отдельный банковский счет в соответствующей валюте.

Решение 3. Корректировка правил обмена (КД 2.0 / 7.7)

Чтобы проблема не повторялась при последующих выгрузках из «1С:Торговля и Склад 7.7», необходимо внести исправления в правила конвертации данных:

  1. Откроем правила обмена в конфигурации Конвертация данных.
  2. Найдем правило конвертации объектов (ПКО) для документа «Счет на оплату».
  3. В ПКО настроим правило конвертации свойства (ПКС) для реквизита ОрганизацияПолучатель, сопоставив его с организацией источника.
  4. Сохраним обновленные правила обмена и загрузим их в обработку выгрузки.
← На главную