База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как исправить ошибку «Попытка использования закрытого менеджера временных таблиц › Ответ в теме: Как исправить ошибку «Попытка использования закрытого менеджера временных таблиц
Сергей, ошибка «Попытка использования закрытого менеджера временных таблиц» при вызове ДокументОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения) в модуле регистра накопления «ТоварыКОтгрузке» обычно связана с тем, что в момент записи документа менеджер временных таблиц, который используется для записи движений регистра, уже закрыт или недоступен.
В 1С при проведении документов с движениями по регистрам накопления часто используется менеджер временных таблиц (МенеджерВременныхТаблиц), который создаётся в рамках транзакции проведения документа. Если в процессе проведения или отмены проведения происходит вызов записи документа с режимом ОтменаПроведения вне контекста активного менеджера временных таблиц, то возникает эта ошибка.
Основные причины и решения:
1. **Неправильное использование записи документа с режимом ОтменаПроведения вне процедуры проведения**
— Вызов ДокументОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения) должен происходить только в рамках процедуры проведения документа, где менеджер временных таблиц активен.
— Если вы вызываете запись документа с таким режимом в обработчике ПередЗаписью или в другом месте вне процедуры проведения, менеджер временных таблиц может быть уже закрыт.
2. **Рекурсивный вызов записи документа**
— Если в обработчике ПередЗаписью вы вызываете ДокументОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения), то это может привести к рекурсивному вызову процедуры ПередЗаписью, что не допускается и приводит к ошибкам.
— Нужно избегать вызова записи документа с режимом отмены проведения в обработчиках, которые вызываются при записи документа.
3. **Правильное использование менеджера временных таблиц**
— Если в вашем коде используется МенеджерВременныхТаблиц, то он должен быть создан и передан в процедуры проведения и отмены проведения.
— В типовых конфигурациях менеджер временных таблиц создаётся автоматически при вызове Провести() или ОтменитьПроведение().
— Если вы вручную вызываете запись с режимом отмены проведения, убедитесь, что менеджер временных таблиц передан и открыт.
4. **Рекомендации по исправлению**
— Не вызывайте ДокументОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения) в обработчике ПередЗаписью.
— Если нужно отменить проведение документа, делайте это в отдельной процедуре, например, в обработчике проведения или в пользовательской обработке, где менеджер временных таблиц гарантированно открыт.
— Используйте стандартные методы ДокументОбъект.ОтменитьПроведение() или ДокументОбъект.ОтменитьПроведение(МенеджерВременныхТаблиц).
— Если вы пишете собственную процедуру проведения, создайте менеджер временных таблиц через Новый МенеджерВременныхТаблиц() и передавайте его в методы записи движений и отмены проведения.
5. **Пример правильного использования отмены проведения с менеджером временных таблиц**
|
1 2 3 4 5 |
Процедура ОтменитьПроведениеДокумента(ДокументОбъект) МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; ДокументОбъект.ОтменитьПроведение(МенеджерВременныхТаблиц); ДокументОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения); КонецПроцедуры |
6. **Если ошибка возникает в типовой конфигурации**
— Возможно, в вашем коде или расширении есть доработка, которая вызывает запись документа с режимом отмены проведения в неподходящем месте.
— Проверьте, нет ли вызовов записи документа с таким режимом в обработчиках ПередЗаписью, ПередПроведением и т.п.
— Перепишите логику так, чтобы отмена проведения происходила в процедуре проведения или в отдельной пользовательской обработке.
—
Итого: ошибка возникает из-за вызова записи документа с режимом отмены проведения вне контекста активного менеджера временных таблиц. Нужно перенести вызов отмены проведения в процедуру, где менеджер временных таблиц создаётся и открыт, и не делать этого в обработчике ПередЗаписью.