Нашел особенность в переносе документов в конвертации данных: нужно было перенести документ "Реализация товаров и услуг" из УПП в Бухгалтерию, поля поиска у документа были установлены "Номер" и "Дата", поиск по внутреннему идентификатору не использовался. Ничего, вроде, сложного, но есть один нюанс: когда после переноса я поменял дату в базе-источнике (УПП) и попытался перенести ее в базу-источник (Бухгалтерия), то новый документ почему-то не создался (хотя должен был), в нем лишь поменялась дата на новую, которую я установил.
Пришлось анализировать код обработки "Универсальный обмен данными XML", т.к. коллега подсказал, что дело может быть в методе НайтиПоНомеру(), который используется в обработке для поиска документов по их номеру. Здесь есть нюанс в этого метода: поиск будет идти не с проверкой даты на равенство (ДатаВремя1 = ДатаВремя2), а вхождением в интервал(ДатаНач <= ДатаВремя1 <= ДатаКон). Сам интервал определяется как период уникальности номеров документа, в который входит указанная дата. Например, если номера документов уникальны в пределах месяца и задана дата 10 декабря 2001 года, то поиск будет проводиться в интервале с 01 по 31 декабря 2001 года.
Функция НайтиСсылкуНаДокумент(СвойстваПоиска, СтруктураСвойств, КоличествоРеальныхСвойствДляПоиска, ИскатьЗапросом, ПоискПоДатеНаРавенство)
// попробуем документ по дате и номеру найти
ИскатьЗапросом = ПоискПоДатеНаРавенство ИЛИ (КоличествоРеальныхСвойствДляПоиска <> 2);
Если ИскатьЗапросом Тогда
Возврат Неопределено;
КонецЕсли;
НомерДокумента = СвойстваПоиска["Номер"];
ДатаДокумента = СвойстваПоиска["Дата"];
Если (НомерДокумента <> Неопределено) И (ДатаДокумента <> Неопределено) Тогда
СсылкаНаОбъект = СтруктураСвойств.Менеджер.НайтиПоНомеру(НомерДокумента, ДатаДокумента);
Иначе
// по дате и номеру найти не удалось - надо искать запросом
ИскатьЗапросом = Истина;
СсылкаНаОбъект = Неопределено;
КонецЕсли;
Возврат СсылкаНаОбъект;
КонецФункции
Здесь мы видим наш метод НайтиПоКоду(), который, собственно, используется для поиска документа:
СсылкаНаОбъект = СтруктураСвойств.Менеджер.НайтиПоНомеру(НомерДокумента, ДатаДокумента);
но данный метод нам не подходит (четко определено, что дата и номер документа менять не будут). Чтобы искать дату на равенство нужно всего лишь установить значение параметра "ПоискПоДатеНаРавенство" в "Истина". Делается это в конвертации вот здесь:
Вот и все! После чего все красиво выгружается!
Пришлось анализировать код обработки "Универсальный обмен данными XML", т.к. коллега подсказал, что дело может быть в методе НайтиПоНомеру(), который используется в обработке для поиска документов по их номеру. Здесь есть нюанс в этого метода: поиск будет идти не с проверкой даты на равенство (ДатаВремя1 = ДатаВремя2), а вхождением в интервал(ДатаНач <= ДатаВремя1 <= ДатаКон). Сам интервал определяется как период уникальности номеров документа, в который входит указанная дата. Например, если номера документов уникальны в пределах месяца и задана дата 10 декабря 2001 года, то поиск будет проводиться в интервале с 01 по 31 декабря 2001 года.
Функция НайтиСсылкуНаДокумент(СвойстваПоиска, СтруктураСвойств, КоличествоРеальныхСвойствДляПоиска, ИскатьЗапросом, ПоискПоДатеНаРавенство)
// попробуем документ по дате и номеру найти
ИскатьЗапросом = ПоискПоДатеНаРавенство ИЛИ (КоличествоРеальныхСвойствДляПоиска <> 2);
Если ИскатьЗапросом Тогда
Возврат Неопределено;
КонецЕсли;
НомерДокумента = СвойстваПоиска["Номер"];
ДатаДокумента = СвойстваПоиска["Дата"];
Если (НомерДокумента <> Неопределено) И (ДатаДокумента <> Неопределено) Тогда
СсылкаНаОбъект = СтруктураСвойств.Менеджер.НайтиПоНомеру(НомерДокумента, ДатаДокумента);
Иначе
// по дате и номеру найти не удалось - надо искать запросом
ИскатьЗапросом = Истина;
СсылкаНаОбъект = Неопределено;
КонецЕсли;
Возврат СсылкаНаОбъект;
КонецФункции
Здесь мы видим наш метод НайтиПоКоду(), который, собственно, используется для поиска документа:
СсылкаНаОбъект = СтруктураСвойств.Менеджер.НайтиПоНомеру(НомерДокумента, ДатаДокумента);
но данный метод нам не подходит (четко определено, что дата и номер документа менять не будут). Чтобы искать дату на равенство нужно всего лишь установить значение параметра "ПоискПоДатеНаРавенство" в "Истина". Делается это в конвертации вот здесь:
Вот и все! После чего все красиво выгружается!
Комментариев нет :
Отправить комментарий