Ответ в теме: Как исправить ошибку «Попытка использования закрытого менеджера временных таблиц

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как исправить ошибку «Попытка использования закрытого менеджера временных таблиц Ответ в теме: Как исправить ошибку «Попытка использования закрытого менеджера временных таблиц

#36319
bot_avaOdin — Одинэсник
Участник

    Сергей, ошибка «Попытка использования закрытого менеджера временных таблиц» при вызове ДокументОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения) в модуле регистра накопления «ТоварыКОтгрузке» обычно связана с тем, что в момент записи документа менеджер временных таблиц, который используется для записи движений регистра, уже закрыт или недоступен.

    В 1С при проведении документов с движениями по регистрам накопления часто используется менеджер временных таблиц (МенеджерВременныхТаблиц), который создаётся в рамках транзакции проведения документа. Если в процессе проведения или отмены проведения происходит вызов записи документа с режимом ОтменаПроведения вне контекста активного менеджера временных таблиц, то возникает эта ошибка.

    Основные причины и решения:

    1. **Неправильное использование записи документа с режимом ОтменаПроведения вне процедуры проведения**

    — Вызов ДокументОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения) должен происходить только в рамках процедуры проведения документа, где менеджер временных таблиц активен.
    — Если вы вызываете запись документа с таким режимом в обработчике ПередЗаписью или в другом месте вне процедуры проведения, менеджер временных таблиц может быть уже закрыт.

    2. **Рекурсивный вызов записи документа**

    — Если в обработчике ПередЗаписью вы вызываете ДокументОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения), то это может привести к рекурсивному вызову процедуры ПередЗаписью, что не допускается и приводит к ошибкам.
    — Нужно избегать вызова записи документа с режимом отмены проведения в обработчиках, которые вызываются при записи документа.

    3. **Правильное использование менеджера временных таблиц**

    — Если в вашем коде используется МенеджерВременныхТаблиц, то он должен быть создан и передан в процедуры проведения и отмены проведения.
    — В типовых конфигурациях менеджер временных таблиц создаётся автоматически при вызове Провести() или ОтменитьПроведение().
    — Если вы вручную вызываете запись с режимом отмены проведения, убедитесь, что менеджер временных таблиц передан и открыт.

    4. **Рекомендации по исправлению**

    — Не вызывайте ДокументОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения) в обработчике ПередЗаписью.
    — Если нужно отменить проведение документа, делайте это в отдельной процедуре, например, в обработчике проведения или в пользовательской обработке, где менеджер временных таблиц гарантированно открыт.
    — Используйте стандартные методы ДокументОбъект.ОтменитьПроведение() или ДокументОбъект.ОтменитьПроведение(МенеджерВременныхТаблиц).
    — Если вы пишете собственную процедуру проведения, создайте менеджер временных таблиц через Новый МенеджерВременныхТаблиц() и передавайте его в методы записи движений и отмены проведения.

    5. **Пример правильного использования отмены проведения с менеджером временных таблиц**

    6. **Если ошибка возникает в типовой конфигурации**

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

    Итого: ошибка возникает из-за вызова записи документа с режимом отмены проведения вне контекста активного менеджера временных таблиц. Нужно перенести вызов отмены проведения в процедуру, где менеджер временных таблиц создаётся и открыт, и не делать этого в обработчике ПередЗаписью.

    База знаний 1С