Имя: Пароль:
1C
1С v8
КД: Поля поиска
0 Mikhail Volkov
 
24.06.13
14:30
Кроме гуид синхронизация документов осуществлялась по реквизитам: Номер, Дата. Теперь решили, что даты в базах могут быть разные, но в пределах года. Оставил только Номер - засинхронизировался с прошлогодними документами... Как бы сделать, чтобы синхронизация шла по Номеру в пределах текущего года?
1 sanja26
 
24.06.13
14:32
Добавь параметр отбора ДатаГода и выгружай отдельно по каждому году
2 Defender aka LINN
 
24.06.13
14:39
(0) В заголовке темы содержится ответ
3 Mikhail Volkov
 
24.06.13
14:41
(2) Как это прописать в ПКО?
4 Defender aka LINN
 
24.06.13
14:43
(3) Если его ни разу не открывать и не смотреть, какие у ПКО бывают события, то похоже, что никак, да...
5 Mikhail Volkov
 
24.06.13
14:46
Например, для ФизЛиц:

Если СвойстваПоиска["ЭтоГруппа"] = Истина Тогда
   СтрокаИменСвойствПоиска = "Наименование, ЭтоГруппа, Родитель";
Иначе
   Если ЗначениеЗаполнено(СвойстваПоиска["ДатаРождения"]) Тогда
       СтрокаИменСвойствПоиска = "Наименование, ЭтоГруппа, ДатаРождения";
   Иначе
       СтрокаИменСвойствПоиска = "Наименование, ЭтоГруппа";
   КонецЕсли;
КонецЕсли;

А в моем случае как прописать?
6 Mikhail Volkov
 
24.06.13
14:48
(4) Так, что-ли?
СтрокаИменСвойствПоиска = "Номер, Год(Дата)";
7 Defender aka LINN
 
24.06.13
14:49
(5) Мне сейчас лениво открывать КД. Поэтому я и не буду. А раз уж ты нашел в себе силы открыть ПКО, то сделай еще одно усилие и прочитай, ять, справку по обработчикам.
8 Defender aka LINN
 
24.06.13
14:51
+(7) Хотя, если мне не изменяет память, если задавать поиск по дате и номеру для документа, КД и так использует штатный метод НайтиПоНомеру, которому дата нужна только для определения периода. Достаточно сказать КД, чтобы не меняла дату у существующих жокументов
9 Mikhail Volkov
 
24.06.13
15:00
(8) Т.е. по СтрокаИменСвойствПоиска = "Номер, Дата"; найдет нужный документ, даже если даты не равны, но они в приделах года?
10 Mikhail Volkov
 
24.06.13
15:16
(8) Похоже так и есть!? Если бы в процессе обмена создался дубль документа, то было бы предутреждение, что номер не уникальный... Пока этого нет!
11 Сияющий Асинхраль
 
24.06.13
15:29
(10) Увы, это не так. При записи с помощью КД уникальность номеров не проверяется, и проверки на вхождение номера в год в КД помнится встроенной нет, надо делать самому...
12 Mikhail Volkov
 
24.06.13
15:41
(11) Какой выход?
13 Сияющий Асинхраль
 
24.06.13
15:46
(12) В (5) тебе показали пример кода для полей поиска, вот тебе туда надо написать кусок кода, включающий НайтиПоКоду(), куда ты передаешь Номер дока СвойстваПоиска["Номер"] и дату для определения периода СвойстваПоиска["Дата"] (ну, или не найти по коду, а маленький запрос, как душе угодно) и если объект найден, то получаем документ со своей датой в этом периоде. Других вариантов мне в свое время найти не удалось, если просто включить поиск по Номер-Дата и в приемнике поменять дату или даже время дока, документы благополучно будут двоиться...
14 Defender aka LINN
 
24.06.13
16:40
(12) Значит, изменяет. Читай помощь по обработчику, там есть волшебная переменная
15 Mikhail Volkov
 
25.06.13
08:14
(11) В ПКО ПослеЗагрузки вставил проверку на дубли:
Если Не ОбъектНайден Тогда
   Дубль = НайтиПоНомеру(Объект.Номер, Объект.Дата);
   Если Не Дубль = Неопределено Тогда
       Сообщить("Документ " + СокрЛП(Объект) + " не создан (не загружен), найден дублирующий " + СокрЛП(Дубль), СтатусСообщения.Важно);
       Отказ = Истина;
   КонецЕсли;
КонецЕсли;
Пока дублей не обнаружено. Возможно мне повезло, в базе приемнике вручную не создают документов!? Но все же, если такая ситуация обнаружется, как указать, что найденый дубль и есть загружаемый документ?
Объект = Дубль; (вместо Отказ = Истина) - так?
16 Mikhail Volkov
 
25.06.13
08:16
(13) Можно пример кода с НайтиПоКоду()?
17 Mikhail Volkov
 
25.06.13
11:43
Такую хрень пробовал сунуть
СсылкаНаОбъект = НайтиПоНомеру(Объект.Номер, Объект.Дата);
Если Не СсылкаНаОбъект = Неопределено Тогда
   Сообщить("Документ " + СокрЛП(Объект) + " найден по номеру " + СокрЛП(СсылкаНаОбъект), СтатусСообщения.Важно);
   ПрекратитьПоиск = Истина;
КонецЕсли;
Выдало:
Ошибка в обработчике события ПоследовательностьПолейПоиска
   ИмяПКО                 =  
   ТипОбъекта             =  Поступление товаров и услуг
   Обработчик             =  Последовательность полей поиска
   ОписаниеОшибки         =  Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(1,32)}: Переменная не определена (Объект)
   ПозицияМодуля          =  Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(6114)
   КодСообщения           =  73
Как правильно писать?
18 hhhh
 
25.06.13
11:48
(17) ты (5) читал?


СсылкаНаОбъект = НайтиПоНомеру(СвойстваПоиска["Номер"], СвойстваПоиска["Дата"]);
19 Darky
 
25.06.13
11:48
в ПКС Дата - Искать по дате на равенство
20 Mikhail Volkov
 
25.06.13
12:07
(18) Теперь:
Ошибка в обработчике события ПоследовательностьПолейПоиска
   ИмяПКО                 =  
   ТипОбъекта             =  Поступление товаров и услуг
   Обработчик             =  Последовательность полей поиска
   ОписаниеОшибки         =  Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(1,18)}: Процедура или функция с указанным именем не определена (НайтиПоНомеру)
   ПозицияМодуля          =  Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(6114)
   КодСообщения           =  73
21 hhhh
 
25.06.13
12:08
(20) ну почитай в синтакс-помощнике про функцию НайтиПоНомеру. Что ты детские вопросы задаешь?
22 Mikhail Volkov
 
25.06.13
12:13
(19) В этом и беда, что решили так, что даты в базах могут отличаться, но в пределах года.
23 Mikhail Volkov
 
25.06.13
12:15
(21) А что ни так?
Описание:
Осуществляет поиск документа по номеру.
Доступность:
Сервер, толстый клиент, внешнее соединение.
24 Mikhail Volkov
 
25.06.13
12:54
(19) А правда, для чего в ПКС галачка "Поиск по дате на равество"? Если она снята, то Дата в поиске воспринимается как период? И все работает как надо, в обработчике события ПоследовательностьПолейПоиска ничего писать не надо?
25 Mikhail Volkov
 
26.06.13
05:57
Вроде проблема снята, но все же интересно, что не так с командой: СсылкаНаОбъект = НайтиПоНомеру(СвойстваПоиска["Номер"], СвойстваПоиска["Дата"]); ?