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