|   |   | 
| 
 | Конвертация данных - поиск по одному справочнику, а результат из другого | ☑ | ||
|---|---|---|---|---|
| 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 | 
        ))     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |