Как программно заполнить бухгалтерскую операцию в документе БГУ 2.0?

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

При программном создании документов в современных конфигурациях 1С, таких как "Бухгалтерия государственного учреждения 2.0", часто возникает вопрос: как заполнить данные, которые в пользовательском режиме появляются на форме динамически? Классический пример — вкладка "Бухгалтерская операция" в документе "Счет-фактура полученный", которая формируется в зависимости от выбранной типовой операции.

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

Ключевое различие: Объект данных и Форма документа

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

  1. Объектом документа — это набор данных (реквизиты шапки, табличные части), который хранится в базе данных. Именно с ним мы работаем, когда пишем Документы.ИмяДокумента.СоздатьДокумент().
  2. Формой документа — это визуальное представление объекта для пользователя. Элементы на форме (поля, кнопки, таблицы) лишь отображают данные из объекта и позволяют их редактировать.

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

Пошаговый алгоритм поиска и заполнения реквизитов

Чтобы программно указать типовую операцию и связанные с ней данные (например, КПС), не нужно пытаться добавлять элементы на несуществующую форму. Вместо этого проанализируем, как система хранит эти данные в самом объекте.

Шаг 1. Используем отладчик для анализа

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

  1. Откройте конфигуратор и найдите модуль объекта нужного документа (например, Документ.СчетФактураПолученный).
  2. Поставьте точку останова в обработчике события ПередЗаписью. Этот обработчик срабатывает непосредственно перед сохранением данных в базу и гарантированно содержит все заполненные значения.
  3. Запустите 1С в режиме пользователя. Создайте новый документ "Счет-фактура полученный" вручную.
  4. На вкладке "Бухгалтерская операция" выберите нужную вам типовую операцию и заполните все необходимые поля, включая дополнительный реквизит КПС.
  5. Нажмите кнопку "Провести и закрыть" или "Записать". Сработает ваша точка останова в конфигураторе.
  6. В окне отладки изучите объект ЭтотОбъект. Просмотрите его реквизиты и найдите те, которые были заполнены после выбора операции. Скорее всего, вы обнаружите реквизит с типом СправочникСсылка.ТиповыеОперации (или аналогичный) и другие реквизиты, хранящие параметры этой операции (например, сам КПС). Запишите их имена.

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

Теперь, когда вы знаете имена "секретных" реквизитов, вы можете использовать их в своем коде. Логика будет следующей:

  1. Создать новый объект документа.
  2. Найти в справочнике нужную типовую операцию (например, по наименованию или коду).
  3. Присвоить ссылку на эту операцию соответствующему реквизиту документа, который вы нашли с помощью отладчика.
  4. Заполнить остальные реквизиты, связанные с операцией (КПС и т.д.).
  5. Заполнить стандартные реквизиты (контрагент, дата, сумма и т.д.).
  6. Записать и провести документ.

Пример кода:

Предположим, в результате отладки вы выяснили, что за операцию отвечает реквизит ТиповаяОперация, а за КПС — реквизит КПСРасходов.


// Создаем новый документ "Счет-фактура полученный"
НовыйСФ = Документы.СчетФактураПолученный.СоздатьДокумент();
НовыйСФ.Дата = ТекущаяДата();
НовыйСФ.Организация = ВашаОрганизация;
НовыйСФ.Контрагент = ВашКонтрагент;
// ... заполняем другие основные реквизиты

// --- Блок заполнения бухгалтерской операции ---

// 1. Находим нужную типовую операцию в справочнике
// Рекомендуется искать по надежному признаку, например, предопределенному имени, если оно есть.
СсылкаНаОперацию = Справочники.ТиповыеОперации.НайтиПоНаименованию("Услуги сторонних организаций (109.00)");

// 2. Проверяем, что операция найдена
Если НЕ ЗначениеЗаполнено(СсылкаНаОперацию) Тогда
    ВызватьИсключение "Не найдена типовая операция!";
КонецЕсли;

// 3. Устанавливаем реквизиты, найденные с помощью отладчика
НовыйСФ.ТиповаяОперация = СсылкаНаОперацию;

// 4. Заполняем связанные реквизиты, например КПС
НовыйСФ.КПСРасходов = ВашКПС;

// --- Конец блока ---

// В некоторых сложных документах может потребоваться вызвать 
// экспортную процедуру из модуля объекта для дополнительной обработки и заполнения
// Например: БухгалтерскиеОперацииСервер.РассчитатьЧтоНибудь(НовыйСФ);
// Наличие таких процедур также можно подсмотреть в модуле объекта.

// Записываем и проводим документ. Система сама сформирует нужные движения
// по регистрам, на основании которых СФ попадет в Книгу покупок.
Попытка
    НовыйСФ.Записать(РежимЗаписиДокумента.Проведение);
Исключение
    Сообщить("Не удалось провести документ: " + ОписаниеОшибки());
КонецПопытки;

Итог

Главное правило: при программной работе с документами всегда взаимодействуйте с объектом данных, а не с его визуальным представлением. Механизм "Бухгалтерских операций" в БГУ 2.0 — это не манипуляции с формой, а заполнение определенных реквизитов в самом объекте документа. Использование отладчика для анализа поведения системы при интерактивной работе — самый надежный способ понять внутреннюю логику и правильно воспроизвести ее в коде.

← На главную