|   |   | 
| 
 | Обмен РИБ, как записать изменения конфигурации программно? | ☑ | ||
|---|---|---|---|---|
| 0
    
        tixis 25.12.17✎ 10:01 | 
        Кто писал сообщения для риб программно? В общем ситуация такая, есть риб, в некоторых случаях получается так, что в файл обмена сначала записывается например документ, а потом договор контрагента, из за этого при загрузке документа появляется ошибка, т.к. договора еще нет. Переписал на выгрузку программно, примерно как в той теме v8: Порядок выгрузки данных через план обмена, но у меня ошибки при выгрузке из центра и соответственно мне нужно контролировать изменения конфы и выгружать конфу в случае необходимости.     | |||
| 1
    
        impulse9 25.12.17✎ 10:08 | 
        В плане обмен апоставь галочку "Распределенная ИБ", система сама будет отслеживать изменения конфигурации     | |||
| 2
    
        Serg_1960 25.12.17✎ 10:21 | 
        (0) "... есть риб... в файл обмена сначала записывается например документ, а потом договор контрагента, из за этого при загрузке документа появляется ошибка" - у Вас одно из двух: или у Вас не РИБ, или Вы заблуждаетесь насчет причин возникновения ошибки. Для РИБ не имеет принципиального значения порядок изменений в сообщении обмена.     | |||
| 3
    
        Serg_1960 25.12.17✎ 10:26 | 
        Третий вариант возникновения ошибки (наиболее распространённый) - это внесение изменений в типовую конфигурацию, не учитывающих признак обработки сообщений обмена - пресловуто-знаменитое "Объект.ОбменДаннми.Загрузка = Истина".     | |||
| 4
    
        tixis 25.12.17✎ 10:50 | 
        Это РИБ. https://i.imgur.com/CchqBO6.png  
 структура файла при выгрузке https://i.imgur.com/9PMO1tG.png | |||
| 5
    
        tixis 25.12.17✎ 10:51 | 
        Ошибки такие начали встречаться, после конвертации базы с 8.1 на 8.3 (конвертировали из за того, что для 8.1 нет программных лицензий)     | |||
| 6
    
        Фрэнки 25.12.17✎ 11:01 | 
        а может быть вся проблема в том, что изменения конфигурации хоть и приняты в приемнике, но никто не догадался их применить к базе? Сидят себе полученные изменения, а некому перезапустить базу в конфигураторе и отжмакнуть F7     | |||
| 7
    
        tixis 25.12.17✎ 11:06 | 
        (6) нет, если программно формировать файл обмена , то изменения конфы и не записываются. Весь вопрос в том как определить что нужно выгрузить конфу и как собственно выгрузить саму конфу     | |||
| 8
    
        Фрэнки 25.12.17✎ 11:14 | 
        У меня нет под руками того примера, где самостоятельно было прописана вся кухня для РИБ. Там есть специально предопределенные процедуры в модуле Пална обмена, при прохождении которых изменения конфигурации в файл выгрузки попадают. Т.е. включил РИБ = включил использование предопределенных процедур
 Сформировал желаемый файлик измененных данных "программно" = не использовал процедуры РИБ (грубо говоря, поломал, похе.р.ил) | |||
| 9
    
        Рэйв 25.12.17✎ 11:27 | 
        (0)>>из за этого при загрузке документа появляется ошибка, т.к. договора еще нет.
 Неправда.Все заполненные ссылки приходят вместе с документами. Просто объекты приходят потом. Ты бы хоть текст ошибки выложил. | |||
| 10
    
        tixis 25.12.17✎ 11:36 | 
        (9) текст ошибки:
 Проведение документа: Расходный кассовый ордер 00007939 от 15.12.2017 13:46:28 (Оплата поставщику) Выбран договор контрагента, не соответствующий организации, указанной в документе! Ошибка при чтении изменений при обмене РИБ: Ошибка при вызове метода контекста (ПрочитатьИзменения): В данной транзакции уже происходили ошибки! если смотреть в отладчике, то в договоре "ОбъектНенайден" | |||
| 11
    
        tixis 25.12.17✎ 11:37 | 
        Если снять с регистрации данный документ, провести обмен, потом поставить на регистрацию данный документ, то все пройдет как надо, т.к. договор уже будет в базе применике     | |||
| 12
    
        Фрэнки 25.12.17✎ 11:48 | 
        (10) как-то странно, что принимаемый из обмена документ перепроводится. Это же ни фига не РИБ, а какая-то самодеятельность. Зачем такой обмен обзываете РИБ? Хотите мозги людям запудрить?     | |||
| 13
    
        Serg_1960 25.12.17✎ 11:49 | 
        Если мне память не изменяет, то я встречал темы про ошибки обновления платформы 8.3, когда механизм платформы переставал обрабатывать изменения конфигурации...     | |||
| 14
    
        Рэйв 25.12.17✎ 11:52 | 
        (10)Интересно, а строки в ПередЗаписью ты убрал чтоли?
 Если ОбменДанными.Загрузка=Истина Тогда Возврат; КонецЕсли; | |||
| 15
    
        Рэйв 25.12.17✎ 11:53 | 
        (10)Не должно быть никаких проверок при загрузке РИБ     | |||
| 16
    
        Фрэнки 25.12.17✎ 11:56 | 
        (15) вангую, что он свою собственную загрузку данных из пакета сделал, в которой к объектам не приписывается Загрузка=Истина     | |||
| 17
    
        Serg_1960 25.12.17✎ 11:56 | 
        PS: "Третий вариант" как я и предупреждал в (3) :))     | |||
| 18
    
        Serg_1960 25.12.17✎ 11:58 | 
        (16) Вангую: скорее всего источник проблемы - "своя" подписка на событие.     | |||
| 19
    
        Фрэнки 25.12.17✎ 12:00 | 
        (18) но сообщение об ошибки типовое - не из самопальной подписки.     | |||
| 20
    
        Serg_1960 25.12.17✎ 12:04 | 
        (7) и (8) РИБ вообще и миграция изменений конфигурации в частности  - это внутриплатформенный механизм. Делаешь выгрузку по плану обмена РИБ ==> платформа вписывает зарегистрированное изменение конфигурации перед записью данных.     | |||
| 21
    
        Serg_1960 25.12.17✎ 12:06 | 
        +(13) Кстати, нашёл: риб не передает изменения конфигурации после обновления платформы. Но у автора, вероятно, не этот случай.     | |||
| 22
    
        Фрэнки 25.12.17✎ 12:06 | 
        (20) об том и речь, что он "ПРОГРАММНО" записал файл обмена. Не может платформа вписать изменение в формируемый пакет, т.к. не используется механизм платформы, реализованный во время вызова предопределенных процедур из модуля плана обмена.     | |||
| 23
    
        Рэйв 25.12.17✎ 12:08 | 
        (22)ЗаписатьИзменения от ПланаОбменаМенеджер вполне нормально записывает изменения конфы     | |||
| 24
    
        Serg_1960 25.12.17✎ 12:10 | 
        (22) Ооо... действительно "программно" - это ключевое слово темы :) Тут всяко может быть. Безграничный простор фантазии - от разумного до премии Дарвина :))     | |||
| 25
    
        tixis 25.12.17✎ 12:19 | 
        пока программно ничего не записывается, это только в процессе реализации, пока работают стандартные механизмы РИБ     | |||
| 26
    
        tixis 25.12.17✎ 12:20 | 
        это при стандартном обмене валятся такие ошики
 Вот код выгрузки Если ЭтоРИБ Тогда // Создаем новое сообщение ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения(); ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелОбмена); // для РИБ изменения в информационной базе ПланыОбмена.ЗаписатьИзменения(ЗаписьСообщения, СтруктураНастроекОбменаДанными.КоличествоЭлементовВТранзакцииНаВыгрузкуДанных); // Завершаем запись сообщения ЗаписьСообщения.ЗакончитьЗапись(); ЗаписьXML.Закрыть(); СтруктураНастроекОбменаДанными.РезультатЗаписиДанных = Истина; | |||
| 27
    
        tixis 25.12.17✎ 12:21 | 
        это из модуля ПроцедурыОбменаДанными, на сколько я вижу, здесь ничего не комментровалось и не изменялось, работает стандартный механизм     | |||
| 28
    
        catena 25.12.17✎ 12:22 | 
        А в документе? ПередЗаписью?     | |||
| 29
    
        tixis 25.12.17✎ 12:22 | 
        (28)
 Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) мУдалятьДвижения = НЕ ЭтоНовый(); Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; СтруктураДействий = Новый Структура("УстановитьДоговор"); УправлениеДенежнымиСредствами.ВыполнитьДействияПередЗаписьюПлатежногоДокумента(ЭтотОбъект, СтруктураДействий, Отказ, РежимЗаписи, РежимПроведения); КонецПроцедуры // ПередЗаписью | |||
| 30
    
        Serg_1960 25.12.17✎ 12:23 | 
        (23) В принципе, можно только читать зарегистрированные изменения по плану, а остальное формировать "вручную" как обычный файл XML. Можно даже сформировать любой заголовок, в том числе - якобы от имени плана обмена РИБ.
 Кстати это дело неподсудное. Я так делал. Когда надо было передать данные любой ценой, а обмен блокировало по ошибкам типа "конфигурация не соответствует ожидаемой". Или когда возникала необходимость залить данные из архива с устаревшей конфигурацией... | |||
| 31
    
        Фрэнки 25.12.17✎ 12:25 | 
        (29) скорее, в процедуре при получении данных     | |||
| 32
    
        tixis 25.12.17✎ 12:27 | 
        (16) не очень из тебя предсказатель, чтение проходит тоже стандартным механизмом 
 Процедура ЗагрузитьCообщениеСИзменениямиОтРИБУзла(СтруктураНастроекОбменаДанными, ЧтениеXML, КонфигурацияИзмененаПриОбменеРИБ = ЛОжь) СтруктураНастроекОбменаДанными.РезультатЧтенияДанных = Истина; КонфигурацияИзмененаПриОбменеРИБ = Ложь; // Загрузка из найденного файла ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения(); ЧтениеСообщения.НачатьЧтение(ЧтениеXML); Попытка ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения, СтруктураНастроекОбменаДанными.КоличествоЭлементовВТранзакцииНаЗагрузкуДанных); ЧтениеСообщения.ЗакончитьЧтение(); ЧтениеXML.Закрыть(); | |||
| 33
    
        Фрэнки 25.12.17✎ 12:28 | 
        (30) я стараюсь разделять обмены на системную часть (РИБ и самые нужные общие данные) и обмены по подсистемам, которые не имеют флага РИБ. На стороне получателя в перифрийной базе стоит опрос каталога на появление файла. Таким образом, если конфиг по РИБ прилетит, то его тоже обработает.     | |||
| 34
    
        Serg_1960 25.12.17✎ 12:29 | 
        tixis, фишка в том, что имея типовой функционал - при обмена данным невозможно нарваться на ошибки проведения - во время РИБ-обмена документы не проводятся. Максимум отложенное проведение. Но и оно после обмена.
 Смотри свои изменения в конфигурации, проверяй подписки, регламентные и фоновые. | |||
| 35
    
        Фрэнки 25.12.17✎ 12:30 | 
        (32) 
 // ПланыОбмена.ПрочитатьИзменения( там цикл должен быть, в котором устанавливается в объекты Загрузка=Истина | |||
| 36
    
        tixis 25.12.17✎ 12:30 | 
        (34) такие ошибки появились после конвертации на 8.3, раньше все штатно работало, решили перейти на лицензию и тут вылезли косяки     | |||
| 37
    
        tixis 25.12.17✎ 12:32 | 
        (35) не совсем понял, где должен быть цикл? это же платформенная процедура     | |||
| 38
    
        tixis 25.12.17✎ 12:47 | 
        Сейчас проверил в самом документе, действительно не у всех прилетевших документов флаг ОбменДанными.загрзука установлен. У каких то есть, у каких то нет.     | |||
| 39
    
        Serg_1960 25.12.17✎ 12:52 | 
        (36) Забудь про платформу, забудь про алгоритмы самого обмена - имхо, это всё не то, это всё не там.
 Почему во время обмена вдруг возникает перепроведение расходного кассового ордера? Так не должно быть. Вот в чём ключевой вопрос. | |||
| 40
    
        Serg_1960 25.12.17✎ 12:54 | 
        Кстати, а проверка платформы была сделана после обновления платформы? Ну, та которая "Конфигурация" - "Проверка конфигурации...".     | |||
| 41
    
        Serg_1960 25.12.17✎ 12:55 | 
        Тьфу, "проверка платформы" читать как "проверка конфигурации", естественно.     | |||
| 42
    
        tixis 25.12.17✎ 13:01 | 
        (41) проверка была после, ничего криминального нет, есть неиспользуемые функции (ну проверка выдавала что типа не обнаружено ссылок на функция или процедуру такую то)     | |||
| 43
    
        Serg_1960 25.12.17✎ 13:07 | 
        (38) А эти документы, те которые без флага обмена, - они точно с обменом прилетают, они точно в обмене есть? Может быть (не исключено) проведение кассового ордера "порождает" другой документ в обмене?     | |||
| 44
    
        tixis 25.12.17✎ 13:08 | 
        (43) я проверил, они присутсвуют в файле обмена     | |||
| 45
    
        tixis 25.12.17✎ 13:14 | 
        в самом плане обмена, есть процедура Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад), в нее уже прилетает  ЭлементДанных.ОбмеДнными.Загрузка = Ложь;
 по поводу, почему проводятся документы, в этой же процедуре это все прописано, если тип документ такой то, тогда режимЗаписи.Провдение. хз зачем так сделано, но делалось это судя по комментариям 01.03.2013 | |||
| 46
    
        Фрэнки 25.12.17✎ 13:25 | 
        (45) ну вот это ЭлементДанных.ОбмеДанными.Загрузка = Ложь; и врубает проверку всех реквизитов в процедурах, где обычно указано Если ОбмеДанными.Загрузка = Истина Тогда Возврат; КонецЕсли;     | |||
| 47
    
        Фрэнки 25.12.17✎ 13:27 | 
        и скорей всего, когда РежимЗаписи.Проведение, тогда же и Загрузка = Ложь     | |||
| 48
    
        Serg_1960 25.12.17✎ 13:43 | 
        (45) "тогда РежимЗаписи.Проведение" - бинго :)
 Сравни на всякий случай с конфигурацией поставщика на предмет типового функционала. | |||
| 49
    
        tixis 25.12.17✎ 14:45 | 
        А как быть с документами. которые реально надо проводить? Ест в этой процедуре переопределение документа, т.е. прилетает реализация, если это реализация для данного филиала, то вместо реализации создается поступление и его надо провести. В этом документе может пристуствовать новая номенклатура, которая была только что создана, и вместо нее будет объект не найден и документ не проведется. Видать все таки придется программно формировать самому файл выгрузки     | |||
| 50
    
        Фрэнки 25.12.17✎ 16:15 | 
        (49) как быть, как быть... я писал выше - отделяйте котлеты от мух. Изменение конфигурации делать по одному плану обмена, а обмен, сопровождающийся конвертацией данных - по другому. Соответственно, либо при выгрузке (имхо, при выгрузке это проще сделать) сложить все объекты в файл обмена, либо при загрузке. Как адекватно сделать при загрузке даже затрудняюсь придумать.     | |||
| 51
    
        Фрэнки 25.12.17✎ 16:18 | 
        все объекты в начале выгрузки выбрать в список и отсортировать в нужной последовательности, т.е. назначить при первом проходе очередность записи в файл, затем повторно пробежать по этому же списку и сложить все в файл.     | |||
| 52
    
        Serg_1960 25.12.17✎ 20:53 | 
        "А как быть с документами. которые реально надо проводить?" - изучить и творчески :) применить типовой функционал "отложенное проведение" (допроведение). Погугли.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |