Почему возникает ошибка Поле объекта не обнаружено (КоличествоДт) в регистре бухгалтерии и как её исправить?

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

При разработке механизмов проведения документов в системе 1С:Предприятие 8, особенно при работе с регистрами бухгалтерии, начинающие разработчики часто сталкиваются с ошибкой: «Поле объекта не обнаружено (КоличествоДт)». Эта ситуация возникает в момент записи движений в модуле объекта документа. На первый взгляд код кажется логичным, а конфигурация — настроенной, но система отказывается принимать значение. Разберем подробно причины этого поведения и пошагово исправим проблему.

Анализ исходной ситуации

Рассмотрим типовой сценарий. Разработчик создает документ ПриходнаяНакладная, который должен делать записи в регистр бухгалтерии (например, Управленческий). В плане счетов для счета Товары установлен признак количественного учета. В коде обработчика ОбработкаПроведения написаны следующие строки:


Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Управленческий.Товары;
Движение.СчетКт = ПланыСчетов.Управленческий.Поставщики;
Движение.Период = Дата;
Движение.Сумма = ВыборкаДетальныеЗаписи.Сумма;
Движение.КоличествоДт = ВыборкаДетальныеЗаписи.Количество;

При попытке провести документ система выдает ошибку на строке с назначением КоличествоДт. Выясним причину, проанализировав внутреннюю структуру регистра бухгалтерии.

Причина ошибки: Свойство Балансовый у ресурса

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

Рассмотрим два варианта настройки флажка Балансовый для ресурса (например, Количество):

  1. Флаг установлен: Система считает, что данный ресурс всегда подчиняется закону двойной записи. Это означает, что если по дебету пришло 10 единиц, то с кредита другого счета должно уйти ровно 10 единиц. В этом случае в программном объекте Движение создается только одно поле — Количество. Полей КоличествоДт и КоличествоКт в этом случае физически не существует, что и вызывает ошибку.
  2. Флаг снят: Система понимает, что значение ресурса может быть разным для дебета и кредита или вовсе присутствовать только на одной стороне проводки. Именно при такой настройке платформа генерирует раздельные поля КоличествоДт и КоличествоКт.

Проанализируем ситуацию с точки зрения методологии учета. Для ресурса Сумма флаг Балансовый всегда должен быть включен, так как деньги не могут возникнуть из ниоткуда. Но для Количества ситуация иная. Когда мы приходуем товар, мы увеличиваем количество на счете Товары, но на счете Поставщики нам нужно отразить только денежный долг. Нам не нужно хранить «количество поставщиков» или «количество задолженности». Следовательно, ресурс Количество обязан быть небалансовым.

Пошаговое решение проблемы

Для исправления ошибки выполним следующие действия в конфигураторе:

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

Важное замечание: При снятии флага Балансовый структура таблиц БД меняется. Система выполнит реструктуризацию. Если в базе уже были данные, необходимо убедиться, что после изменения ресурса итоги будут пересчитаны корректно.

Разбор программного кода записи проводки

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


// Создаем новую запись в наборе записей регистра
Движение = Движения.Управленческий.Добавить();

// Заполняем основные реквизиты проводки
Движение.Период = Дата;
Движение.Организация = Организация;
Движение.СчетДт = ПланыСчетов.Управленческий.Товары;
Движение.СчетКт = ПланыСчетов.Управленческий.Поставщики;

// Заполняем балансовый ресурс (сумма всегда одна на проводку)
Движение.Сумма = ВыборкаДетальныеЗаписи.Сумма;

// Заполняем небалансовый ресурс (теперь поле КоличествоДт доступно)
Движение.КоличествоДт = ВыборкаДетальныеЗаписи.Количество;

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

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

Связь с Планом счетов

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

У ресурса регистра бухгалтерии (в нашем случае Количество) есть свойство Признак учета. Этот признак — это «ссылка» на аналогичный признак учета в Плане счетов. Рассмотрим логику работы платформы при выполнении метода Записать():

Резюме и рекомендации

Выяснив причину ошибки Поле объекта не обнаружено (КоличествоДт), мы понимаем, что это не ошибка программного кода, а следствие неверной настройки метаданных. Запомним основные правила:

  1. Если ресурс должен учитываться раздельно по сторонам проводки (как количество), снимаем флаг Балансовый.
  2. Если ресурс должен быть одинаков для Дт и Кт (как сумма в валюте учета), оставляем флаг Балансовый активным.
  3. Всегда связывайте небалансовые ресурсы с соответствующими признаками учета в плане счетов.
  4. При обращении к субконто старайтесь использовать обращение по виду характеристики, а не по индексу (0, 1, 2), чтобы избежать ошибок при изменении структуры аналитики.

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

← На главную