Как правильно программно установить виды субконто и субконто при проведении документа в 1С

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

При разработке алгоритмов проведения документов или создании подписок на событие ОбработкаПроведения разработчики часто сталкиваются с ситуацией, когда проводки создаются, счета проставляются, но субконто остается пустым. Рассмотрим подробно причины этой проблемы и проанализируем, как правильно заполнять аналитику регистра бухгалтерии.

Основные ошибки при программной установке субконто

Проанализируем типичные ошибки, из-за которых аналитика на счете может не сохраняться в базе данных:

  1. Передача типа значения вместо ссылки на вид субконто: Метод ТипЗнч() возвращает объект типа Тип, тогда как в качестве вида субконто платформа ожидает ссылку на элемент плана видов характеристик (например, ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные).
  2. Путаница между видом субконто и его значением: Понятие ВидСубконто определяет тип аналитики (например, «Номенклатура» или «Контрагенты»), а Субконто — конкретное значение этой аналитики (например, конкретный товар или организация).
  3. Несоответствие видов субконто настройкам счета: Если передаваемый вид субконто не привязан к счету проводки в табличной части ВидыСубконто соответствующего счета, платформа 1С проигнорирует его и не сохранит данные.
  4. Перезапись независимого набора записей: Вызов метода Записать() у случайно созданного набора записей в процедуре проведения может приводить к сбоям транзакции или перезаписи данных автоматическими движениями документа.

Правильная работа со специальной коллекцией субконто

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

  1. Через метод Вставить(), передав вид субконто и значение: Движение.СубконтоДт.Вставить(ВидСубконто, ЗначениеСубконто);
  2. Через прямое обращение по ключу вида субконто: Движение.СубконтоДт[ВидСубконто] = ЗначениеСубконто;

Корректная обработка движений в подписке на событие

При работе в подписке на событие ОбработкаПроведения не следует создавать независимый набор записей через РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей(). Правильнее обращаться напрямую к коллекции движений документа, доступной через Источник.Движения.

Рассмотрим правильный шаблон заполнения проводок и аналитики в подписке на проведение:


// Получаем набор записей регистра бухгалтерии из источника
ДвиженияБУ = Источник.Движения.Хозрасчетный;

// Очищаем существующие движения или обходим их циклом
Для Каждого Движение Из ДвиженияБУ Цикл
    
    // Назначаем счет дебета
    Движение.СчетДт = ПланыСчетов.Хозрасчетный.НайтиПоКоду(Источник.КоррСчет);
    
    // Получаем вид субконто для данного счета
    ВидСубконто1 = Движение.СчетДт.ВидыСубконто[0].ВидСубконто;
    
    // Устанавливаем значение субконто по дебету
    Движение.СубконтоДт.Вставить(ВидСубконто1, Источник.Субконто1);

КонецЦикла;

// Включаем флаг необходимости записи движений платформой
ДвиженияБУ.Записывать = Истина;

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

← На главную