В типовых конфигурациях «1С:Бухгалтерия», особенно в версиях на платформе 8.2 (таких как БП 2.0), существует стандартная логика: программа берет основной расчетный счет из карточки организации. Это удобно, если фирма небольшая. Однако, когда компания разделяет продажи по направлениям или группам менеджеров, возникает серьезная проблема — менеджеры постоянно забывают вручную менять расчетный счет в документах «Счет на оплату» или «Реализация товаров и услуг». Это приводит к тому, что клиенты оплачивают счета не на те реквизиты, что создает путаницу в бухгалтерии.
В этой статье мы подробно разберем, как автоматизировать этот процесс и сделать так, чтобы система сама подставляла нужный счет в зависимости от того, какой пользователь создает документ.
Давайте проанализируем ситуацию: в справочнике Организации есть поле ОсновнойБанковскийСчет. Процедуры заполнения документов в коде конфигурации обращаются именно к этому полю. В настройках пользователя (меню «Сервис» — «Настройки пользователя») обычно присутствуют такие параметры, как «Основной склад» или «Основная организация», но «Основного банковского счета» там нет. Следовательно, нам придется внести небольшие изменения в конфигурацию, чтобы обучить систему новой логике.
Это самый «правильный» и архитектурно верный способ для конфигураций на обычных формах (1С 8.2). Мы добавим персональную настройку для каждого менеджера.
Рассмотрим по шагам:
НастройкиПользователей.ОсновнойБанковскийСчет. В качестве типа значения укажем СправочникСсылка.БанковскиеСчета.Однако просто добавить настройку недостаточно — нужно заставить программу ее считывать. Для этого проанализируем общий модуль, отвечающий за заполнение документов (обычно это ЗаполнениеДокументов или РаботаСДиалогами).
Нам нужно найти процедуру, которая вызывается при создании нового документа или при изменении организации. В этой процедуре мы добавим условие:
// Получаем настройку пользователя
ВариантСчета = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнойБанковскийСчет");
Если ЗначениеЗаполнено(ВариантСчета) Тогда
ЭтотОбъект.БанковскийСчетОрганизации = ВариантСчета;
Иначе
// Если настройка не задана, используем стандартную логику организации
ЭтотОбъект.БанковскийСчетОрганизации = ЭтотОбъект.Организация.ОсновнойБанковскийСчет;
КонецЕсли;
Если мы хотим избежать серьезного изменения типового кода, чтобы облегчить будущие обновления, рассмотрим вариант с подпиской на событие. Этот метод хорошо подходит и для современных версий на платформе 8.3.
Мы создадим новый общий модуль (например, КастомныеНастройкиСервер) и добавим в него процедуру, которая будет срабатывать при создании новых документов. Назовем ее УстановитьСчетПоГруппеПользователя.
Разберем логику работы кода:
Ссылка на банковский счет.
Процедура УстановитьСчетПоГруппеПользователя(Источник, ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Экспорт
// Проверяем, что это нужный нам тип документа
Если ТипЗнч(Источник) = Тип("ДокументОбъект.СчетНаОплатуПокупателю")
ИЛИ ТипЗнч(Источник) = Тип("ДокументОбъект.РеализацияТоваровУслуг") Тогда
ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
// Пример логики: если пользователь в группе "Отдел Продаж А", ставим счет А
// Для упрощения можно использовать ДополнительныеРеквизиты пользователя
СчетДляПодстановки = ПолучитьСчетДляПользователя(ТекущийПользователь);
Если ЗначениеЗаполнено(СчетДляПодстановки) Тогда
Источник.БанковскийСчетОрганизации = СчетДляПодстановки;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
В некоторых случаях мы можем обойтись без сложного кода, если структура компании позволяет использовать учет по подразделениям. Посмотрим, как это работает в расширенных конфигурациях (УПП, КА) и как это можно адаптировать для «простой» бухгалтерии.
Если в вашей конфигурации включен учет по подразделениям, вы можете закрепить каждого менеджера за конкретным Подразделением. Хотя в типовой БП 2.0 прямой связи «Подразделение — Расчетный счет» нет, вы можете использовать это как условие в коде. Это проще, чем настраивать каждого пользователя индивидуально: вы один раз прописываете в коде, что для «Отдела западного направления» всегда ставится «Счет в банке ВТБ», а для «Центрального офиса» — «Счет в Сбербанке».
Если вы работаете в современной версии 3.0, ситуация упрощается. Выясним, какие штатные инструменты у нас есть. В разделе «Главное» — «Персональные настройки» уже предусмотрена возможность указать основной банковский счет.
Проанализируем приоритеты подстановки в 3.0:
Если менеджеры работают в 3.0, достаточно просто зайти под каждым пользователем и один раз установить этот параметр. Это не требует вмешательства программиста.
При выборе способа реализации важно учитывать следующие моменты:
ТолькоПросмотр = Истина для поля счета, если у пользователя нет прав на его изменение.Подводя итог, можно сказать, что в версии 8.2 наиболее стабильным решением будет расширение Плана видов характеристик «Настройки пользователей», так как это дает администратору удобный интерфейс управления счетами без необходимости переписывать код при появлении нового менеджера или нового счета.