понедельник, 28 апреля 2014 г.

Не работает поиск по дате в конвертации данных

Нашел особенность в переносе документов в конвертации данных: нужно было перенести документ "Реализация товаров и услуг" из УПП в Бухгалтерию, поля поиска у документа были установлены "Номер" и "Дата", поиск по внутреннему идентификатору не использовался. Ничего, вроде, сложного, но есть один нюанс: когда после переноса я поменял дату в базе-источнике (УПП) и попытался перенести ее в базу-источник (Бухгалтерия), то новый документ почему-то не создался (хотя должен был), в нем лишь поменялась дата на новую, которую я установил.
Пришлось анализировать код обработки "Универсальный обмен данными XML", т.к. коллега подсказал, что дело может быть в методе НайтиПоНомеру(), который используется в обработке для поиска документов по их номеру. Здесь есть нюанс в этого метода: поиск будет идти не с проверкой даты на равенство (ДатаВремя1 = ДатаВремя2), а вхождением в интервал(ДатаНач <= ДатаВремя1 <= ДатаКон). Сам интервал определяется как период уникальности номеров документа, в который входит указанная дата. Например, если номера документов уникальны в пределах месяца и задана дата 10 декабря 2001 года, то поиск будет проводиться в интервале с 01 по 31 декабря 2001 года.
В модуле обработки "Универсальный обмен данными XML" нашел такую функцию для поиска документов:

Функция НайтиСсылкуНаДокумент(СвойстваПоиска, СтруктураСвойств, КоличествоРеальныхСвойствДляПоиска, ИскатьЗапросом, ПоискПоДатеНаРавенство)

   
// попробуем документ по дате и номеру найти
   
ИскатьЗапросом = ПоискПоДатеНаРавенство ИЛИ (КоличествоРеальныхСвойствДляПоиска <> 2);

    Если
ИскатьЗапросом Тогда
        Возврат Неопределено;
    КонецЕсли;

   
НомерДокумента = СвойстваПоиска["Номер"];
   
ДатаДокумента  = СвойстваПоиска["Дата"];

    Если (
НомерДокумента <> Неопределено) И (ДатаДокумента <> Неопределено) Тогда

       
СсылкаНаОбъект = СтруктураСвойств.Менеджер.НайтиПоНомеру(НомерДокумента, ДатаДокумента);

    Иначе

       
// по дате и номеру найти не удалось - надо искать запросом
       
ИскатьЗапросом = Истина;
       
СсылкаНаОбъект = Неопределено;

    КонецЕсли;

    Возврат
СсылкаНаОбъект;

КонецФункции

Здесь мы видим наш метод НайтиПоКоду(), который, собственно, используется для поиска документа:

СсылкаНаОбъект СтруктураСвойств.Менеджер.НайтиПоНомеру(НомерДокументаДатаДокумента);

но данный метод нам не подходит (четко определено, что дата и номер документа менять не будут). Чтобы искать дату на равенство нужно всего лишь установить значение параметра "ПоискПоДатеНаРавенство" в "Истина". Делается это в конвертации вот здесь:


Вот и все! После чего все красиво выгружается!


Добавить комментарий

Комментариев нет :

Отправить комментарий