Имя: Пароль:
1C
1С v8
КД: Источник 7.7, приемник 8.2 (синхронизация доков по дате без учета времени)
0 Новиков
 
10.12.12
15:56
Настраиваю правила конвертации для переноса документа из 7.7 в 8.2

И в источнике, и в приемнике у данного документа периодичность настроена в пределах года.

Столкнулся с такой траблой: хочется чтобы документ искался по номеру в пределах года по дате, без учета времени.

Сначала добавил в поля поиска реквизиты Дата и Номер. Документы синхронизируются только, если в приемнике время совпадает до СЕКУНДЫ. Это меня не устраивает. Потом убрал из полей поиска реквизит Дата, - теперь документы с одним номером из разных лет стали схлопываться в один.

Другие варианты, кроме как руками запрос по полям поиска писать - есть в моем случае? Делал кто-то подобный алгоритм? Т.е. не хочется вообще, чтобы секунды как-то влияли на поиск.
1 Wobland
 
10.12.12
16:00
а пускай загружается всегда на полдень, не?
2 Новиков
 
10.12.12
16:01
(1) просто в приемнике, документы тоже могут создать РУКАМИ (пустышка под выдачу номера счета). И когда он по обмену прилет из источника, то 10 на чорное ставлю - времена у них не совпадут :)
3 Cartman
 
10.12.12
16:27
(0) а в ПКС "дата" этих документов стоит галка "Поиск по дате на равенство"? если стоит, то попробуй снять.
4 NcSteel
 
10.12.12
16:28
(0) начало дня ставить не пробовал?
5 Новиков
 
10.12.12
16:34
(3) для 7.7 этой галки нет вообще то.
(4) в файл дата документа пишется как дата + время. Я в файле менял на произвольное время - фиг один и тот же :(

Видимо, низя так штатными средствами делать. Пичалька :(
6 NcSteel
 
10.12.12
16:42
(5) можно.
7 NcSteel
 
10.12.12
16:52
(6) +

Поля поиска
Условия возникновения события
Только для платформы V8.
Событие выполняется при поиске элемента ссылочного типа. Если установлен поиск по уникальнму идентификатору и программа нашла элемент, то поиск прекращается. Если поиск по уникальному идентификатору не дал положительного результата и указано, что нужно продолжить поиск в этом случае или поиск по уникальному идентификатору не проводился, то программа пытается найти элементы по свойствам поиска. В обработчике нужно установить список полей через запятую по которым нужно проводить поиск. Если очередная попытка дала положительный результат, то поиск прекращается.
Поиск возможен только по тем полям у которых на этапе выгрузка был установлен флаг поиска данных!!!
8 Новиков
 
10.12.12
16:55
(7) так понятно, что можно обработчик подъюзать, и там или запросом или как-то еще найти нужный документ. Я хотел уточнить, можно ли обойтись без кодирования :) И кстати, по Идшнику в 7.7 тоже ничего не поищешь.
9 NcSteel
 
10.12.12
16:57
(8) Тогда юзай:

Обработчики "Правила конвертации свойств"
Перед выгрузкой
Условия возникновения события
Событие выполняется перед выгрузкой значения свойства. Возможен отказ от выгрузки. УзелСвойства еще не создан, конвертируемое значение Неопределено.

Значение = НачалоДня(Объект.Дата)
10 Новиков
 
10.12.12
17:00
(9)
Значение =НачалоДня<<?>>
Функция не обнаружена

Посмотрел в справке по 7.7 - такой функции нет. Посмотрел - как же ш в 7.7 такое сделать, без могучего бородатого и седого ГУРУ не обойтись :)
11 NcSteel
 
10.12.12
17:02
Вроде как в 7.7 есть отдельно дата документа и отдельно время документа. Но тут надо адепта черной магии звать.
12 ДенисЧ
 
10.12.12
17:04
Значение = ДатаV8(Источник.ДатаДок);

Или как-то так называется функция
13 Новиков
 
10.12.12
17:12
Значение = ПолучитьДатуV8(Источник.ДатаДок);

Получаются доки с датами 00:00:00. Меняю у них руками последнюю секунду - загружаю заново - дубли, мать их.
14 NcSteel
 
10.12.12
17:13
не меняй секунду. ))))
15 Новиков
 
10.12.12
17:15
так вот про это и разговор. Хотя зарекаться не буду, но похоже, что только обработчик поля поиска нужно использовать.

Хотелось каких-нибудь бородачей послушать, у кого уже такие траблы были решены, когда дедушка Новиков еще не родился :)
16 Popkorm
 
10.12.12
17:16
(15) При переносе данных из 77 в 8.2 лучше всего синхронизовать по GUID. GUID в 77 можно получить либо из отдельного реквизита, либо как в UUID в 1С 7.7
17 NcSteel
 
10.12.12
17:16
Как раз бородачи как я мучаем обработчик полей поиска. Алгоритм описать в алгоритмах!
18 Popkorm
 
10.12.12
17:18
(15) либо поиск по Дате и Номеру,в 77 помоему начало дня это 8-00
19 Новиков
 
10.12.12
17:19
(16) не. Не пойдет, к сожалению такое, т.к. не соблюдается правило что этот документ всегда будет этим и на другой стороне. Хотят строго по номеру (даже если изменят руками) в пределах периодичности.

Пример можно такого выкрутаса - т.е. как семерошный уид сделать понимаемым для 8-ки? Это какая-то опять встроенная функция? Или что?
20 Popkorm
 
10.12.12
17:37
(19) В алгоритме процедура НайтиОбъектПоИД


/////////////////////////////////////////////////////////////////////////////////////////////
// Поиск объекта по идентификатору внешней базы (должен быть прописан в поле "комментарий")
/////////////////////////////////////////////////////////////////////////////////////////////
// Запрос к регистру для получения объекта
Запрос = Новый Запрос();
Запрос.УстановитьПараметр("УзелОбмена", УзелОбменаЗагрузкаДанных);
Запрос.УстановитьПараметр("ТипОбъекта",ТипОбъекта);
Запрос.УстановитьПараметр("Идентификатор",СвойстваПоиска.Получить("{КлючПоискаВИБИсточнике}"));

Запрос.Текст = "
|ВЫБРАТЬ
|    СоответствиеОбъектов.СобственнаяСсылка КАК Ссылка
|ИЗ
|    РегистрСведений.СоответствиеОбъектовДляОбмена Как СоответствиеОбъектов";
Если ТипОбъекта = Тип("СправочникСсылка.ДоговорыКонтрагентов") Тогда
   // Дополнительные условия для поиска договора (организация и вид договора)
   Запрос.Текст = Запрос.Текст + "
   |    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
   |    ПО СоответствиеОбъектов.СобственнаяСсылка = ДоговорыКонтрагентов.Ссылка";
КонецЕсли;
Запрос.Текст = Запрос.Текст + "
|ГДЕ
|    СоответствиеОбъектов.УзелОбмена = &УзелОбмена
|    И СоответствиеОбъектов.УзелОбмена Ссылка ПланОбмена.Полный
|    И СоответствиеОбъектов.СсылкаВДругойИБ = &Идентификатор
|    И ТипЗначения(СоответствиеОбъектов.СобственнаяСсылка) = &ТипОбъекта";    

Если ТипОбъекта = Тип("СправочникСсылка.ДоговорыКонтрагентов") Тогда
   // Дополнительные условия для поиска договора (организация и вид договора)
   Запрос.Текст = Запрос.Текст + "
   |И ДоговорыКонтрагентов.Организация = &Организация
   |И ДоговорыКонтрагентов.ВидДоговора = &ВидДоговора";
   Запрос.УстановитьПараметр("Организация",СвойстваПоиска.Получить("Организация"));
   Запрос.УстановитьПараметр("ВидДоговора",СвойстваПоиска.Получить("ВидДоговора"));
КонецЕсли;

ТаблицаРезультатов = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.Прямой);
Если ТаблицаРезультатов.Количество() > 0 Тогда
   СсылкаНаОбъект = ТаблицаРезультатов[0].Ссылка;
КонецЕсли;


ПКС (комментарий):
ПриВыгрузки
УстановитьАтрибут(УзелСвойства, "Имя", "{КлючПоискаВИБИсточнике}");
ПолучитьИдОбъекта(ИсходящиеДанные, ВходящиеДанные, Источник, Приемник,,Значение,,,,,,,,,,,,,,,,,,,,,,,,,,,, Отказ);

В Алгоритмах Процедура ПолучитьИдОбъекта
Значение = Параметры.Метадата.ЗначениеВСтрокуБД(Источник);
21 Новиков
 
10.12.12
20:11
(20) а, ну понятно. Спасибо :) Но у меня покрасивше, без регистра - правда не в этой базе.

Ну вообщем резюме такое: только через обработчик.