В работе с программой 1С:Комплексная автоматизация, редакция 1.1 (которая во многом идентична 1С:Управление производственным предприятием 1.3), пользователи часто сталкиваются с тем, что при создании документов «на основании» некоторые поля остаются пустыми. Одной из самых частых проблем является заполнение поля «Б/счет, касса» в документе СчетНаОплатуПокупателю. Рассмотрим подробно, почему это происходит и как мы можем автоматизировать этот процесс, чтобы не заполнять данные вручную каждый раз.
Для начала проанализируем ситуацию: почему при создании Счета на оплату из документа РеализацияТоваровУслуг банковский счет не подставляется автоматически? В типовом решении 1С алгоритм «Ввода на основании» работает по строго заданному приоритету. Когда мы создаем один документ из другого, программа ищет подходящий расчетный счет в следующем порядке:
Проблема пользователя в том, что у организации может быть несколько расчетных счетов, и ни один из них нельзя однозначно назвать основным для всех операций. В этом случае типовая логика перестает быть эффективной.
Самый простой и быстрый способ, не требующий программирования, — это назначение счета основным. Если в большинстве случаев вы используете один конкретный счет, выполним следующие действия:
Организации.Теперь при создании нового Счета на оплату (независимо от того, создается он на основании или «с нуля»), этот счет будет подставляться автоматически.
Часто в 1С:КА 1.1 (и УПП 1.3) забывают о мощном механизме настроек в договорах. Если работа с конкретным покупателем всегда ведется через определенный банковский счет, мы можем закрепить это в системе. Разберем по шагам:
Контрагента, затем перейдем в список его Договоров.Этот способ является приоритетным для системы. Если в договоре указан конкретный счет, программа подставит именно его, даже если в карточке организации «основным» выбран другой счет. Это позволяет гибко настроить работу с разными банками для разных клиентов.
Проанализируем интересную особенность, замеченную опытными пользователями: если изменить последовательность действий, проблема исчезает. Если сначала создать документ СчетНаОплатуПокупателю, вручную выбрать в нем нужный банковский счет, а затем на его основании создать документ РеализацияТоваровУслуг, то данные перенесутся корректно.
Это связано с тем, что в структуре метаданных 1С:КА 1.1 реквизит «Банковский счет» в документе реализации часто скрыт или не заполняется по умолчанию, поэтому при обратном вводе (из Реализации в Счет) системе просто «неоткуда» взять информацию, кроме как из общих настроек организации.
Если нам нужно, чтобы счет подставлялся по сложной логике (например, в зависимости от подразделения или вида деятельности), но мы не хотим снимать конфигурацию с поддержки, рассмотрим вариант использования Внешних обработок заполнения.
Этот механизм позволяет добавить кнопку «Заполнить» в документ или перехватить событие заполнения. Мы можем написать алгоритм, который будет анализировать документ-основание и искать нужный счет. Пример логики кода для такой обработки (упрощенно):
// Фрагмент кода для поиска подходящего счета организации по валюте
Функция НайтиПодходящийСчет(Организация, ВалютаДокумента)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| БанковскиеСчета.Ссылка
|ИЗ
| Справочник.БанковскиеСчета КАК БанковскиеСчета
|ГДЕ
| БанковскиеСчета.Владелец = &Организация
| И БанковскиеСчета.ВалютаДенежныхСредств = &Валюта
| И НЕ БанковскиеСчета.ПометкаУдаления";
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("Валюта", ВалютаДокумента);
Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Выборка.Следующий();
Возврат Выборка.Ссылка;
КонецЕсли;
Возврат Справочники.БанковскиеСчета.ПустаяСсылка();
КонецФункции
Такой подход позволяет автоматизировать выбор счета без внесения изменений в типовой код программы 1С.
Если же требуется фундаментальное решение, «рассмотрим» внесение изменений непосредственно в процедуру заполнения документа. Нам необходимо найти модуль документа СчетНаОплатуПокупателю и процедуру ОбработкаЗаполнения.
Выясним причину: в типовой процедуре при передаче данных из РеализацияТоваровУслуг реквизит БанковскийСчетОрганизации может игнорироваться. Нам нужно добавить условие:
РеализацияТоваровУслуг.Проанализируем пример внесения правок:
Процедура ОбработкаЗаполнения(Основание)
// Стандартный код заполнения...
Если ТипЗнч(Основание) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
// Пытаемся взять счет из договора, указанного в реализации
Если ЗначениеЗаполнено(Основание.ДоговорКонтрагента.ОрганизацияБанковскийСчет) Тогда
ЭтотОбъект.БанковскийСчетОрганизации = Основание.ДоговорКонтрагента.ОрганизацияБанковскийСчет;
Иначе
// Иначе оставляем логику поиска основного счета
ЭтотОбъект.БанковскийСчетОрганизации = Основание.Организация.ОсновнойБанковскийСчет;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Важно: Любые изменения в конфигураторе требуют последующего обновления программы специалистом. Если вы не готовы к сопровождению нетиповой конфигурации, рекомендуем остановиться на Решении 2 (настройка в договоре).
Мы проанализировали ситуацию с незаполнением счета организации в 1С:КА 1.1 и нашли несколько путей решения. Если проблема носит массовый характер, лучше всего использовать настройку ОрганизацияБанковскийСчет в договорах контрагентов. Это наиболее «чистый» способ с точки зрения методологии 1С, не требующий программирования и сохраняющий гибкость учета.