Программное создание документов в конфигурации «Бухгалтерия предприятия 3.0» (БП 3.0) — это задача, с которой часто сталкиваются разработчики при интеграции систем или автоматизации загрузки данных. Однако просто заполнить реквизиты объекта недостаточно. Чтобы документ был корректным с точки зрения методологии бухгалтерского учета и успешно проходил проверки (особенно в облачных сервисах типа 1С:Фреш), необходимо максимально задействовать типовые механизмы конфигурации. Рассмотрим подробнее, как автоматизировать этот процесс, избегая «хардкода» счетов учета и ручного расчета налогов.
Начнем с создания нового экземпляра документа. Важно понимать, что при создании нового объекта через менеджер, многие параметры по умолчанию еще не установлены. Чтобы запустить стандартную логику конфигурации, заложенную разработчиками в процедуру ОбработкаЗаполнения, следует вызвать метод Заполнить(). Проанализируем пример кода:
НовыйДокумент = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
// Инициализируем стандартные настройки (валюта, склад по умолчанию и т.д.)
НовыйДокумент.Заполнить(Неопределено);
// Заполняем ключевую аналитику
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", "7700000000");
НовыйДокумент.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию("ООО Покупатель");
НовыйДокумент.Склад = Справочники.Склады.НайтиПоНаименованию("Основной склад");
Разберем, почему это важно. Вызов Заполнить(Неопределено) позволяет системе автоматически определить учетную политику организации и установить, например, флаг СуммаВключаетНДС или заполнить ответственное лицо. Это избавляет нас от необходимости прописывать каждый мелкий реквизит вручную.
Одной из самых распространенных ошибок является ручное указание счетов учета расчетов (например, 62.01 и 62.02). В БП 3.0 эти данные хранятся в регистре сведений «Счета учета расчетов с контрагентами». Чтобы не писать запросы к этому регистру, воспользуемся специализированным общим модулем. Выясним, как это сделать:
// Если договор не передан явно, попробуем найти договор по умолчанию
Если НовыйДокумент.ДоговорКонтрагента.Пустая() Тогда
НовыйДокумент.ДоговорКонтрагента = Справочники.ДоговорыКонтрагентов.ПолучитьДоговорПоУмолчанию(
НовыйДокумент.Контрагент,
НовыйДокумент.Организация,
ПредопределенноеЗначение("Перечисление.ВидыДоговоровКонтрагентов.СПокупателем")
);
КонецЕсли;
// Автоматически заполняем счета расчетов (62.01, 62.02 и т.д.)
СчетаУчетаВДокументах.ЗаполнитьСчетаУчетаРасчетов(НовыйДокумент);
Функция СчетаУчетаВДокументах.ЗаполнитьСчетаУчетаРасчетов(Объект) — это мощный инструмент, который анализирует вид договора, контрагента и организацию, подставляя актуальные счета из настроек программы. Это гарантирует, что ваш код не сломается, если бухгалтер решит изменить счета учета для конкретного контрагента.
Переходим к заполнению строк документа. Для каждой позиции номенклатуры нам необходимо определить счета учета (41, 90.01.1, 90.02.1), ставку НДС и цену. Вместо прямого присвоения, разберем по шагам использование типовых процедур:
Для Каждого СтрокаДанных Из МояСтруктураДанных Цикл
НоваяСтрока = НовыйДокумент.Товары.Добавить();
НоваяСтрока.Номенклатура = СтрокаДанных.Номенклатура;
НоваяСтрока.Количество = СтрокаДанных.Количество;
// 1. Заполняем счета учета номенклатуры (доходов, расходов, ТМЦ)
// Метод использует регистр "Счета учета номенклатуры"
СчетаУчетаВДокументах.ЗаполнитьСчетаУчета(НовыйДокумент, "Товары");
// 2. Рассчитываем НДС
УчетНДС.ЗаполнитьСтавкуНДС(НоваяСтрока, НовыйДокумент.Организация);
УчетНДС.РассчитатьСуммуНДС(НоваяСтрока, НовыйДокумент.ЦенаВключаетНДС);
// 3. Заполнение цен (если необходимо использовать тип цен из договора)
ПараметрыЗаполненияЦен = ОбработкаТабличныхЧастей.ПараметрыЗаполненияЦен();
ПараметрыЗаполненияЦен.ТипЦен = НовыйДокумент.ДоговорКонтрагента.ТипЦен;
ОбработкаТабличныхЧастей.ЗаполнитьЦеныИВалюту(НовыйДокумент, ПараметрыЗаполненияЦен);
КонецЦикла;
Важный момент: вызов СчетаУчетаВДокументах.ЗаполнитьСчетаУчета внутри цикла или после него позволяет системе корректно определить счета учета налога на прибыль и счета выручки в зависимости от того, является ли номенклатура товаром, услугой или продукцией.
После того как все строки добавлены, необходимо актуализировать общие итоги документа (сумму, сумму НДС, количество). В современных версиях БП 3.0 для этого часто используются механизмы модуля объекта или модуля формы. При программном создании рекомендуется вызвать проверку заполнения, чтобы убедиться в полноте данных:
Проанализируем завершающий этап:
// Пересчитываем итоги по всему документу
НовыйДокумент.Записать(РежимЗаписиДокумента.Запись);
// Проверяем, все ли обязательные поля заполнены (имитация нажатия кнопки "Провести")
Если НовыйДокумент.ПроверитьЗаполнение() Тогда
НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
Сообщить("Документ успешно создан и проведен: " + НовыйДокумент.Ссылка);
Иначе
Сообщить("Ошибка при проверке заполнения документа!");
КонецЕсли;
Если вы разрабатываете внешнюю обработку для работы во «Фреше», крайне важно использовать только те методы, которые разрешены в безопасном режиме. Использование типовых общих модулей, таких как ОбщегоНазначения, СчетаУчетаВДокументах и УчетНДС, является «золотым стандартом». Это не только упрощает прохождение аудита, но и гарантирует, что ваша обработка не перестанет работать после очередного обновления конфигурации, так как эти модули являются частью стабильного API 1С.
Подведем итог нашему разбору. Для качественной реализации создания документа «Реализация товаров и услуг» придерживайтесь следующего алгоритма:
Объект.Заполнить() сразу после создания объекта для первичной инициализации.СчетаУчетаВДокументах.УчетНДС, это обезопасит вас от ошибок при изменении законодательства (например, смене ставки НДС).Ценообразование или ОбработкаТабличныхЧастей, чтобы учитывать настройки прайс-листов организации.ПроверитьЗаполнение(), чтобы поймать ошибки до момента записи в базу данных.Такой подход делает ваш код профессиональным, читаемым и легко поддерживаемым. Мы вместе разобрали основные методы, которые позволяют превратить обычное программное создание документа в надежный автоматизированный процесс, соответствующий всем требованиям типовой конфигурации 1С.