|
КД: Источник 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) а, ну понятно. Спасибо :) Но у меня покрасивше, без регистра - правда не в этой базе.
Ну вообщем резюме такое: только через обработчик. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |