|
Конвертация данных - поиск по одному справочнику, а результат из другого | ☑ | ||
---|---|---|---|---|
0
Rishka
17.12.14
✎
08:42
|
Добрый день!
Если уже обсуждалось, прошу не кидать камнями... Есть источник - в нем справочник Номенклатура. В приемнике есть 3 справочника: Номенклатура и 2 специально созданных для установки соответствия Номенклатуры источника и приемника - НоменклатураУТ и СоответствиеНоменклатур. Эти справочники нужны, т.к. невозможна прямая конвертация номенклатуры из источника в приемник, т.к. нет алгоритма для поиска. Синхронизация справочников номенклатуры происходит так. Есть правила выгрузки, по которым выгружается весь справочник Номенклатура источника в справочник НоменклатураУТ - поиск по УИ. Параллельно создаются элементы, которым нужно задавать соответствие в справочник СоответствиеНоменклатуры, структура которого такая: Код, Наименование, НоменклатураИсточник (тип спр.НоменклатураУТ), НоменклатураПриемник (тип.Номенклатура). После загрузки справочников НоменклатураУТ и СоответствиеНоменклатур, в приемнике пользователь вручную задает значение НоменклатураПриемник в спр.СоответствиеНоменклатур. Теперь необходимо конвертировать документ, в котором в ТЧ есть Номенклатура. Соответственно нельзя искать ее напрямую в спр.Номенклатура в приемнике, а нужно найти в спр.СоответствиеНоменклатур по реквизиту НоменклатураИсточник соответствующий НоменклатураПриемник и его подставить в ТЧ документа приемника. Как описать правило для Номенклатуры документа, не могу сообразить никак... |
|||
1
Alex S D
17.12.14
✎
09:27
|
ПоляПоиска
А зачем мудрить со справочниками? Не проще было сделать регистр сведений? |
|||
2
JeyRico
17.12.14
✎
09:34
|
Если я правильно понял задачу, то нужно делать для документа служебное правило конв. Номенклатуры, при загрузке запросом дергать нужное соответсвие из базы приемника и записывать в объект-приемник.
P.s. Способ не оптимальный, но это форум. |
|||
3
JeyRico
17.12.14
✎
09:37
|
Да, поскольку поле составного типа, то будет скорее всего еще и тип указывать
|
|||
4
бомболюк
17.12.14
✎
09:38
|
(0) вот завел бы ты таблицу соответствия не в приемнике а в источнике у тебя бы даже никаких сложностей и вопросов не возникло ;-)
|
|||
5
Йохохо
17.12.14
✎
09:39
|
"Способ не оптимальный, но это форум." в мемориз
|
|||
6
JeyRico
17.12.14
✎
09:47
|
(5) Описание оптимального решения не до конца понятой задачи - это сродни показаний Нострадамуса. Пусть сначала заработает.
|
|||
7
azt-yur
17.12.14
✎
09:49
|
(2) а мне кажется вполне оптимальный при данных условиях.
Только ему записывать в объекте приемнике номенклатуру не надо я так понял. Для служебного правила конв. Номенклатуры установить галку "Не создавать новый объект...". В обработчике ПоляПоиска этого правила "дергать нужное соответсвие из базы приемника" и устанавливать параметр СсылкаНаОбъект в найденную номенклатуру. Ну и в поля поиска по данному правилу передавать уникальный идентификатор к примеру и по нему искать соответствие |
|||
8
Йохохо
17.12.14
✎
09:52
|
(6) так (1) прекрасно заработает, но, конечно, это же форум
|
|||
9
Rishka
17.12.14
✎
14:28
|
(7) Я как раз так пыталась сделать. Написала в ПКО Номенклатура-Номенклатура в обработчик ПоляПоиска такой код:
л_ГУИД = СвойстваПоиска["УникальныйИдентификатор"]; сообщить ("Свойство поиска " + л_ГУИД); Запросы.НоменклатураПоиск.УстановитьПараметр("НоменклатураУТ", л_ГУИД); ВыборкаНом = Запросы.НоменклатураПоиск.Выполнить().Выгрузить(); Если ВыборкаНом.Количество() <> 0 ТОгда СсылкаНаОбъект = ВыборкаНом[0].НоменклатураБП; Сообщить("Ссылка на найденный" + СсылкаНаОбъект); //Объект = СсылкаБП.ПолучитьОбъект(); //ОбъектНайден = Истина; КОнецЕсли; ПрекратитьПоиск = Истина; В результате л_ГУИД не определяется и соответсвенно в документе пустые ссылки.. |
|||
10
Rishka
17.12.14
✎
14:32
|
В запросе получаю нужную номенклатуру из спр.СоответствиеНоменклатур.
|
|||
11
Rishka
17.12.14
✎
14:32
|
(2) Да вроде бы правильно понял. (3) Тип не составной, с чего взял?
|
|||
12
qwerty
17.12.14
✎
14:33
|
В ПКС документа для номенклатуры укажи правило НоменклатураУТ. После загрузки документа заменяй номенклатуру на нужную.
|
|||
13
qwerty
17.12.14
✎
14:42
|
Да, и чтобы каждый раз не дергать базу поиском соответствия, пиши это соответствие в "Соответствие". Вот такой каламбур
|
|||
14
Rishka
17.12.14
✎
14:46
|
(12) Каким образом я после загрузки пойму на какую номенклатуру менять? Правило НоменклатураУТ содержит источник - номенклатура, а приемник НоменклатураУТ. А в документе у меня в приемнике тип Номенклатура, а не НоменклатураУТ.
|
|||
15
Alex S D
17.12.14
✎
14:48
|
(9) я уид через ПараметрыОбъекта передавал
|
|||
16
qwerty
17.12.14
✎
14:51
|
(14) Понял, тогда я за вариант (15)
|
|||
17
Rishka
17.12.14
✎
14:54
|
(15) Я только начинаю с конвертацией работать и вот эти параметры никак не пойму. От куда и куда они передаются? Я так поняла что это произвольная структура, которую можно самостоятельно описать и передать, а вот где это сделать? Подскажите плиз
|
|||
18
Rishka
17.12.14
✎
14:55
|
В данном случае для УИДа имею в виду.
|
|||
19
Alex S D
17.12.14
✎
14:57
|
добавляется новое ПКС с галкой "Передавать в параметр"
в обработчике ПриВыгрузке Значение = ТвойУИД Затем в Полях поиска можно обращаться через ПараметрыОбъекта["ТвойПараметр"] |
|||
20
Alex S D
17.12.14
✎
14:58
|
*ПередВыгрузкой
|
|||
21
Rishka
17.12.14
✎
15:01
|
(19) А ТвойУИД определять как обычно в коде 1с? Ну с поправкой на скд будет выглядеть так: Значение = Источник.УникальныйИдентификатор() ?
|
|||
22
Rishka
17.12.14
✎
15:03
|
скд = конвертация, заговорилась
|
|||
23
Alex S D
17.12.14
✎
15:04
|
Да
|
|||
24
Rishka
17.12.14
✎
15:11
|
"Получения элемента по индексу для значения не определено" - спотыкается в полях поиска на самой первой строчке:
л_ГУИД = ПараметрыОбъекта["УникальныйИдентификаторУТ"]; |
|||
25
Alex S D
17.12.14
✎
15:14
|
УИД при выгрузке к строке приведи
|
|||
26
Rishka
17.12.14
✎
15:14
|
Это при загрузке ругается, а при выгрузке УИД заполняется нормально.
|
|||
27
Rishka
17.12.14
✎
15:16
|
(25) та же ошибка...
|
|||
28
Alex S D
17.12.14
✎
15:20
|
Передавать данные в параметр стоит галка? Параметр так называется?
|
|||
29
Rishka
17.12.14
✎
15:22
|
Да галка стояла, а не стояла галка "Поиск". Прочитала в описании обработчиков ПоляПоиска, что ПараметрыОбъекта тут содержит только те параметры, которые учасвтвуют в поиске...
|
|||
30
Alex S D
17.12.14
✎
15:23
|
да точно. забыл
|
|||
31
Rishka
17.12.14
✎
15:24
|
Спасибо большое! Хотя бы теперь УИД не пустой..
|
|||
32
Rishka
17.12.14
✎
15:26
|
А получается для передачи в запрос в качестве параметра НоменклатураИсточника, нужно УИД обратно переделать из строки?
|
|||
33
Rishka
17.12.14
✎
15:26
|
или как именно его в запрос передавать?
|
|||
34
Alex S D
17.12.14
✎
15:27
|
Не за что..Н
у там же поиск по номенклатуре? получить номенклатуру по УИДУ и передать ее в запрос наверное.. |
|||
35
бомболюк
17.12.14
✎
15:28
|
Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(ТвояСтрокаГУИД));
|
|||
36
Rishka
17.12.14
✎
15:29
|
(34)(35) - точно! Спасибо!!!
|
|||
37
Rishka
17.12.14
✎
15:31
|
Ой как круто!!!! Заработало все!!!! :DDD
|
|||
38
Alex S D
17.12.14
✎
15:32
|
))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |