Сообщение от
Predatore
В том то и засада, что транзакция не отменится, если быть ещё точнее, то если начать транзакцию до запуска кодеюнита, то в случае вызова ERROR выскочит ошибка выполнения (во время транзакции нельзя использовать CU.RUN с возвращаемым значением отличным от Ok). Т.е. надо попробовать переписать код так, что бы транзакция стартовала в случае удачного выполнения кодеюнита (IF CU50xx.RUN THEN). Это было бы не проблемой, если бы проверка была всего одна. Но если у меня десятки проверок, причём вложенных... тут я уже даже боюсь браться за подобную реализацию, лучше уж через файлы...
Пока писал, придумал что можно сделать. Фактически это вариация на тему того, что предложил InTacto. Пока разбираем входящие данные, пишем всё во временные таблицы (кроме Лога). При этом после каждой записи в Лог (или перед потенциальными вызовами ERROR) делаем COMMIT. Ну и в самом конце, сливаем данные из временных таблиц в обычные. В итоге у нас и ERROR нормально отработает и Лог запишется и данные никуда не попадут, если встретится хотя бы один ERROR.