Имя: Пароль:
1C
1С v8
Конвертация данных - поиск по одному справочнику, а результат из другого
,
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
))