![]() |
![]() |
![]() |
|
КД-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
|
регулярно
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |