Имя: Пароль:
1C
 
КД-2 Как сделать при загрузки чтобы поиск был моим самописным алгоритмом?
0 SOAD
 
14.11.08
03:31
Выгрузка проходит нормально. Проблема при загрузке данных в приемник.
Стандартный поиск по коду или наименованию не устраивает. К примеру объект из справочника контрагенты хочу чтобы искался по ИНН в определенной группе справочника.Если ИНН не заполнен, далее будет искатся по наименованию. Если ли это возможно реализовать,подскажите как?  

Пытался вставить процедуру поиска сюда:

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

Как произвести произвольную инициализацию?

Когда ставил стандартный поиск  по ИНН - то если ИНН источника был пуст  -то КД  находила первый попавшийся объект в справочнике приемника с пустым ИНН  и синхронизировала этот объект, что не правильно.  Как быть?  )
1 ТелепатБот
 
гуру
14.11.08
03:31
2 SOAD
 
14.11.08
03:31
НЕ нашел я ответов  в книге знаний :-)
3 Валерыч
 
14.11.08
03:57
можно конечно и здесь вырутиться: анализируй какой объект найден. При необходимости заменяй Объект.
А можно воспользоваться
Поля поиска
Условия возникновения события
Только для платформы V8.
Событие выполняется при поиске элемента ссылочного типа. Если установлен поиск по уникальнму идентификатору и программа нашла элемент, то поиск прекращается. Если поиск по уникальному идентификатору не дал положительного результата и указано, что нужно продолжить поиск в этом случае или поиск по уникальному идентификатору не проводился, то программа пытается найти элементы по свойствам поиска. В обработчике нужно установить список полей через запятую по которым нужно проводить поиск. Если очередная попытка дала положительный результат, то поиск прекращается.
Поиск возможен только по тем полям у которых на этапе выгрузка был установлен флаг поиска данных!!!

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

СвойстваПоиска -соотвествие в котором хранятся текущие значения реквизитов поиска

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

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

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

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

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

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

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

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

Иначе

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

КонецЕсли;
4 SOAD
 
14.11.08
04:06
вот что я напиcал там :

Если НомерВариантаПоиска = 1 тогда
         
  СтрокаИменСвойствПоиска = "ИНН";
         
ИначеЕсли НомерВариантаПоиска = 2 тогда
         
  СтрокаИменСвойствПоиска = "Наименование";
                   
КонецЕсли;

но проблему это не решает, если объект с пустым ИНН, хотелось бы проверить на пустое ИНН и если оно пустое- то сразу переходить к Варианту 2  по наименованию
5 SOAD
 
14.11.08
04:09
(3) //можно конечно и здесь вырутиться: анализируй какой объект найден. При необходимости заменяй Объект

ну вот именно так и делаю, но когда попадается пустое ИНН  -алгоритм насмарку  - КД находит первого попавшегося с пустым ИНН  и не ищет по наименованию в этом случае
6 Валерыч
 
14.11.08
04:44
ну так проверяй, если у найденного объекта (переменная такая) пустой ИНН, то сам инициализируй объект.
Например
Если ОбъектНайден И Объект.ИНН = "" Тогда
 Объект = ...
КонецЕсли;
7 Валерыч
 
14.11.08
04:46
еще вариант использовать
СвойстваПоиска -соотвествие в котором хранятся текущие значения реквизитов поиска
т.е.
Если НомерВариантаПоиска = 1 И СвойстваПоиска.ИНН <> "" тогда
         
  СтрокаИменСвойствПоиска = "ИНН";
         
Иначе
         
  СтрокаИменСвойствПоиска = "Наименование";
                     
КонецЕсли;
8 SOAD
 
14.11.08
05:13
(7)  


Если НомерВариантаПоиска = 1 И СвойстваПоиска.ИНН <> "" тогда
       
       СтрокаИменСвойствПоиска = "ИНН";
       
   Иначе
       
       СтрокаИменСвойствПоиска = "Наименование";
       
   КонецЕсли;


ругается:

Ошибка при загрузке данных: {ВнешняяОбработка.УниверсальныйОбменДаннымиXML(1504)}: Ошибка в обработчике события ПоследовательностьПолейПоиска
   ИмяПКО                 =  
   ТипОбъекта             =  Справочник ссылка: Контрагенты
   Обработчик             =  Последовательность полей поиска
   ОписаниеОшибки         =  Поле объекта не обнаружено (ИНН)
   ПозицияМодуля          =  (32)
   КодСообщения           =  73
9 Валерыч
 
14.11.08
05:33
отладчиком посмотри, что там в соответствие напихано. (в строке 1504 точку останова поставь)
10 SOAD
 
14.11.08
07:01
Угумс  - вот как надо было:

ТекущийИНН=СвойстваПоиска.Получить("ИНН");
   
   Если НомерВариантаПоиска = 1  И ТекущийИНН <> "" тогда
       
       СтрокаИменСвойствПоиска = "ИНН";
       
   Иначе
       
       СтрокаИменСвойствПоиска = "Наименование";
       
   КонецЕсли;

Благодарю Валерыч. Вроде как это решает мою проблему. Смотрю ты спец по КД. Часто приходится писать правила?
11 Валерыч
 
14.11.08
07:28
регулярно
AdBlock убивает бесплатный контент. 1Сергей