Почему возникает ошибка «Поле объекта не обнаружено (Касса)» при проведении документа в 1С?

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

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

Разбор причины ошибки

Когда вы пишете код в модуле объекта документа, вы обращаетесь к коллекции Движения. Однако платформа 1С устроена таким образом, что в эту коллекцию автоматически попадают только те регистры, для которых данный документ был явно назначен регистратором в Конфигураторе.

Если вы пытаетесь выполнить команду Движения.Касса.Добавить(), а документ не «знает» о существовании регистра Касса (то есть этот регистр не указан в списке движений документа), платформа выдаст ошибку, так как свойства Касса у коллекции Движения просто не существует в контексте этого объекта.

Шаг 1: Проверка настроек в Конфигураторе

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

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

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

Шаг 2: Правильная работа с методами записи

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

Рекомендуем придерживаться следующего шаблона при работе с движениями:


// Включаем признак того, что мы будем записывать движения
Движения.Касса.Записывать = Истина;

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

// Добавляем новые движения
Если СуммаОплата > 0 Тогда
    ДвижКасса = Движения.Касса.Добавить();
    ДвижКасса.ВидДвижения = ВидДвиженияНакопления.Расход;
    ДвижКасса.Период = Дата;
    ДвижКасса.Сумма = СуммаОплата;
    // ... заполнение остальных реквизитов
КонецЕсли;

При таком подходе платформа сама корректно обработает запись данных в базу данных, а вам не придется вызывать метод Записать() вручную. Это обезопасит процесс проведения от нежелательных конфликтов транзакций.

Шаг 3: Проверка имен регистров

Иногда ошибка возникает из-за простой невнимательности или разницы в именовании. Проанализируем, не используете ли вы разные регистры для кассы и банковского счета. Если в вашей системе есть разделение (например, Касса и БанковскиеСчета), убедитесь, что вы обращаетесь к коллекции по правильному имени, заданному в метаданных.

Используйте встроенный отладчик для диагностики: установите точку останова в начале процедуры ОбработкаПроведения, запустите режим отладки и через окно «Вычисление выражения» проверьте структуру объекта Движения. Если вы введете команду Движения и раскроете список, вы сразу увидите, какие регистры доступны для этого документа.

Заключение

Ошибки при проведении документов чаще всего связаны не с синтаксисом языка, а с метаданными самой конфигурации. Проверьте связи документа с регистрами на вкладке «Движения», приведите код к стандартному виду без принудительной записи, и ваш документ будет работать стабильно и корректно.

← На главную