КД Как передать параметр и обработать его в приемнике #512010


#0 by Sиlьver
Всем добрый день. С КД раньше никогда не работал, но судьба заставила. Нужно выгружать документ с номенклатурой в табличной части (Базы 8-8). Нужно, чтобы в приемник попал реквизит Номенклатуры-источника, где в свою очередь из регистра сведений будет найдена соответствующая номенклатура. Подскажите, как это сделать?
#1 by Aleksey_3
Через поля поиска
#2 by Aleksey_3
Источник реквизит IDD, строка 17 - уникальный идентификатор В приемнике храниться в РС соответствие IDD - элементу номенклатуры Загоняю IDD в комментарий, ставлю поиск по этому реквизиту Далее в поле поисках Если НомерВариантаПоиска=1 тогда
#3 by Sиlьver
В полях поиска отключил все, кроме нужного мне реквизита. В событии ПКО "Поля поиска" написал запрос: В итоге при загрузке ошибка: Поле объекта не обнаружено. ID_AVARDA - это поле поиска (реквизит Номенклатуры-источника) Как прочитать это поле? И правильно ли я определяю номенклатуру как СсылкаНаОбъект?
#4 by Aleksey_3
У реквизита "ID_AVARDA" должна стоять галка "Поиск"
#5 by Sиlьver
Ошибка в обработчике события ПоследовательностьПолейПоиска ОписаниеОшибки         =  Ошибка компиляции при вычислении выражения или выполнении фрагмента кода это какой-то внутренний обработчик? я его даже не нашел...
#6 by Aleksey_3
Где то ошибка в коде вот и ругается
#7 by Sиlьver
ошибку нашел, но пока результата не добился. Подскажите, в ПКС все должно быть по умолчанию?
#8 by Aleksey_3
ПКС чего? Главное в приемнике должен быть реквизит ID_AVARDA
#9 by Aleksey_3
А так сохраняй текст и в отладчик
#10 by Sиlьver
Мне нужно выгружать документ и попутно номенклатуру недостающую. Сейчас я настраивал ПКО не для документа, а для Номенклатуры. ПКО и ПКС документа нужно трогать? в приемнике такого реквизита нет. фокус теперь не получится? может можно как-то в параметр поместить ID_AVARDA?
#11 by Aleksey_3
Передавай через другой реквизит, например комментарий. А в приемники "откусишь" лишнее см ИДД=Лев(СвойстваПоиска.Получить("Комментарий"),17);
#12 by Andy13
А что мешает передать этот IDD в параметр? И в обработчике "ПриЗагрузке" этот параметр обработать?
#13 by Aleksey_3
Потому что "Поля поиска" вызываются раньше чем ПриЗагрузке
#14 by Andy13
Хм. Не уверен. "ПередЗагрузкой" можно использовать. Насколько я понимаю, имеется реквизит отсутствующий в приемнике. Надо его передать. Передаем через параметр. Далее... Номенклатура в источнике не соответствует номенклатуре в приемнике при использовании для поиска их общих реквизитов. Связь - через регистр сведений в приемнике. Поле поиска в регистре - реквизит IDD номенклатуры в источнике. Стало быть, всё что надо передать - IDD. Остальные реквизиты нафик не упали. Передаем через параметр, при обработке в приемнике ловим параметр с IDD, находим соответствие через регистр сведений и подставляем то что надо. Я так полагаю. И терзать поля поиска совсем ни к чему.
#15 by Aleksey_3
А для чего они еще нужны?
#16 by Andy13
Поля поиска используются при выгрузке. При загрузке не используются. Потому и недоступны.
#17 by Aleksey_3
Здрасте приехади
#18 by Aleksey_3
Поля поиска Условия возникновения события Только для платформы V8. Событие выполняется при поиске элемента ссылочного типа. Если установлен поиск по уникальнму идентификатору и программа нашла элемент, то поиск прекращается. Если поиск по уникальному идентификатору не дал положительного результата и указано, что нужно продолжить поиск в этом случае или поиск по уникальному идентификатору не проводился, то программа пытается найти элементы по свойствам поиска. В обработчике нужно установить список полей через запятую по которым нужно проводить поиск. Если очередная попытка дала положительный результат, то поиск прекращается. Поиск возможен только по тем полям у которых на этапе выгрузка был установлен флаг поиска данных!!!
#19 by Sиlьver
если объясните, как "увидеть" переданный параметр на стороне приемника буду весьма признателен. По полям поиска в итоговый объект номенклатура почему-то не попадает. Сейчас разбираюсь.
#20 by Aleksey_3
Выложи на файлообменик правило
#21 by Andy13
Ах, вот ничего не стоит на месте... Искомое поле поиска в любом случае отсутствует в приемнике. Связь источника с приемником не может быть описана впрямую. Надо обрабатывать передаваемое значение в приемнике. А именно в обработчике "ПриЗагрузке". Если IDD запихали в комментарий, то можно и добыть его оттуда же. И далее через регистр сведений найти то что нужно и подставить.
#22 by Aleksey_3
Ну так в как раз и описана эта процедура. И она спокойно обрабатывается в обработчики "поля поиска"
#23 by Andy13
+ Или "ПослеЗагрузки"? Вот под рукой КД нет, точно не помню.
#24 by Aleksey_3
Поле загрузки объект уже найден и инициализирован. Нужно как раз до загрузки
#25 by Andy13
"ПослеЗагрузки" - найден или заполнен переданными данными, но ещё не записан. Точно, там и нужно. Просто и тупо читаем реквизит "комментарий". Ну и дальше ищем по нему что надо, подменяем.
#26 by Aleksey_3
Напрямую параметр только глобальный можешь передать. А так самому дописывать в файл и читать. Пример есть в книжке см перенос периодических реквизитов Что ты уперся в после загрузке?. Т.е. система нашла элемент и заполнела его. Дальше что? Ты предлагаешь искать новый элемент и в ручную заполнять все реквизиты?? Не проще ли сразу подсунуть нужный элемент и пусть система заполняет его?
#27 by Andy13
Не. Просто ссылку подставить.
#28 by Aleksey_3
Куда? Если уже все реквизиты заполнены?
#29 by Aleksey_3
Выгружаем номенклатуру. В твоем программа не нашла элемент и создала, заполнила но не записала новый элемент. После этого ты предлагаешь начать искать в РС запись о нашей номенклатуре. Допустим нашли. И? У номенклатуры изменились реквизиты (например точку в наименовании поставили). Твои действия? Тебе нужно сравнить все реквизиты, обновить их, а уж потом "Просто ссылку подставить"
#30 by Andy13
Ну есть там такая переменная - "Объект". Просто заменяешь её значение и всё. Ну это как и "Значение" при выгрузке.
#31 by Aleksey_3
И что? Если после загрузки я поменяю этот реквизит, он мне чудным образом обновить все реквизиты этого объекта?
#32 by Aleksey_3
Я не спрашиваю как заменить объект. Я спрашиваю, как в твоем случае, произойдет "обновление" реквизитов объекта. После загрузки Условия возникновения события Только для платформы V8. Событие выполняется после прочтения и установки атрабутов объекта из файла, но до его записи в информационную базу. Возможна модификация загруженного объекта.
#33 by Andy13
Такой вариант иначе решается. Пока что вопрос стоял о связи через РС в приемнике.
#34 by Aleksey_3
И как иначе? В данном случае нужно перенести элемент справочника из Базы А в базу Б, причем связь не прямая, а через РС
#35 by Andy13
А это надо? Спросим у автора? Где он кстати?
#36 by Sиlьver
я тут, бухи дергали по отчетности... саму номенклатуру изменять не нужно. нужно только выбрать то, что нужно. Загрузка номенклатуры ведется из другой системы.
#37 by Andy13
Вот и ответ. Используй "ПослеЗагрузки".
#38 by Sиlьver
правила
#39 by Sиlьver
Разобрался. Всем огромное спасибо за помощь!
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

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