ЭтотОбъект не найден при программном создании документа #789303


#0 by Marksman1C
Здравствуйте! 1С:Предприятие 8.3 (8.3.9.2033) УТ 10.3 Есть задача. При проведении документа Реализация должен создаваться документ Перемещения и каждую номенклатуру, при нехватке, перекидывать на соответствующий склад, если есть что перекидывать. Соответственно, в процедуру "ПередЗаписью" Реализации добавляю Процедуру Перемещения, которая получает а) Ссылку, на только что созданный и записанный документ Перемещения, либо ссылку на уже существующий документ, если таковой уже был создан. б) ТаблицуПеремещений, в которой хранится инфа по номенклатурам и по количеству сколько перемещать. В Процедуре Перемещения делается: Что происходит. Юзер заводит реализацию, для простоты, с одной номенклатурой. Остаток по Складу, указанному в реализации - 2 штуки. Дополнительно на другом складе еще 1 штука этой же номенклатуры. Юзер пишет в строке в столбце количество - 3 штуки. Нажимает "Провести". Создается документ Перемещения, открывается (документ на этот момент почему-то даже не записан и ошибок не показывает). Потом выскакивает ошибка, что Проведение Реализации невозможно, т.к. отгружаемое количество больше, чем остаток. Естественно.  Далее нажимаем Ок и пытаемся провести только что созданный документ Перемещения, но он не проводится. Потратив 4 часа понял, что проблема в том, что документ Перемещения не знает что такое "ЭтотОбъект". Если написать Сообщить(ЭтотОбъект); "ПередЗаписью" в документе Перемещения, то выводится сообщение "<Объект не найден> (188:b605000c2935c4c911e6dd91fa512026)". Если документ Перемещения создать с нуля руками, то все хорошо проводится. Соответственно, по логике, моя проблема в том, что я неправильно создаю документ? Подскажите, плиз, почему теряется "ЭтотОбъект"?
#1 by shuhard
[ПолучитьОбъект] что это ?
#2 by FIXXXL
потому что ПередЗаписью ты реализацию то запиши, а потом на нее ссылки раздавай
#3 by RomanYS
Откат транзакции, твоего перемещения уже нет в базе. Только открытая форма.
#4 by Mort
Не нужно в модуле объекта эти извращения делать. Ввод перемещения сразу после проведения имеет право на жизнь, но только как способ сократить действия пользователя после записи реализации - не нажимать на кнопки создания и т.д. Т.е. это сугубо интерфейсная фишка и размещаться должна в модуле формы в "после записи".
#5 by singlych
Угу. Кто-нить потом решит обработкой реализации за месяц перепровести и получит сто тыщ миллионов открытых форм перемещений.
#6 by Marksman1C
Ну, СсылкаНаДокументПеремещения - это ссылка, соответственно, чтобы работать с реквизитами документа по ссылке я получаю объект.. Приходится делать именно ПередЗаписью, потому что код зависит от "РежимЗаписиДокумента". Кроме того, речь идет о ссылке на документ Перемещения. Но в любом случае спасибо за ответ. Спасибо, пошел гуглить "Откат транзакции". ПослеЗаписи не получится, потому что если отгружаемое Количество больше Остатка по складу, то документ Реализации просто не проведется. Т.е. Перемещение должно быть создано ДО проведения реализации... Либо вносить изменения в обработку проведения. ... в принципе, да, вариант Сделана поправка, что если документ уже проведен, то процедура Перемещение не запустится. Юзеры предупреждены. Хотели, чтобы созданное Перемещение проводилось исключительно руками по факту перемещения товара со склада на склад.
#7 by Serg_1960
Конфигурация не озвучена. В моей конфигурации, например, склад указывается в табличной части - одним документом можно оформить реализацию с нескольких складов без необходимости оформления перемещения.
#8 by Serg_1960
Тьфу, sorry, был не прав - конфигурация озвучена была (ушёл, посыпав пеплом голову)
#9 by Marksman1C
Есть склад в табличной части, но нет ведь, юзерские хотелки такой расклад не устраивает. Хотят перемещение. Чуть-чуть передалал процедуру. Закомментировал строку открытия формы. Просто при проведении реализации программно создаю документ Перемещения и записываю. Ошибок 1С не выдает. Но и документ Перемещения в базе не появляется. У кого-нибудь есть идеи почему? Теперь уже даже не понятно в какую сторону копать. Процедура Перемещения(СсылкаНаДокументПеремещения, ТаблицаПеремещений) До вызова процедуры код элементарный и очевидный:
#10 by Serg_1960
Создавать и проводить документ, во время проведения другого документа - это... эээ... "Я думал-думал, я все понял! Оказывается, это неправильные пчелы. Совсем неправильные. И они, наверное, делают неправильный мед"(Винни-Пух)
#11 by Marksman1C
Ну, может и неправильный, а как же тогда быть? Создавать перемещение после проведения Реализации? Тогда нужно в обработке проведения реализации разрешать отгрузку товара в большем количестве, чем он там есть. А это неправильно.
#12 by Jonny_Khomich
Работайте через заказ. Создали заказ, посмотрели чего нет, сделали перемещение задним числом, зарезервировали товар и реализация.
#13 by Serg_1960
Брось кнопку на форму реализации для создания перемещения и пусть юзвера сами решают твою тему :)
#14 by Serg_1960
+ Назови кнопку, например, как "Оформить документы" и пусть она: - создаёт перемещения (может быть одно или несколько) по не проведённой реализации; - проводит перемещения; - проводит саму реализацию; - выводит отчет по проделанной работе.
#15 by Marksman1C
Спасибо!
#16 by Marksman1C
Правильно заметил singlych. Для истории решение: ПередЗаписью может быть как в модуле объекта, так и в модуле формы. Как только перенес свой код в модуль ФОРМЫ все заработало! Спасибо всем участникам!
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С