Ошибка при проведении документа приводит к его удалению из базы
1с УПП, платформа 8.2.15.294
Клиент-сервер.
Есть документ внутренний заказ, при его проведении должен создаваться заказ поставщику.
АвтоматическоеФормированиеЗаказа - это процедура общего модуля(серверный, разрешен вызов сервера);
Так вот всё вроде бы хорошо работает, но есть одно но.
ДокОбъект(документ заказа поставщику) записывается в базу(ссылка на документ есть, в базе он тоже есть), после чего пытается провестись, но не может (специально не заполнил договор), вываливается ошибка и, о чудо, записаный ранее заказ просто удаляется из базы, его нет.
Во время отладки, при попытке посмотреть в исключении что стало с докОбъект или внутреннийЗаказ, конфигуратор виснет наглухо.
Куда копать?
Клиент-сервер.
Есть документ внутренний заказ, при его проведении должен создаваться заказ поставщику.
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Если Статус <> Перечисления.т_СтатусыВнутреннихЗаказов.ОтправленПоставщику Тогда
Если УргентноБул Тогда
СоздатьЗаказПоставщику();
ИначеЕсли ЗаказАвтоматом тогда
СоздатьЗаказПоставщику();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Показать
Процедура создатьЗаказПоставщику()
МассивЗаявок = Новый Массив;
МассивЗаявок.Добавить(Ссылка);
процедуры.АвтоматическоеФормированиеЗаказа(МассивЗаявок, ДокументОснование.Дата);
КонецПроцедуры
АвтоматическоеФормированиеЗаказа - это процедура общего модуля(серверный, разрешен вызов сервера);
Процедура АвтоматическоеФормированиеЗаказа(ДокСсылка_Массив, ДатаФормирования) Экспорт
ЛогФайл = ИнициализироватьЛогФайл("Автоматическое создание заказа по цитовке");
ДатаЗапуска = ДатаФормирования;
НомерЗаписиСообщения=1;
Для каждого строка Из ДокСсылка_Массив Цикл
ЗаказНовый = СоздатьЗаказПоставщику(строка.Ссылка,ЛогФайл,НомерЗаписиСообщения);
//Далее идет работа с регистрами и отправка на поставщика
КонецЦикла;
КонецПроцедуры
Показатьфункция СоздатьЗаказПоставщику(ВнутреннийЗаказ,ЛогФайл,НомерЗаписиСообщения)Экспорт
ДокОбъект = Документы.ЗаказПоставщику.СоздатьДокумент();
//Далее происходит заполенение
ВнутреннийЗаказОбъект = ВнутреннийЗаказ.ссылка.ПолучитьОбъект();
ВнутреннийЗаказОбъект.Статус = Перечисления.т_СтатусыВнутреннихЗаказов.ОтправленПоставщику;
Попытка
ВнутреннийЗаказОбъект.Записать(РежимЗаписиДокумента.Запись);
Исключение
сообщить("Провал"+описаниеОшибки());
КонецПопытки;
Если ДокОбъект.Товары.Количество() > 0 Тогда
Попытка
ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
исключение
КонецПопытки
КонецЕсли;
Если НЕ ДокОбъект.ЭтоНовый() Тогда
Попытка
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
//Сообщить("Документ Заказ поставщику проведён");
Исключение
СтрокаПриращения = "Процедура ""Формирование заказов поставщикам"" не удалось провести заказ поставщику по аптеке: " + Строка(ВнутреннийЗаказ.Склад);
НомерЗаписиСообщения = НомерЗаписиСообщения + 1;
ДобавитьСтрокуВЛогФайл(ЛогФайл, СтрокаПриращения, НомерЗаписиСообщения);
КонецПопытки;
КонецЕсли;
Возврат ДокОбъект;
КонецФункции
ПоказатьТак вот всё вроде бы хорошо работает, но есть одно но.
ДокОбъект(документ заказа поставщику) записывается в базу(ссылка на документ есть, в базе он тоже есть), после чего пытается провестись, но не может (специально не заполнил договор), вываливается ошибка и, о чудо, записаный ранее заказ просто удаляется из базы, его нет.
Во время отладки, при попытке посмотреть в исключении что стало с докОбъект или внутреннийЗаказ, конфигуратор виснет наглухо.
Куда копать?
По теме из базы знаний
- Проведение/снятие с проведения документов/очистки движений не проведенных, перезаписи ссылочных объектов с отборами для баз 1С 8.1-8.3 УТ 10.3/11, БП 2/3, КА 1.1/2, УНФ 1.6, ЗУП 3
- Спасаем документ, запись которого невозможна. Или как скопировать документ, имея только его открытую форму (для обычных и управляемых форм)
- Перенос данных из УПП 1.3 в ERP 2 / УТ 11 / КА 2. Переносятся документы, справочная информация и остатки
- Перенос данных из ERP 2/ КА 2 / УТ 11 в УПП 1.3 / КА 1.1 / УТ 10.3. Переносятся все возможные документы и справочники
- Интеграция 1С 8.3 с Power BI (Генератор представлений (View) в MS SQL/PostgreSQL по структуре базы данных 1С 8.3)
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(14) да ладно, быть не может
если вот здест падает:
то в этом исключении прописать ДокОбъект.Записать(РежимЗаписиДокумента.Запись)
если же именно при записи падает, тогда хуже, придумывай как постфактум обрабатывать, тут уж тебе виднее как лучше и правильнее сделать, я полного процесса не знаю
если вот здест падает:
Если НЕ ДокОбъект.ЭтоНовый() Тогда
Попытка
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
//Сообщить("Документ Заказ поставщику проведён");
Исключение
СтрокаПриращения = "Процедура ""Формирование заказов поставщикам"" не удалось провести заказ поставщику по аптеке: " + Строка(ВнутреннийЗаказ.Склад);
НомерЗаписиСообщения = НомерЗаписиСообщения + 1;
ДобавитьСтрокуВЛогФайл(ЛогФайл, СтрокаПриращения, НомерЗаписиСообщения);
КонецПопытки;
Показатьто в этом исключении прописать ДокОбъект.Записать(РежимЗаписиДокумента.Запись)
если же именно при записи падает, тогда хуже, придумывай как постфактум обрабатывать, тут уж тебе виднее как лучше и правильнее сделать, я полного процесса не знаю
Тоже строил такие конструкции, например 1 документ управляет 3-6 доками и при проведении их создаёт по различным критериям(если нужно черкани в ПМ кину код, тут очень много будет выкладывать), а так же зависимые документы вместе с основным проводятся, помечается на удаление и т.д. Попытка сделать запись документов в Обработке проведения закончится неудачей, т.к. получится Транзакция в транзакции. Перенеси код в ПередЗаписью и если новый Объект сначала записывай его и всё заработает (ну в теории по крайней мере, написанный код не разглядывал)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот