Имя: Пароль:
1C
1С v8
КД поиск по ИНН+КПП, если не удачен, то по наименованию
0 zak555
 
15.05.13
11:59
Собственно вопрос : как это реализовать при переносе из 77 в 8?

ясно, что для ПКС ИНН/КПП ставим галки по поиску, а вот что писать в обработчике ПриЗагрузке ПКО ?


Если НЕ ОбъектНайден Тогда
   
  //как обратиться к узлу?
   
КонецЕсли;
1 mikecool
 
15.05.13
12:00
есть же отдельные критерии поиска (так вроде зовутся) на отдельной закладке
2 zak555
 
15.05.13
12:02
(1) и как там ?
я этим не пользовался
3 mikecool
 
15.05.13
12:03
(2) сам такой, только советую )))
4 Defender aka LINN
 
15.05.13
12:03
Обработчик "Поля поиска"
5 zak555
 
15.05.13
12:06
(4) в книжке про "это" не написано
6 Defender aka LINN
 
15.05.13
12:09
(5) Зато там кнопки есть
7 zak555
 
15.05.13
12:09
(4) т.е. я в для ПКС ИНН/КПП/Наименование ставлю галки посика
далее в обработчике Поля поиска

указываю сначала ИНН,КПП
а потом Наименование

?
8 Defender aka LINN
 
15.05.13
12:10
(7) Да
9 Defender aka LINN
 
15.05.13
12:10
+(8) Только не забудь про ЭтоГруппа
10 zak555
 
15.05.13
12:11
(8) пример можно?
я не понимаю, что в справке написано
11 zak555
 
15.05.13
12:12
(9) у меня в обработчике ПКО Перед выгрузкой стоит
Отказ = Источник.ЭтоГруппа();
12 zak555
 
15.05.13
12:13
(8) так что ли ?

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

СтрокаИменСвойствПоиска = "ИНН, КПП";
Иначе
СтрокаИменСвойствПоиска = "Наименование";
КонецЕсли;
13 Defender aka LINN
 
15.05.13
12:14
(11) Поле поиска все равно нужно.
(10) Примерно так:

Если НомерВариантаПоиска = 1 Тогда
   ПоляПоиска = "ИНН, КПП, ЭтоГруппа";
Иначе
   ПоляПоиска = "Наименование, ЭтоГруппа";
КонецЕсли;
14 Зойч
 
15.05.13
12:15
(13) не катит. А если ИНН и КПП пустые? так все такие элементы в 1 сольются
15 Defender aka LINN
 
15.05.13
12:16
(14) Разрешаю их проверить предварительно
16 Aleksey
 
15.05.13
12:17
(15) Ну так проверяй на пустоту
17 zak555
 
15.05.13
12:17
(14) значит нужно проверить на пустоту ИНН/КПП ?
18 Aleksey
 
15.05.13
12:17
собственно в том обработчике можно и самому поискать нужный элемент и скормить найденный
19 Aleksey
 
15.05.13
12:18
СсылкаНаОбъект - ссылка на результирующий объект. Если в обработчике установить данную ссылку (не пустую) то программа ее запомнит и поиск на этом будет считать успешно завершенным
20 zak555
 
15.05.13
12:18
(13) > Поле поиска все равно нужно


чтобы элемент с наименованием Поставщик не записать в уже существующую группу с наименованием Поставщик
?
21 Defender aka LINN
 
15.05.13
12:19
(20) да
22 zak555
 
15.05.13
12:21
как обратиться к ИНН / КПП ?
23 Aleksey
 
15.05.13
12:21
(22) у них должна стоять галочка поиск
24 Aleksey
 
15.05.13
12:22
СвойстваПоиска – соответствие, в котором хранятся текущие значения реквизитов поиска. Эти значения можно использовать в произвольных алгоритмах для идентификации объектов ИБ при загрузке данных. Следует иметь в виду, что при создании нового объекта, значения из соответствия СвойстваПоиска используются для заполнения свойств нового объекта.
25 zak555
 
15.05.13
12:27
тогда получается так ?


Если ЗначениеЗаполнено(СвойстваПоиска.ИНН) и ЗначениеЗаполнено(СвойстваПоиска.КПП) и НомерВариантаПоиска = 1 Тогда
  ПоляПоиска = "ИНН, КПП, ЭтоГруппа";
ИначеЕсли ЗначениеЗаполнено(СвойстваПоиска.ИНН) и НомерВариантаПоиска = 2 Тогда
  ПоляПоиска = "ИНН, ЭтоГруппа";
Иначе
   ПоляПоиска = "Наименование, ЭтоГруппа";
КонецЕсли;
26 ЧашкаЧая
 
15.05.13
12:34
Еще нужно не забыть про пустые ИНН и КПП - найдет первого с пустым и перезапишет его. Рабочий пример:


   ЭтоГруппа = СвойстваПоиска.Получить("ЭтоГруппа");
   Если ЭтоГруппа Тогда
       Если НомерВариантаПоиска = 1 Тогда
           Параметры.ПараметрыАлгоритмов.Вставить("ИДСинхронизации77", ПараметрыОбъекта.Получить("ИДСинхронизации77"));
           Выполнить(Алгоритмы.НайтиОбъектПоИД77);
           СобственнаяСсылка = Параметры.ПараметрыАлгоритмов.СобственнаяСсылка;
           Если СобственнаяСсылка = Неопределено Тогда
               ПрекратитьПоиск = Истина;
           Иначе
               СсылкаНаОбъект = СобственнаяСсылка;
           КонецЕсли;
       Иначе
           // создаем новую группу
           ПрекратитьПоиск = Истина;
       КонецЕсли;
   Иначе
       ЕстьКодПоЕДРПОУ = ЗначениеЗаполнено(СвойстваПоиска.Получить("КодПоЕДРПОУ"));
       ЕстьИНН = ЗначениеЗаполнено(СвойстваПоиска.Получить("ИНН"));
       
       // сначала ищем по ЕДРПОУ, потом по ИНН
       Если НомерВариантаПоиска = 1 Тогда
           Параметры.ПараметрыАлгоритмов.Вставить("ИДСинхронизации77", ПараметрыОбъекта.Получить("ИДСинхронизации77"));
           Выполнить(Алгоритмы.НайтиОбъектПоИД77);
           СобственнаяСсылка = Параметры.ПараметрыАлгоритмов.СобственнаяСсылка;
           Если СобственнаяСсылка <> Неопределено Тогда
               СсылкаНаОбъект = СобственнаяСсылка;
           КонецЕсли;
       ИначеЕсли НомерВариантаПоиска = 2 И ЕстьКодПоЕДРПОУ Тогда
           СвойстваПоиска = "КодПоЕДРПОУ, ЭтоГруппа";
       ИначеЕсли НомерВариантаПоиска = 2 И ЕстьИНН ИЛИ НомерВариантаПоиска = 3 И ЕстьКодПоЕДРПОУ И ЕстьИНН  Тогда
           СвойстваПоиска = "ИНН, ЭтоГруппа";
       Иначе
           
           Если Не (ЕстьКодПоЕДРПОУ ИЛИ ЕстьИНН) Тогда
               // не по чему искать
               СсылкаНаОбъект = Параметры.ДопОбработки.ВыбратьКонтрагента.ВыполнитьОбработку(СвойстваПоиска.Получить("Наименование"));
               УстанавливатьУОбъектаВсеСвойстваПоиска = Ложь; // а вдруг в базе УПП уже установлены коды ЕДРПОУ и/или ИНН, чтобы их не очистить не будем перезаписывать
           Иначе
               // не нашли, введем новый
               ПрекратитьПоиск = Истина;
               
           КонецЕсли;    
           
       КонецЕсли;
   КонецЕсли;
27 zak555
 
15.05.13
12:36
вопрос про условие

ИначеЕсли ЗначениеЗаполнено(СвойстваПоиска.ИНН) и НомерВариантаПоиска = 2 Тогда
  ПоляПоиска = "ИНН, ЭтоГруппа";


как это поиск отработать, чтобы искал по ИНН у тех элементов, у которых КПП пустое (если не пустое, то пусть ищет по наименованию) ?
28 ЧашкаЧая
 
15.05.13
12:36
+ (26) ИДСинхронизации77 - это параметр в выгрузке (пришлось допилять КД, чтобы выгружались параметры из 7.7) ІD из таблицы контрагенты в 7.7
29 Aleksey
 
15.05.13
12:51
(28) а я пихал в строковый реквизит (например в комментарий) и ставил галку поиск,а при загрузки выпиливал этот кусок
30 Aleksey
 
15.05.13
12:53
ну типа в ПКС комментария
Значение = ""+ИДСинхронизации77+"$$$"+Источник.Комментарий;

а после загрузки
инд=найти(Объект.Комментарий, "$$$");
Если инд>0 тогда
 Объект.Комментарий=сред(Объект.Комментарий, инд+3);
КонецЕсли;
31 ЧашкаЧая
 
15.05.13
13:13
(30) Хорошая идея, не додумался я до этого, а сейчас уже ПараметрыОбъекта есть.

(27) см в (26) поиск элементов.