|
Как реализовать выгрузку данных через план обмена за определенный период? | ☑ | ||
---|---|---|---|---|
0
DoctorRoza
29.08.12
✎
11:46
|
Коллеги, подскажите пожалуйста. Есть УТ 10.3 и БП 2.0, типовые. Между ними настроен обмен данными с помощью плана обмена. Клиент требует реализовать обмен, чтобы пользователь мог устанавливать период за какой нужно выгружать документы. Сталкиваюсь с обменом впервые, для меня это темный лес. Залез в обр. Регистрация изменений для обмена, авторегистрация для всех документов стоит - Запретить, но документов для обмена зарегистрированно от сотен до нескольких десятков тюсяч. Чтобы понимать, что от мены требуют по сути, нужно понять принципы работы механизмов. Вот и интересуюсь, скиньте ссылки, чтобы почитать про регистрацию, ее суть или подскажите куда копать?
|
|||
1
pumbaEO
29.08.12
✎
11:50
|
Тут только поможет ковыряние в обработке ОбменДаннымиXML, там где получают измененные объекты и сверять дату.
Справочники тоже по периоду? Регистры непереодические тоже? |
|||
2
DoctorRoza
29.08.12
✎
11:52
|
Только документы ..
|
|||
3
DoctorRoza
29.08.12
✎
11:55
|
В Ут я нашел место в коде где идет проверка по дате, но документов при обработке слишком много. Получается, что зарегистрированно, то и обрабатывается. Вот и хочу понять, как это почистить и как управлять это регистрацией
|
|||
4
PowerBoy
29.08.12
✎
11:59
|
Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза)
Проверяешь тип на документ, смотришь его дату - игноришь. |
|||
5
DoctorRoza
29.08.12
✎
12:03
|
PowerBoy .. спасибо, сейчас проверю ..
|
|||
6
Kashemir
29.08.12
✎
12:06
|
Пример регистрации документов за период
Запрос = Новый Запрос; Запрос.УстановитьПараметр("НачПериода", НачПериода); Запрос.УстановитьПараметр("КонПериода", КонецДня(КонПериода)); ЦБ = EWG_Кл_Серв_Внш.ЦентральныйУзелБУ_Обмен(); НомерТекущейКоллекцииДокументов = 0; ЭлементыФормы.Индикатор1.МаксимальноеЗначение = Метаданные.Документы.Количество(); ЭлементыФормы.Индикатор2.МаксимальноеЗначение = 100; Для каждого МетаДок Из Метаданные.Документы Цикл ЭлементыФормы.Индикатор2.МаксимальноеЗначение = 100; НомерТекущейКоллекцииДокументов = НомерТекущейКоллекцииДокументов + 1; ЭлементыФормы.Индикатор1.Значение = НомерТекущейКоллекцииДокументов; Состояние("Получение документов вида " + МетаДок.Имя + " (" + НомерТекущейКоллекцииДокументов + "/" + Метаданные.Документы.Количество() + ")"); ЭлементыФормы.ВидДокументов.Заголовок = "(" + НомерТекущейКоллекцииДокументов + "/" + Метаданные.Документы.Количество() + ")" + МетаДок.Имя; МассивНаборов = Новый Массив; Для каждого Движ из МетаДок.Движения ЦИкл Если Метаданные.ПланыОбмена.БУ_обмен.Состав.Содержит(Движ) Тогда ЕСли Метаданные.РегистрыНакопления.Содержит(Движ) Тогда МассивНаборов.Добавить(РегистрыНакопления[Движ].СоздатьНаборЗаписей()); ИначеЕсли Метаданные.РегистрыБухгалтерии.Содержит(Движ) Тогда МассивНаборов.Добавить(РегистрыБухгалтерии[Движ].СоздатьНаборЗаписей()); ИначеЕсли Метаданные.РегистрыСведений.Содержит(Движ) Тогда МассивНаборов.Добавить(РегистрыСведений[Движ].СоздатьНаборЗаписей()); ИначеЕсли Метаданные.РегистрыРасчета.Содержит(Движ) Тогда МассивНаборов.Добавить(РегистрыРасчета[Движ].СоздатьНаборЗаписей()); КонецЕсли; КонецЕсли; КОнецЦикла; Если Метаданные.ПланыОбмена.БУ_обмен.Состав.Содержит(МетаДок) Тогда Запрос.Текст = "ВЫБРАТЬ | Док.Ссылка |ИЗ | Документ." + МетаДок.Имя+ " КАК Док |ГДЕ | Док.Дата МЕЖДУ &НачПериода И &КонПериода"; Выборка = Запрос.Выполнить().Выбрать(); ЭлементыФормы.Индикатор2.МаксимальноеЗначение = Выборка.Количество(); НомерДок = 0; ЭлементыФормы.ВидДокументов.Заголовок = "(" + НомерТекущейКоллекцииДокументов + "/" + Метаданные.Документы.Количество() + ")" + МетаДок.Имя + " (" +Выборка.Количество() + ")"; Пока Выборка.Следующий() Цикл НомерДок = НомерДок + 1; ЭлементыФормы.Индикатор2.Значение = НомерДок; Состояние("Документ (" + НомерДок + "/" + Выборка.Количество() + ") коллекции документов вида " + МетаДок.Имя + " (" + НомерТекущейКоллекцииДокументов + "/" + Метаданные.Документы.Количество() + ")"); ПланыОбмена.ЗарегистрироватьИзменения(ЦБ,Выборка.Ссылка); Для каждого Набор из МассивНаборов Цикл Набор.Отбор.Регистратор.Установить(Выборка.Ссылка); ПланыОбмена.ЗарегистрироватьИзменения(ЦБ,Набор); КонецЦикла; КОнецЦИкла; КонецЕсли; КонецЦикла; ЭлементыФормы.Индикатор2.МаксимальноеЗначение = 100; ЭлементыФормы.Индикатор2.Значение = 100; ЭлементыФормы.ВидДокументов.Заголовок = ""; |
|||
7
DoctorRoza
29.08.12
✎
12:12
|
Скажите ,по умолчанию ведь все документы регистрируются?
|
|||
8
Kashemir
29.08.12
✎
12:12
|
+(6) Без лишнего так:
Запрос = Новый Запрос; Запрос.УстановитьПараметр("НачПериода", НачПериода); Запрос.УстановитьПараметр("КонПериода", КонецДня(КонПериода)); ЦБ = ОпределяемУзелРегистрации(); Для каждого МетаДок Из Метаданные.Документы Цикл Если Метаданные.ПланыОбмена.БУ_обмен.Состав.Содержит(МетаДок) Тогда МассивНаборов = Новый Массив; Для каждого Движ из МетаДок.Движения ЦИкл Если Метаданные.ПланыОбмена.БУ_обмен.Состав.Содержит(Движ) Тогда ЕСли Метаданные.РегистрыНакопления.Содержит(Движ) Тогда МассивНаборов.Добавить(РегистрыНакопления[Движ].СоздатьНаборЗаписей()); ИначеЕсли Метаданные.РегистрыБухгалтерии.Содержит(Движ) Тогда МассивНаборов.Добавить(РегистрыБухгалтерии[Движ].СоздатьНаборЗаписей()); ИначеЕсли Метаданные.РегистрыСведений.Содержит(Движ) Тогда МассивНаборов.Добавить(РегистрыСведений[Движ].СоздатьНаборЗаписей()); ИначеЕсли Метаданные.РегистрыРасчета.Содержит(Движ) Тогда МассивНаборов.Добавить(РегистрыРасчета[Движ].СоздатьНаборЗаписей()); КонецЕсли; КонецЕсли; КОнецЦикла; Запрос.Текст = "ВЫБРАТЬ | Док.Ссылка |ИЗ | Документ." + МетаДок.Имя+ " КАК Док |ГДЕ | Док.Дата МЕЖДУ &НачПериода И &КонПериода"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ПланыОбмена.ЗарегистрироватьИзменения(ЦБ,Выборка.Ссылка); Для каждого Набор из МассивНаборов Цикл Набор.Отбор.Регистратор.Установить(Выборка.Ссылка); ПланыОбмена.ЗарегистрироватьИзменения(ЦБ,Набор); КонецЦикла; КОнецЦИкла; КонецЕсли; КонецЦикла; |
|||
9
Kashemir
29.08.12
✎
12:13
|
(7) Регистрируются по умолчанию только если стоит "Авторегистрации".
|
|||
10
DoctorRoza
29.08.12
✎
12:13
|
и регистрация удаляестя после загрузки в приемник?
|
|||
11
DoctorRoza
29.08.12
✎
12:13
|
и регистрация удаляестя после загрузки в приемник ..
|
|||
12
DoctorRoza
29.08.12
✎
12:15
|
Спасибо за код .. буду разбираться ..
|
|||
13
Kashemir
29.08.12
✎
12:16
|
(10) Нет - при отправке в таблице регистрации лишь фиксируется номер пакета отправки. При обратном приеме из узла отправки приходит подтверждение с номером того пакета, который был принят. Все существующие записи регистрации на этом узел с номером пакета меньше либо равного принятого очищаются. Номер пакета NULL не очищается - это признак свежезарегистрированных данных еще ни разу не отправленных.
|
|||
14
Kashemir
29.08.12
✎
12:20
|
(12) Увидел ошибку в коде - при создании наборов Движ.Имя нужно использовать
|
|||
15
DoctorRoza
29.08.12
✎
12:21
|
(13) у меня сейчас зарегистрированно большое количество документов для отправки. Если вручную удалю обработкой Регистрация изменений для обмена те, что в нужный период не попадают - это правильное действие с моей стороны?
|
|||
16
Kashemir
29.08.12
✎
12:22
|
(15) Технически - да сколько угодно. Главное чтобы пользователи потом не жаловались на отсутствие обновленных данных в базе приемнике.
|
|||
17
Sammo
29.08.12
✎
12:23
|
+13 в общем случае сразу после обмена зарегистрированное изменение может удаляться на уровне кода. Используется для систем, которые не должны получать подтверждения.
(15) Хм. Я бы не стал. Т.к. если зарегистрированы, значит в них что-то изменилось. Есть риск потерять изменения |
|||
18
Kashemir
29.08.12
✎
12:24
|
(17) Для таких смелых действией надо иметь 100% гарантию что каждый пакет дойдет до адреса.
|
|||
19
DoctorRoza
29.08.12
✎
12:27
|
Извините за навязчивость, но еще вопрос. Какой мой порядок действий:
1. Удалить все документы из регистрации; 2. Провести нужные документы за нужный период или начиная с какой-либо даты; |
|||
20
Kashemir
29.08.12
✎
12:28
|
(19) Проводить то зачем ?
|
|||
21
DoctorRoza
29.08.12
✎
12:29
|
А как же я их зарегистрирую для обмена?
|
|||
22
Kashemir
29.08.12
✎
12:29
|
(19) Когда документы будешь снимать с регистрации - не забудь и их движения почистить.
|
|||
23
Kashemir
29.08.12
✎
12:29
|
(21) Как ты думаешь что делает код в (6) и в (8) ?
|
|||
24
DoctorRoza
29.08.12
✎
12:33
|
(23) согласен .. тоже верно .. посчитал, что перепроводка все сделает без дополнительного вмешательства
|
|||
25
Kashemir
29.08.12
✎
12:35
|
(24) Это метод лечения головной боли гильотиной. Предлагаю все же принять таблетку :)
|
|||
26
DoctorRoza
29.08.12
✎
12:39
|
(25) еще вопрос, подскажите, что делать со справочниками? Их много зарегистрированно и удалять их думаю неверно. Если какой-нибудь элемент измениться, он зарегистрируется для отправки в приемник?
|
|||
27
Kashemir
29.08.12
✎
12:41
|
(26) Справочники по механике ничем не отличаются от документов. Те же таблицы регистрации по ссылке.
|
|||
28
DoctorRoza
29.08.12
✎
12:44
|
(27) спасибо за помощь .. буду разбираться .. спасибо .. :)
|
|||
29
Мигрень
29.08.12
✎
12:49
|
КО сообщает: на Инфостарте лежит куча обработок для управления регистрацией
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |