|   |   | 
| 
 | Конвертация данных! | ☑ | ||
|---|---|---|---|---|
| 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 | 
        тип  значения ВидДоговора   строка ? 
  ВидДоговора = "С покупателем" - сравнение на строку | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |