|
Конвертация данных! | ☑ | ||
---|---|---|---|---|
0
Aleksei_Pro
02.10.11
✎
11:28
|
Ребят подскажите, как только не пробовал - не получается! Нужно в правилах поправить при переносе, если договор контрагента имеет вид "С покупателем", то поиск осуществить не по коду , а по виду договора..
|
|||
1
MaxS
02.10.11
✎
11:37
|
Полями поиска должны быть все нужные поля, а в
ПКО Поля поиска переопределять копать в сторону, например: СтрокаИменСвойствПоиска = "Код, Наименование"; |
|||
2
Aleksei_Pro
02.10.11
✎
11:40
|
(1) т.е выбрать поля поиска "Код, Владелец и ВидДоговора"...А писать то в ПКО или ПКС?
|
|||
3
Aleksei_Pro
02.10.11
✎
11:53
|
(1) так прокатит:
Если НомерВариантаПоиска = 1 тогда Если ЗначениеЗаполнено(СвойстваПоиска.Получить("ВидДоговора")) Тогда ВидДоговора = СвойстваПоиска.Получить("ВидДоговора"); Если ВидДоговора = "С покупателем" Тогда СтрокаИменСвойствПоиска = "ВидДоговора,Владелец,ЭтоГруппа"; Иначе СтрокаИменСвойствПоиска = "Код, Владелец,ЭтоГруппа"; КонецЕсли; Иначе СтрокаИменСвойствПоиска = "Код, Владелец,ЭтоГруппа"; КонецЕсли; КонецЕсли; |
|||
4
MaxS
02.10.11
✎
12:00
|
ПКО - обработчики событий - поля поиска
(3) да, пойдёт )) правила обмена прописываются однозначно, поэтому imho можно и не проверять наличие поля поиска. вот пример поиска контрагента ИНН = СокрЛП(СвойстваПоиска["ИНН"]); КПП = СокрЛП(СвойстваПоиска["КПП"]); ЕстьИНН = НЕ ПустаяСтрока(ИНН); ЕстьКПП = НЕ ПустаяСтрока(КПП); Наименование = СокрЛП(СвойстваПоиска["Наименование"]); Если ЕстьИНН И ЕстьКПП Тогда СтрокаИменСвойствПоиска = "ИНН, КПП"; ИначеЕсли ЕстьИНН И ( НЕ ЕстьКПП ) Тогда СтрокаИменСвойствПоиска = "ИНН"; Иначе СтрокаИменСвойствПоиска = "Наименование"; КонецЕсли; Если НомерВариантаПоиска>=2 Тогда // ищем самостоятельно СсылкаТекущая = Справочники.Контрагенты.ПустаяСсылка(); Пока 1=1 Цикл Если ЕстьИНН и ЕстьКПП Тогда Запрос = Новый Запрос; ... |
|||
5
Aleksei_Pro
02.10.11
✎
12:21
|
Почему то (3) не работает! Суть такова: выгружаю документ "Реализация", при загрузке мне нужно чтобы если есть договор с покупателем в базе , то встал именно он, а он мне новый создает договор, как в базе источник!
|
|||
6
Hans
02.10.11
✎
12:23
|
смотри может там у тебя по ссылке поиск идет.
|
|||
7
Aleksei_Pro
02.10.11
✎
12:25
|
(6) не понял? В ПКС поиск установлен у "ВидДоговора,Владелец,ЭтоГруппа,Код"....
|
|||
8
Aleksei_Pro
02.10.11
✎
12:30
|
Если кто не понял суть проблемы, объясняю:
Обмен между идентичными Ут 10,3, в базах коды договоров различны, и мне не надо чтобы при загрузке он создавал новые договора , а брал уже имеющиеся) |
|||
9
MaxS
02.10.11
✎
12:36
|
В ПКО выключить флаг
Искать объект приемника по внутреннему идентификатору объекта источника |
|||
10
Aleksei_Pro
02.10.11
✎
12:44
|
(9) выключил, не помогает, все равно создает новый договор.
|
|||
11
MaxS
02.10.11
✎
12:52
|
(10) в примере (4) на крайний случай есть поиск вручную. Запросами и анализом результатов.
Можно в режиме отладки загрузки всё выяснить... Там в конце такой код ... Прервать; КонецЦикла; Если НЕ СсылкаТекущая.Пустая() Тогда СсылкаНаОбъект = СсылкаТекущая; КонецЕсли; КонецЕсли; Наверное так будет быстрее выяснить причину, чем гадать ;) |
|||
12
Aleksei_Pro
02.10.11
✎
13:06
|
А может
ВидДоговора = СвойстваПоиска.Получить("ВидДоговора"); Если ВидДоговора = "С покупателем" Тогда Типы не совпадают? |
|||
13
Aleksei_Pro
02.10.11
✎
13:10
|
Вообще вот так написал, наверняка должно сработать, но увы , тоже самое)
Если ЗначениеЗаполнено(СвойстваПоиска.Получить("ВидДоговора")) Тогда ВидДоговора = СвойстваПоиска.Получить("ВидДоговора"); Если ВидДоговора = "С покупателем" Тогда СтрокаИменСвойствПоиска = "ВидДоговора,Владелец,ЭтоГруппа"; Иначе СтрокаИменСвойствПоиска = "ВидДоговора,Владелец,ЭтоГруппа"; КонецЕсли; Иначе СтрокаИменСвойствПоиска = "ВидДоговора,Владелец,ЭтоГруппа"; КонецЕсли; |
|||
14
Aleksei_Pro
02.10.11
✎
13:14
|
А вот такой вопрос, в ПКС нужно галки ставить у элементов поиска?
|
|||
15
MaxS
02.10.11
✎
13:37
|
(14) да, см. (1)
|
|||
16
Aleksei_Pro
02.10.11
✎
13:44
|
(15) тогда не пойму, почему не работает...
|
|||
17
Aleksei_Pro
02.10.11
✎
14:02
|
Написал так:
Если НомерВариантаПоиска = 1 тогда Сообщить("ПОИСК №1,,,,," + СвойстваПоиска.Получить("ВидДоговора")); ВидДоговора = СвойстваПоиска.Получить("ВидДоговора"); Если ВидДоговора = "С покупателем" Тогда СтрокаИменСвойствПоиска = "ВидДоговора,Владелец,ЭтоГруппа"; Сообщить("Ищем по" + "ВидДоговора,Владелец,ЭтоГруппа"); Иначе СтрокаИменСвойствПоиска = "Код, Владелец,ЭтоГруппа"; Сообщить("Ищем по" + "Код,Владелец,ЭтоГруппа"); КонецЕсли; КонецЕсли; Сообщить("ПОИСК №1,,,,," + СвойстваПоиска.Получить("ВидДоговора")) - вывел "С покупателем" и затем ошибку: Ошибка в обработчике события ПоследовательностьПолейПоиска ИмяПКО = ТипОбъекта = Договоры контрагентов Обработчик = Последовательность полей поиска ОписаниеОшибки = Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(11,1)}: Ожидается последовательность операторов ПозицияМодуля = Обработка.УниверсальныйОбменДаннымиXML(6114) КодСообщения = 73 |
|||
18
MaxS
02.10.11
✎
14:06
|
убрать весь код оттуда, флажками пометить только
ВидДоговора,Владелец,ЭтоГруппа если не заработает как нужно, значит что-то в правилах неверно настроено если заработает, значит этот код в обработке поиска неверно работает |
|||
19
Aleksei_Pro
02.10.11
✎
14:11
|
(18) выявил следующее:
Если НомерВариантаПоиска = 1 тогда Сообщить("ПОИСК №1,,,,," + СвойстваПоиска.Получить("ВидДоговора")); ВидДоговора = СвойстваПоиска.Получить("ВидДоговора"); Если ВидДоговора = "С покупателем" Тогда СтрокаИменСвойствПоиска = "ВидДоговора,Владелец,ЭтоГруппа"; Сообщить("1"); Иначе СтрокаИменСвойствПоиска = "Код, Владелец,ЭтоГруппа"; Сообщить("2"); КонецЕсли; КонецЕсли; Выводит всегда "2".. СвойстваПоиска.Получить("ВидДоговора") - "С покупателем" |
|||
20
Aleksei_Pro
02.10.11
✎
14:18
|
даже если:
СтрокаИменСвойствПоиска = "ВидДоговора,Владелец,ЭтоГруппа"; только оставить, то все равно новый создает, что тут другое. |
|||
21
Aleksei_Pro
02.10.11
✎
14:24
|
||||
22
Aleksei_Pro
02.10.11
✎
14:26
|
даже если убрать галочку "Код", все равно новый создает, значит где то в другом месте...
|
|||
23
Aleksei_Pro
02.10.11
✎
15:08
|
а если (3) не ставить, а поставить галочку "Продолжать поиск если по уникальному идентификатору не найден".?
|
|||
24
Aleksei_Pro
02.10.11
✎
15:17
|
(23) Ребят подскажите где смотреть?, он всегда создает новый договор, даже если у него коды и наименование договора одинаковые в обеих базах.
|
|||
25
MaxS
02.10.11
✎
15:46
|
что-то никто не желает присоединяться к обсуждению ))
(20) у поля договора владелец ПКО Контрагенты прописано? |
|||
26
Amiralnar
02.10.11
✎
15:48
|
Посмотри в отладчике. Там будет понятно, как ищет, почему не находит, зачем создает.
|
|||
27
Aleksei_Pro
02.10.11
✎
16:03
|
(25) в ПКС у поля владелец стоит "Контрагенты" , отключил поиск по уникальному идентификатору...
|
|||
28
Aleksei_Pro
02.10.11
✎
16:15
|
Даже пробовал так: ставил галочки "Поис по идентификатору" и "Поиск по другим полям если не найдено по идентификатору"
|
|||
29
Aleksei_Pro
02.10.11
✎
19:04
|
Ребят подскажите как мне при загрузке установить фильтр, если договор "С покупателем" то тогда искать по видудоговора?
|
|||
30
Aleksei_Pro
02.10.11
✎
19:42
|
Выявил, бес кода работает, вот осталось здесь поправить, а в чем проблема не пойму, все же правильно написано:
Если ЗначениеЗаполнено(СвойстваПоиска.Получить("ВидДоговора")) Тогда ВидДоговора = СвойстваПоиска.Получить("ВидДоговора"); Если ВидДоговора = "С покупателем" Тогда СтрокаИменСвойствПоиска = "ВидДоговора,Владелец,ЭтоГруппа"; Сообщить("1"); Иначе СтрокаИменСвойствПоиска = "Код,Владелец,ЭтоГруппа"; Сообщить("2"); КонецЕсли; Иначе СтрокаИменСвойствПоиска = "Код,Владелец,ЭтоГруппа"; КонецЕсли; Всегда выводит "2" |
|||
31
kai17
02.10.11
✎
21:05
|
тип значения ВидДоговора строка ?
ВидДоговора = "С покупателем" - сравнение на строку |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |