Как программно создать документ Операция (бухгалтерский и налоговый учет) в 1С:Бухгалтерии?

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

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

Разбор основной проблемы: почему проводки не видны в отчетах?

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

В системе 1С:Предприятие 8 записи в регистрах бухгалтерии для документа «Операция» управляются флагом Записывать в коллекции движений. Если вы создаете записи через НаборЗаписей отдельно от объекта документа, система может не связать их корректно или не установить признак активности записей. Самый надежный и современный способ — работать напрямую через коллекцию Движения самого объекта документа.

Правильный алгоритм создания документа «ОперацияБух»

Проанализируем шаги, которые необходимо выполнить для корректного создания документа. Мы будем использовать объектную модель, которая гарантирует целостность данных.

  1. Создание нового объекта документа через менеджер.
  2. Заполнение обязательных реквизитов шапки (Организация, Дата, Сумма, Содержание).
  3. Обращение к коллекции движений Хозрасчетный.
  4. Добавление новых строк (проводок) в коллекцию.
  5. Установка признака Записывать = Истина для коллекции движений.
  6. Запись документа.

Посмотрим на пример кода, который решает задачу создания операции с одной проводкой:


// 1. Создаем объект документа
ДокументОбъект = Документы.ОперацияБух.СоздатьДокумент();
ДокументОбъект.Дата = ТекущаяДата();
ДокументОбъект.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", "7700000000");
ДокументОбъект.СуммаОперации = 1000;
ДокументОбъект.Содержание = "Перенос задолженности программно";
ДокументОбъект.Ответственный = ПараметрыСеанса.ТекущийПользователь;

// 2. Работаем с движениями
ДвиженияБух = ДокументОбъект.Движения.Хозрасчетный;

// Добавляем проводку
НоваяЗапись = ДвиженияБух.Добавить();
НоваяЗапись.Период = ДокументОбъект.Дата;
НоваяЗапись.Организация = ДокументОбъект.Организация;
НоваяЗапись.Активность = Истина;

// Заполняем Счет Дебета и Субконто
НоваяЗапись.СчетДт = ПланыСчетов.Хозрасчетный.РасчетыСПрочимиПоставщикамиИПодрядчиками;
НоваяЗапись.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты] = КонтрагентСсылка;
НоваяЗапись.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры] = ДоговорСсылка;

// Заполняем Счет Кредита и Субконто
НоваяЗапись.СчетКт = ПланыСчетов.Хозрасчетный.РасчетыСПокупателями;
НоваяЗапись.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты] = КонтрагентПокупатель;
НоваяЗапись.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры] = ДоговорПокупатель;

// Сумма операции
НоваяЗапись.Сумма = 1000;

// 3. ВАЖНО: устанавливаем флаг записи движений
ДвиженияБух.Записывать = Истина;

// 4. Записываем документ
Попытка
    ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
    Сообщить("Документ успешно создан: " + ДокументОбъект.Ссылка);
Исключение
    Сообщить("Ошибка при записи: " + ОписаниеОшибки());
КонецПопытки;

Нюансы налогового учета (НУ) и ПБУ 18/02

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

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

Важный момент: Сумма бухгалтерского учета должна быть равна формуле: СуммаНУ + СуммаПР + СуммаВР. Если вы программно создаете операцию, обязательно следите за этим балансом, чтобы избежать «кривых» остатков на счетах.

Работа с валютой и количеством

Проанализируем, как работать со специальными признаками учета на счетах. Если вы используете, например, счет 10 «Материалы» или счет 52 «Валютные счета», вам потребуется заполнить дополнительные ресурсы в записи регистра:

Количественный учет: если на счете установлен признак количественного учета, необходимо заполнить КоличествоДт или КоличествоКт. Без этого на складе не отразится движение в натуральном выражении. Подобный механизм часто используется для корректировки остатков по счетам материалов и товаров.

Валютный учет: для валютных счетов обязательны к заполнению поля ВалютаДт (или ВалютаКт) и ВалютнаяСуммаДт (или ВалютнаяСуммаКт). Не забудьте, что обычная Сумма в этом случае всегда указывается в рублях по курсу на дату операции.

Оптимизация: загрузка большого количества проводок

Выясним, как поступить, если нужно перенести тысячи записей, например, из Excel — для этой задачи есть загрузка данных из Excel в любые документы 1С. Использование метода Движения.Добавить() в цикле может работать медленно. Рассмотрим более производительный подход через Таблицу Значений.

Мы можем сформировать структуру данных в памяти, а затем одним махом загрузить ее в набор записей документа — в этом поможет универсальная low-code загрузка данных в регистры 1С. Это значительно сокращает количество обращений к базе данных.


// Создаем таблицу, структуру которой система подберет сама на основе регистра
ТЗ_Движений = ДокументОбъект.Движения.Хозрасчетный.ВыгрузитьКолонки();

// Наполняем ТЗ данными из вашего источника (цикл по Excel)
Для Каждого СтрокаДанных Из ДанныеЭксель Цикл
    НоваяСтрока = ТЗ_Движений.Добавить();
    НоваяСтрока.Период = ДатаОперации;
    НоваяСтрока.СчетДт = СчетДт;
    // ... заполнение всех остальных полей ...
    НоваяСтрока.Сумма = СтрокаДанных.Сумма;
    НоваяСтрока.Активность = Истина;
КонецЦикла;

// Загружаем данные в движения документа
ДокументОбъект.Движения.Хозрасчетный.Загрузить(ТЗ_Движений);
ДокументОбъект.Движения.Хозрасчетный.Записывать = Истина;
ДокументОбъект.Записать();

Заключение и рекомендации

Подводя итоги, отметим, что основной «секрет» успеха при программном создании операций БУХ заключается в правильном управлении свойством Записывать коллекции движений. Рассмотрим краткое резюме ключевых правил:

  1. Всегда заполняйте реквизит СуммаОперации в шапке документа — он должен соответствовать сумме всех проводок в регистре.
  2. Для счетов расчетов с контрагентами всегда проверяйте наличие всех необходимых субконто (Контрагент, Договор, а часто и Документ расчетов).
  3. Если используете НаборЗаписей напрямую (без объекта документа), обязательно устанавливайте Отбор по Регистратору и флаг Активность = Истина.
  4. При работе в режиме 8.3 на управляемых формах избегайте использования РежимЗаписиДокумента.Проведение, так как документ «Операция» технически не имеет процедуры проведения в привычном смысле, используйте РежимЗаписиДокумента.Запись.

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

← На главную