Имя: Пароль:
1C
1С v8
Конвертация данных
0 RacoT
 
01.11.11
12:52
Добрый день, существует задача, в конвертации данных, при загрузке в базу приемник, нужно искать контрагента, искать его нужно, сперва по ИНН+КПП, потом если не найден, только по инн, если не найдет и в этом случае, то по полному наименованию.
Может кто то помочь с фрагментом кода, как это должно выглядеть, не могу найти как проверить найден ли объект после поиска.
1 DrShad
 
01.11.11
12:54
справку по обработчикам украли?
2 RacoT
 
01.11.11
12:55
Ну видимо да(
3 RacoT
 
01.11.11
13:17
Господа, если можно, дайте пример на который я смогу ориентироваться
4 Baker_it
 
01.11.11
13:20
Для правила конвертации объектов создаешь функцию-обработчик "ПриЗагрузке".

Обработчики "Правила конвертации объектов"
При загрузке
Условия возникновения события
Только для платформы V8.
Событие выполняется после попытки идентификации. В случае успешной синхронизации доступен найденный объект. В противном случае его значение Неопределено. Можно произвести произвольную инициализацию, заполняемого данными объекта.

Параметры:
ОбъектНайден - Булево. Если значение параметра равно Ложь, то объект не идентифицирован, то есть не найден в информационной базе

Объект - Произвольный. Загружаемый, модифицируемый объект, созданный по ссылке или найденный в информационной базе. Если способ идентификации объекта в файле не указан (т.е. отсутствует узел "Ссылка"), то параметр содержит значение Неопределено. В этом случае в обработчике возможна произвольная инициализация загружаемого объекта, в противном случае, объект будет создан автоматически.

НеЗамещатьОбъект - Булево - Если установить значение Истина, то существующий объект информационной базы не будет изменен.

ОбъектМодифицирован – Булево. Флажок указывает на то, что в обработчике объект был модифицирован. По умолчанию содержит значение Истина. То есть обработка загрузки считает, что если выполнялся какой-либо обработчик, то объект мог быть модифицирован, и его необходимо записать в информационную базу. Параметр относится только к текущему обработчику и только к найденным объектам. Если объект не был найден, то при любом значении он будет создан и записан. Только для платформы 1С:Предприятие 8.

Пример:
Пользователь = ПользователиИнформационнойБазы.НайтиПоИмени(СокрЛП(Объект.Код));
Если Пользователь = Неопределено Тогда
Пользователь = ПользователиИнформационнойБазы.СоздатьПользователя();
Пользователь.Имя      = СокрЛП(Объект.Код);
Пользователь.ПолноеИмя = СокрЛП(Объект.Код);
КонецЕсли;
Пока ФайлОбмена.Прочитать() Цикл
ИмяУзла = ФайлОбмена.ЛокальноеИмя;
ТипУзла = ФайлОбмена.ТипУзла;
Если ИмяУзла = "ИнформацияОПользователе" И (ТипУзла = одТипУзлаXML_НачалоЭлемента) Тогда
 Пользователь.АутентификацияОС          = одАтрибут(ФайлОбмена, одТипБулево, "АутентификацияОС");
 Пользователь.АутентификацияСтандартная = одАтрибут(ФайлОбмена, одТипБулево, "АутентификацияСтандартная");
 Пользователь.ПоказыватьВСпискеВыбора   = одАтрибут(ФайлОбмена, одТипБулево, "ПоказыватьВСпискеВыбора");
 Пользователь.ПользовательОС            = одАтрибут(ФайлОбмена, одТипСтрока, "ПользовательОС");
 Пользователь.ПолноеИмя                 = одАтрибут(ФайлОбмена, одТипСтрока, "ПолноеИмя");
 СтрокаРоль1 = одАтрибут(ФайлОбмена, одТипСтрока, "Роль1");
 СтрокаРоль2 = одАтрибут(ФайлОбмена, одТипСтрока, "Роль2");
 СтрокаРоль3 = одАтрибут(ФайлОбмена, одТипСтрока, "Роль3");
ИначеЕсли (ИмяУзла = "ИнформацияОПользователе") И (ТипУзла = одТипУзлаXML_КонецЭлемента) Тогда
 Прервать;
КонецЕсли;
КонецЦикла;            
Пользователь.ОсновнойИнтерфейс = Метаданные.Интерфейсы.Полный;
Пользователь.Язык              = Метаданные.Языки.Русский;
Пользователь.Роли.Очистить();
Роль1 = Метаданные.Роли.Найти(СокрЛП(СтрокаРоль1));
Роль2 = Метаданные.Роли.Найти(СокрЛП(СтрокаРоль1));
Роль3 = Метаданные.Роли.Найти(СокрЛП(СтрокаРоль1));
Если НЕ Роль1 = Неопределено Тогда
Пользователь.Роли.Добавить(Роль1);
КонецЕсли;
Если НЕ Роль2 = Неопределено Тогда
Пользователь.Роли.Добавить(Роль2);
КонецЕсли;
Если НЕ Роль3 = Неопределено Тогда
Пользователь.Роли.Добавить(Роль3);
КонецЕсли;
Пользователь.Записать();
5 Aleksey
 
01.11.11
13:21
Зачем ПриЗагрузки? Для этого есть ПоляПоиска
6 Baker_it
 
01.11.11
13:22
(5) Условие многоуровневого поиска как реализовать? Сначала ИНН+КПП, потом просто ИНН, потом по Наименованию? :)
7 Aleksey
 
01.11.11
13:24
(6) Т.е. все таки украли справку по обработчикам?

Пример:
Если НомерВариантаПоиска = 1 тогда

СтрокаИменСвойствПоиска = "Код, Наименование";

ИначеЕсли НомерВариантаПоиска = 2 тогда

СтрокаИменСвойствПоиска = "Код";

Иначе

СтрокаИменСвойствПоиска = "Наименование";

КонецЕсли;
8 Aleksey
 
01.11.11
13:25
Обработчики "Правила конвертации объектов"
Поля поиска
Условия возникновения события
Только для платформы V8.
Событие выполняется при поиске элемента ссылочного типа. Если установлен поиск по уникальнму идентификатору и программа нашла элемент, то поиск прекращается. Если поиск по уникальному идентификатору не дал положительного результата и указано, что нужно продолжить поиск в этом случае или поиск по уникальному идентификатору не проводился, то программа пытается найти элементы по свойствам поиска. В обработчике нужно установить список полей через запятую по которым нужно проводить поиск. Если очередная попытка дала положительный результат, то поиск прекращается.
Поиск возможен только по тем полям у которых на этапе выгрузка был установлен флаг поиска данных!!!

Параметры:
НомерВариантаПоиска - число. Номер попытки поиска. Попыток поиска может быть не больше 10.

СвойстваПоиска – соответствие, в котором хранятся текущие значения реквизитов поиска. Эти значения можно использовать в произвольных алгоритмах для идентификации объектов ИБ при загрузке данных. Следует иметь в виду, что при создании нового объекта, значения из соответствия СвойстваПоиска используются для заполнения свойств нового объекта.

ПараметрыОбъекта - либо Неопределено либо Соответствие, в котором хранятся дополнительные параметры, переданные для данного объекта из источника в приемник. Если параметров передано не было, то ПараметрыОбъекта = Неопределено. В данном обработчике соответствие содержит только те параметры, для которых установлен признак поиска.

ПрекратитьПоиск - булево. Если Истина, то поиск объекта прекращается, в зависимости от того СсылкаНаОбъект заполнена или нет создается новый объект.

СсылкаНаОбъект - ссылка на результирующий объект. Если в обработчике установить данную ссылку (не пустую) то программа ее запомнит и поиск на этом будет считать успешно завершенным

УстанавливатьУОбъектаВсеСвойстваПоиска - булево. Определяет нужно ли после удачного завершения поиска установить объекту все реквизиты поиска. Объект может быть найден по части реквизитов. Этот флаг определяет нужно оставшиеся реквизиты, которые не участвовали в поиске (но по которым поиск возможен) установить объекту или нет. Значение по умолчанию: Истина.

НастройкаПоиска - строка. Выбранный пользователем вариант сопоставления объектов. В ПКО есть таблица Варианты настроек полей поиска - с возможными вариантами настроек полей поиска для пользователя. Разработчик правил определяет возможные комбинации полей поиска, которые пользователь может выбирать при настройке обмена. Все настройки указанные разработчиком правил должны быть отработаны в коде обработчика "Поля поиска". Переменная НастройкаПоиска в обработчике определяет выбранный пользователем вариант сопоставления (ИмяНастройкиДляАлгоритма из соответствующей строки таблицы). Если пользователь не выбрал ни один вариант сопоставления, или ему ни один вариант не был предложен, то НастройкаПоиска - пустая строка.

СтрокаИменСвойствПоиска – строка в которой задаются ключевые поля варианта поиска. Могут быть указаны только те свойства, для которых при настройке правил обмена был выставлен флаг поиска.
9 Aleksey
 
01.11.11
13:26
Ты вообще сам можешь искать, например по РегиструСведений "Соответствие объектов".Или например у меня в доп.свойствах сидит код из источника, и при загрузки я ищу по нему. А там уже

СсылкаНаОбъект - ссылка на результирующий объект. Если в обработчике установить данную ссылку (не пустую) то программа ее запомнит и поиск на этом будет считать успешно завершенным
10 Baker_it
 
01.11.11
13:27
(7) Если бы еще без сарказма - то цены бы тебе не было. :)