Как настроить автоматическое заполнение расчетного счета в документе «Счет на оплату покупателю» в 1С:КА 1.1?

Программист 1С v8.3 (Обычные формы)
← На главную

В работе с программой 1С:Комплексная автоматизация, редакция 1.1 (которая во многом идентична 1С:Управление производственным предприятием 1.3), пользователи часто сталкиваются с тем, что при создании документов «на основании» некоторые поля остаются пустыми. Одной из самых частых проблем является заполнение поля «Б/счет, касса» в документе СчетНаОплатуПокупателю. Рассмотрим подробно, почему это происходит и как мы можем автоматизировать этот процесс, чтобы не заполнять данные вручную каждый раз.

Разберем логику работы системы «из коробки»

Для начала проанализируем ситуацию: почему при создании Счета на оплату из документа РеализацияТоваровУслуг банковский счет не подставляется автоматически? В типовом решении 1С алгоритм «Ввода на основании» работает по строго заданному приоритету. Когда мы создаем один документ из другого, программа ищет подходящий расчетный счет в следующем порядке:

  1. Проверяется, какой банковский счет указан в качестве Основного в карточке организации.
  2. Проверяется соответствие валюты этого счета валюте документа. Если счет организации рублевый, а документ оформляется в долларах, система проигнорирует этот счет.
  3. Если основной счет не подходит или не задан, система оставляет поле пустым, предоставляя выбор пользователю.

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

Решение 1: Настройка основного банковского счета

Самый простой и быстрый способ, не требующий программирования, — это назначение счета основным. Если в большинстве случаев вы используете один конкретный счет, выполним следующие действия:

  1. Перейдем в справочник Организации.
  2. Откроем карточку нужной нам организации.
  3. На вкладке «Основные» (или через кнопку «Перейти» — «Банковские счета») найдем нужный счет.
  4. Установим его как основной, нажав кнопку «Установить основным».

Теперь при создании нового Счета на оплату (независимо от того, создается он на основании или «с нуля»), этот счет будет подставляться автоматически.

Решение 2: Использование настроек договора контрагента

Часто в 1С:КА 1.1 (и УПП 1.3) забывают о мощном механизме настроек в договорах. Если работа с конкретным покупателем всегда ведется через определенный банковский счет, мы можем закрепить это в системе. Разберем по шагам:

  1. Откроем карточку Контрагента, затем перейдем в список его Договоров.
  2. Откроем нужный договор.
  3. Перейдем на вкладку «Дополнительно».
  4. В поле «Организация: Банковский счет» выберем тот счет нашей организации, который должен использоваться при расчетах по данному договору.

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

Решение 3: Изменение порядка ввода документов

Проанализируем интересную особенность, замеченную опытными пользователями: если изменить последовательность действий, проблема исчезает. Если сначала создать документ СчетНаОплатуПокупателю, вручную выбрать в нем нужный банковский счет, а затем на его основании создать документ РеализацияТоваровУслуг, то данные перенесутся корректно.

Это связано с тем, что в структуре метаданных 1С:КА 1.1 реквизит «Банковский счет» в документе реализации часто скрыт или не заполняется по умолчанию, поэтому при обратном вводе (из Реализации в Счет) системе просто «неоткуда» взять информацию, кроме как из общих настроек организации.

Решение 4: Доработка логики через внешнюю обработку заполнения

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

Этот механизм позволяет добавить кнопку «Заполнить» в документ или перехватить событие заполнения. Мы можем написать алгоритм, который будет анализировать документ-основание и искать нужный счет. Пример логики кода для такой обработки (упрощенно):


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

Такой подход позволяет автоматизировать выбор счета без внесения изменений в типовой код программы 1С.

Решение 5: Изменение кода в Конфигураторе

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

Выясним причину: в типовой процедуре при передаче данных из РеализацияТоваровУслуг реквизит БанковскийСчетОрганизации может игнорироваться. Нам нужно добавить условие:

  1. Если документ-основание — РеализацияТоваровУслуг.
  2. Проверить наличие банковского счета в договоре реализации.
  3. Если он там есть — подставить его в Счет на оплату.

Проанализируем пример внесения правок:


Процедура ОбработкаЗаполнения(Основание)
    // Стандартный код заполнения...
    Если ТипЗнч(Основание) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
        // Пытаемся взять счет из договора, указанного в реализации
        Если ЗначениеЗаполнено(Основание.ДоговорКонтрагента.ОрганизацияБанковскийСчет) Тогда
            ЭтотОбъект.БанковскийСчетОрганизации = Основание.ДоговорКонтрагента.ОрганизацияБанковскийСчет;
        Иначе
            // Иначе оставляем логику поиска основного счета
            ЭтотОбъект.БанковскийСчетОрганизации = Основание.Организация.ОсновнойБанковскийСчет;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Важно: Любые изменения в конфигураторе требуют последующего обновления программы специалистом. Если вы не готовы к сопровождению нетиповой конфигурации, рекомендуем остановиться на Решении 2 (настройка в договоре).

Резюме

Мы проанализировали ситуацию с незаполнением счета организации в 1С:КА 1.1 и нашли несколько путей решения. Если проблема носит массовый характер, лучше всего использовать настройку ОрганизацияБанковскийСчет в договорах контрагентов. Это наиболее «чистый» способ с точки зрения методологии 1С, не требующий программирования и сохраняющий гибкость учета.

← На главную