Как реализовать автоматическое заполнение организации в самописном документе 1С:Бухгалтерия 3.0

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

При разработке собственных объектов в типовых конфигурациях, таких как 1С:Бухгалтерия предприятия 3.0 (интерфейс Такси), одной из наиболее частых задач является обеспечение удобства ввода данных. Пользователи привыкли, что в типовых документах реквизит Организация заполняется автоматически сразу при создании нового объекта. Однако в самописном документе этот механизм не работает «из коробки».

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

Шаг 1. Проверка пользовательских настроек

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

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

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

Шаг 2. Программное заполнение в форме документа

Наиболее простой путь для начинающего разработчика — добавить код в модуль формы документа. Рассмотрим ситуацию, когда документ является «самописным», и нам нужно инициализировать реквизиты при его создании. Проанализируем стандартное событие ПриСозданииНаСервере.

Для реализации автоматического заполнения мы можем использовать следующий алгоритм:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    // Проверяем, что это именно создание нового документа, а не открытие существующего
    Если Параметры.Ключ.Пустая() Тогда
        
        // Вариант 1: Использование типового функционала БП 3.0
        ЗначенияДляЗаполнения = Новый Структура;
        ЗначенияДляЗаполнения.Вставить("Организация", ""); // Поле для заполнения
        ЗначенияДляЗаполнения.Вставить("Ответственный", "");
        
        // Используем общий модуль ЗарплатаКадры (часто встречается в БП)
        // Этот метод подставит значения из настроек пользователя
        ЗарплатаКадры.ЗаполнитьПервоначальныеЗначенияВФорме(ЭтаФорма, ЗначенияДляЗаполнения);
        
    КонецЕсли;

КонецПроцедуры

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

Шаг 3. Использование специализированных функций «Бухгалтерии предприятия»

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

Вместо того чтобы полагаться на универсальные методы заполнения структуры, мы можем явно присвоить значение реквизиту Объект.Организация. Рассмотрим пример кода:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

КонецПроцедуры

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

Шаг 4. Правильная архитектура: использование «ОбработкиЗаполнения»

Профессиональный подход к разработке в среде 1С:Предприятие 8.3 подразумевает вынос логики заполнения из формы в модуль объекта. Почему это важно? Рассмотрим ситуацию: если вы решите создавать документ не вручную через форму, а программно (например, при загрузке из Excel или через другую обработку), код в форме не сработает. Выясним, как сделать решение универсальным.

Откроем модуль объекта вашего документа и найдем процедуру ОбработкаЗаполнения. Проанализируем следующий пример:


Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)

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

КонецПроцедуры

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

Шаг 5. Нюансы многофирменного учета

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

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    // Проверяем видимость поля организации в зависимости от настроек базы
    МногофирменныйУчет = ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоОрганизаций");
    Элементы.Организация.Видимость = МногофирменныйУчет;
    
    // Если организация одна, она должна быть заполнена всегда
    Если НЕ МногофирменныйУчет Тогда
        Объект.Организация = Справочники.Организации.Выбрать().Следующий(); 
        // Или через тот же ПолучитьОрганизациюПоУмолчанию()
    КонецЕсли;

КонецПроцедуры

Использование БухгалтерскийУчетВызовСервера.ПолучитьОрганизациюПоУмолчанию() внутри ОбработкаЗаполнения является наиболее надежным и рекомендуемым способом для конфигураций на базе БП 3.0. Это гарантирует корректную работу документа в любых сценариях использования и упрощает поддержку кода при обновлениях системы.

← На главную