Имя: Пароль:
1C
 
Конвертация данных - поиск в регистре сведений при загрузке справочника
0 sereban
 
28.06.11
16:27
Нужна помощь в реализации на компоновке данных следующего механизма: при загрузке данных из одной базы в другую, нужно искать контрагентов не по полям поиска, а по предварительно настроенному регистру сведений, в котором в качестве измерений указаны поля поиска и есть ресурс Ссылка(ссылка на контрагента в приемнике). Регистр сведений находится в приемнике. Новые объекты создавать не нужно, а только смотреть в регистр и если есть ссылка, то подставлять объект по этой ссылке, а если нет то записывать в регистр измерения без ссылки, чтобы потом вручную заполнить регистр.
1 sereban
 
28.06.11
16:31
В обработчике "При загрузке" справочника не доступны свойства, по которым нужно искать в регистре.
2 Andy13
 
28.06.11
16:35
"При загрузке", "После загрузки".
3 Defender aka LINN
 
28.06.11
16:36
(1) Почему?
4 Синий зуб
 
28.06.11
16:36
Может, и не совсем то, но я переносил ссылки на справочники ОС из одной базы в другую по записи в регистре сведений во второй базе. В ПКО ОС в обработчик событий Поля поиска вставил следующий код:
Если СвойстваПоиска.Получить("ЭтоГруппа") Тогда //группу ищем по наименованию
   СтрокаИменСвойствПоиска = "Наименование";
Иначе //простой элемент, ищем по свойству
   
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    ЗначенияСвойствОбъектов.Объект КАК СсылкаНаОС
   |ИЗ
   |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
   |ГДЕ
   |    ЗначенияСвойствОбъектов.Свойство = &Код_8_1
   |    И ЗначенияСвойствОбъектов.Значение = &КодОС";
   
   Запрос.УстановитьПараметр("Код_8_1", ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду("00000000002"));
   Запрос.УстановитьПараметр("КодОС", ПараметрыОбъекта.Получить("МойКод"));
   
   РезЗапроса = Запрос.Выполнить();
   
   Если РезЗапроса.Пустой() Тогда //не нашли, по наименованию
       СтрокаИменСвойствПоиска = "Наименование";
       Сообщить("ОС ищем по наименованию для кода: " + ПараметрыОбъекта.Получить("МойКод"));
   Иначе
       СсылкаНаОбъект = РезЗапроса.Выгрузить()[0].СсылкаНаОС;
       ПрекратитьПоиск = Истина;
   КонецЕсли
   
КонецЕсли;
5 Defender aka LINN
 
28.06.11
16:37
+(3) А, ПриЗагрузке... ПриЗагрузке объект уже найден (или нет). Нужно несколько более иначе другое событие.
6 Andy13
 
28.06.11
16:37
Переписываешь типовой механизм сопоставления по UID? Чем он не угодил?
7 sereban
 
28.06.11
16:49
(5) ПриЗагрузке доступен найденный объект, если указать поля поиска. Но мне не нужно искать по ним.

(4) ПараметрыОбъекта откуда берутся, я в описании обработчика "поля поиска" не нашел такого параметра
8 sereban
 
28.06.11
16:51
(6) При загрузке у меня uid приемника
9 sereban
 
28.06.11
16:53
(6) При загрузке у меня нет uid приемника
10 Andy13
 
28.06.11
16:54
(7) "После загрузки" - Объект создан, но ещё не записан. Или доступен найденный объект.

Проверяешь, если Ссылка = Объект.Ссылка, или ОбъектНайден = Истина, то всё ОК.
Ежели новый хочет создаться, пишешь Отказ = Истина. И юзаешь свой модуль с РС.
11 Синий зуб
 
28.06.11
16:55
(8) Ты эти 2 строчки увидел?
       СсылкаНаОбъект = РезЗапроса.Выгрузить()[0].СсылкаНаОС;
       ПрекратитьПоиск = Истина;
12 Синий зуб
 
28.06.11
16:56
СсылкаНаОбъект - находишь свой объект и усе, поиск прекращается, а где ты его будешь искать - твое личное дело.
13 sereban
 
28.06.11
16:56
(11) Да. С этим понятно.
14 Andy13
 
28.06.11
16:57
Как то всё замудрено получается. Изложи суть, может всё вообще иначе делать надо? Подменять контрагентов?
15 sereban
 
28.06.11
16:57
Вопрос в другом, как получить свойства по которым я буду искать в регистре?
Запрос.УстановитьПараметр("КодОС", ПараметрыОбъекта.Получить("МойКод"));

Что такое параметрыОбъекта? Откуда они берутся?
16 Defender aka LINN
 
28.06.11
16:58
(15) Поставить для них флаг поиска в правилах
17 Синий зуб
 
28.06.11
17:05
(15) В данном случае в ПКС Код ПКО ОсновныеСредства я передавал Код ОС в Параметр МойКод.
18 sereban
 
28.06.11
17:16
Всем БОЛЬШОЕ спасибо!!! Поставил галочки поиска на свойствах по которым буду искать. И теперь могу получить из соответствия СвойстваПоиска. Дальше уже мелочи ))
19 sereban
 
28.06.11
17:18
(17) Синий зуб, я так и не понял насчет ПараметрыОбъекта. В процедуре Поля поиска переменная не определена.
20 Синий зуб
 
28.06.11
17:30
В ПКС ставишь галку Передавать данные в параметр, штатно стоит Передавать данные в приемник. Просто у меня код в источнике был длиннее и обрезался, я передал в параметр.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.