Имя: Пароль:
1C
1С v8
Конвертация данных!
,
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
тип  значения ВидДоговора   строка ?
ВидДоговора = "С покупателем"  - сравнение на строку