| 
    
        
     
     | 
    
  | 
Как реализовать выгрузку данных через план обмена за определенный период? | ☑ | ||
|---|---|---|---|---|
| 
    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 
 | 
         
        КО сообщает: на Инфостарте лежит куча обработок для управления регистрацией     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |