v7: Вызов метода Провести() в модуле документа не из процедуры ОбработкаПроведе #298344


#0 by Одлопез
Столкнулся с задачей, которая требует при проведении определенного типа документов формировать подчиненные и проводить их. Как известно, из процедуры ОбработкаПроведения методы Провести и СделатьНеПроведенным для объектов типа "Документ" вызывать нельзя. Попытался создать другую процедуру вне процедуры ОбработкаПроведения, в которой создаются и проводятся необходимые документы. Первое впечатление: все прекрасно работает. Сталкивался ли кто-нибудь из программистов с подобным решением указанной проблемы? Есть ли в нем какие-то подводные камни?
#1 by FreeFin
"Как известно, из процедуры ОбработкаПроведения методы Провести и СделатьНеПроведенным для объектов типа "Документ" вызывать нельзя." Кому известно, что нельзя? Мне нет. Один из вариантов: А в остальном.. флаг проведенности, если Проведен=1 и тдитп. Камней нет, есть логика.
#2 by Джинн
В подавляющем большинстве случаев нет никакой необходимости в таких "связках" документов. С вероятностью близкой к единице это неправильное понимание процесса со стороны программиста или ошибки проектирования. За очень редким исключениею. Мне известно. Если документы оперируют одным набором данных, то можно поиметь конкретный геморрой. Особенно конкретный при работе с ОУ.
#3 by FreeFin
Для общего развития. А что такое "ОУ"?
#4 by Одлопез
Неплохой пример. Мое решение в сабже тем меня и удивило, что оно намного проще, чем встречающиеся мною на просторах интернета. Согласитесь, открывать форму вновь созданного документа, передавая при этом некий параметр, а в самом документе в процедуре ПриОткрытии проверять этот параметр и вызывать или не вызывать метод Провести - это немного более длинный путь, чем просто написать Док.Провести. Кроме того с помощью указанного примера проблематично будет реализовать отмену проведения документа. Критика принята. В общем случае сам так считаю. В данном же случае в правильности логики решения я уверен, а вот по поводу технической реализации не могли бы Вы высказать свое мнение. На просторах интернета мне встречались только варианты типа , и меня немного смущает простота моего решения :(
#5 by Одлопез
Больше всего подходит по смыслу "Оперативный учет".
#6 by Одлопез
Тьху, в ответ не на , а на :)
#7 by FreeFin
Тебя что, типа похвалить надо? Смущенный наш ))) Токо зачто? Ну ладно = молодец! Работает = запускай в эксплуатэйшн и собирай/исправляй баги (и под запись). Отладишь-сдашь-деньги получишь=все не пропей, потому забудешь как сделал.))) Кста Джинн отчасти прав, если тупо пытаться засунуть в кунить типовую подобные финты, то да ГП, ТА, остатки, партии = йо. но эт если все заранее хорошо не продумать.
#8 by Cthulhu
проведение является транзакцией, проведение из проведения будет вложенной транзакцией. Вложенные транзакции 1с не поддерживаются - сиречь при использовании оных 1с за прогнозируемый результат не отвечает. Можешь получить непроведенный документ, который тем не менее имеет движения (например).
#9 by Одлопез
За похвалу спасибо. Главный вопрос который я хотел решить, почему на просторах интернета до сих пор нет такого решения? Только велосипеды типа Может мой механизм содержит подводные камни из-за которых от такой реализации все отказываются?
#10 by FreeFin
Утверждение не бесспорно. Ибо опыт говорит об обратном. Вот уже лет пять как "закрываю периоды" обработищей, начинающейся "НачатьТранзакцию" и через отмены проведения, удаление, изменение дат, создание и проведение новых доков, поэтапно, катится до "Зафиксировать... Сбои, "вылеты" 1С, принудительное прерывание снятием процесса = все было. Но никогда и никаких изменений по абсолютно всем "вложениям", незавершенной (первой вызванной) транзакции в БД не было. это факт, прочем радующий. А вот "повторные" транзакции, оч точно описанные здесь (откуда выдрано?): =это болячка. Какой механизм, ты его хоть вкратце опиши.)
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям