Продвинутый курс. Домашнее задание №5

Пятое задание по 0-му блоку продвинутого курса.

Для выполнения рекомендуется изучить следующие главы 0-го курса.
Глава 23. Средства обмена данными.
Глава 24. Распределенные информационные базы.
Глава 25. Хранилище настроек.
Глава 26. Механизмы обеспечения целостности данных.

К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте — залогиньтесь. Если Вы оплачивали курс, у Вас активирован токен доступа, Вы залогинены, но Вы видите эту запись — напишите нам на e-mail поддержки.

комментария 24 на “Продвинутый курс. Домашнее задание №5”

  1. Задание сделал.   Смущает запрет на редактирование документа в центральной ИБ после выгрузки, не лучше ли запретить редактировать документ в периферии? С учетом того, что докумет относится к центральной ИБ.

    Обратная связь:
    1. Новое – технологический журнал, менеджер кластеров, хранилище настроек, анализ и прогнозирование данных.
    2. Сложность вызывает работа с конвертацией данных.
    3 Хотелось бы увидеть мастер-группу по конвертации данных (корректировка существующих правил обмена для ЗУПа, КА в части наложения фильтров на выгрузку\загрузку данных).

  2. Обратная связь.
    1. Практически весь материал блока оказался новым.
    2. Наибольшее затруднение – это РЛС и обмен данными.  Что помогло в преодоление затрудния? Повторный просмотр соответсвующих блоков.
    3. Хотелось бы, конечно, более подробно рассмотреть тему обмена данными.

  3. Задание выполнил. В плане обмена добавил два реквизита БУ и ЗП, авторегистрация = Запретить. Создал подиску на событие ПередЗаписью и в зависимости от установленных флагов (и базы) в документе добавлял получателей в ОбменДанными.Получатели. Флаг Передан устанавливал в Истина для объектов в событии модуля плана обмена ПриОтправкеДанныхПодчиненному.  Для формы ПриСозданииНаСервере: ТолькоПросмотр=Передан.

  4. Задание выполнил.

    Создал план обмена РИБ с узлами Центр, Регламент, ЗиК.
    Для исключения проблем с номерами документов добавил константу «ПрефиксИБ» и подписку на событие: источник – ДокументОбъект, событие – ПриУстановкеНовогоНомера, текст обработчика:
    <code>
    Процедура ПриУстановкеНовогоНомераДокументов(Источник, СтандартнаяОбработка, Префикс) Экспорт
    Префикс = Константы.ПрефикИБ.Получить();
    КонецПроцедуры
    </code>

    В документы добавлена табличная часть «Выгрузка» с реквизитами Узел (тип ПланОбменаСсылка.РИБ) и Выгружать (тип Булево). При вводе нового документа табличная часть автоматически заполняется узлами кроме текущего. Для этого используется подписка на событие: источник – ДокументОбъект, событие – ОбработкаЗаполнения, текст обработчика:
    <code>
    Процедура ОбработкаЗаполненияДокументов(Источник, ДанныеЗаполнения, СтандартнаяОбработка) Экспорт
    Если (Источник.ЭтоНовый() И Источник.Метаданные().ТабличныеЧасти.Найти(“Выгрузка”) <> Неопределено) Тогда
    ЭтотУзел = ПланыОбмена.РИБ.ЭтотУзел();
    ВыборкаУзлов = ПланыОбмена.РИБ.Выбрать();
    Пока ВыборкаУзлов.Следующий() Цикл
    Если ВыборкаУзлов.Ссылка = ЭтотУзел Тогда
    Продолжить;
    КонецЕсли;
    НоваяСтрока = Источник.Выгрузка.Добавить();
    НоваяСтрока.Узел = ВыборкаУзлов.Ссылка;
    КонецЦикла;
    КонецЕсли;
    КонецПроцедуры
    </code>

    В документы добавил реквизит ТолькоПросмотр (тип Булево). Если значение реквизита Истина, то документ открывается только на просмотр.

    Создал пустые перефирийные базы с соответствующими узлами плана обмена. Узел Цент сделал главным (с помощью метода ПланыОбмена.УстановитьГлавныйУзел(Узел)).

    Создал обработку для выгрузки/загрузки данных в файл XML аналогичную рассмотренной в учебном матрериале.

    В центральной базе зарегистрировал изменения по всем объектам и перегрузил их в перефирийные базы (с помощью метода ПланыОбмена.ЗарегистрироватьИзменения(Узел)).

    В модуле объекта плана обмена РИБ реализован следующий функционал:
    При выгрузке данных из главной базы, отсекаются документы (и их движения по регистрам), у которых в табличной части Выгрузка для соответствующего узла не установлен реквизит Выгружать. Для этого используется обработчик события ПриОтправкеДанныхПодчиненному и вспомогательная фунция ВыгружатьДокумент:

    <code>
    Функция ВыгружатьДокумент(ДокументСсылка)
    Результат = Истина;
    Если ДокументСсылка.Метаданные().ТабличныеЧасти.Найти(“Выгрузка”) <> Неопределено Тогда
    ТЧ = ДокументСсылка.Выгрузка;
    СтрокаТЧ = ТЧ.Найти(ЭтотОбъект.Ссылка, “Узел”);
    Если СтрокаТЧ = Неопределено Тогда
    Результат = Ложь;
    Иначе 
    Если НЕ СтрокаТЧ.Выгружать Тогда
    Результат = Ложь;
    КонецЕсли;
    КонецЕсли;
    Иначе 
    Результат = Ложь;
    КонецЕсли;

    Возврат Результат;
    КонецФункции // ВыгружатьДокумент()

    Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза)

    Если Метаданные.Документы.Содержит(ЭлементДанных.Метаданные()) Тогда
    Если НЕ ВыгружатьДокумент(ЭлементДанных) Тогда
    ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать;
    КонецЕсли;
    ИначеЕсли Метаданные.РегистрыБухгалтерии.Содержит(ЭлементДанных.Метаданные()) ИЛИ
    Метаданные.РегистрыНакопления.Содержит(ЭлементДанных.Метаданные()) ИЛИ
    Метаданные.РегистрыРасчета.Содержит(ЭлементДанных.Метаданные()) Тогда

    Регистратор = ЭлементДанных.Отбор.Регистратор.Значение;
    Если НЕ ВыгружатьДокумент(Регистратор) Тогда
    ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать;
    КонецЕсли;

    ИначеЕсли Метаданные.РегистрыСведений.Содержит(ЭлементДанных.Метаданные()) Тогда

    Если ЭлементДанных.Метаданные().РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору Тогда
    Регистратор = ЭлементДанных.Отбор.Регистратор.Значение;
    Если НЕ ВыгружатьДокумент(Регистратор) Тогда
    ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать;
    КонецЕсли;
    Иначе 
    ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать;
    КонецЕсли;
    КонецЕсли;

    КонецПроцедуры
    </code>

    В перефирийных базах, при загрузке документов из цетральной базы, нужно сигнализировать о том что документ получен. Для этого в обработчике события ПриПолученииДанныхОтГлавного устанавливаем параметр ОтправкаНазад в значение Истина:
    <code>
    Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад)
    Если Метаданные.Документы.Содержит(ЭлементДанных.Метаданные()) Тогда
    ОтправкаНазад = Истина;
    КонецЕсли;
    КонецПроцедуры
    </code>

    При выгрзке данных из переферийных баз в центральную, отсекаем документы, созданные в текущей базе:
    <code>
    Процедура ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента)
    Если Метаданные.Документы.Содержит(ЭлементДанных.Метаданные()) И Найти(ЭлементДанных.Номер, Константы.ПрефикИБ.Получить()) > 0 Тогда
    ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать;
    КонецЕсли;
    КонецПроцедуры
    </code>

    В центральной базе при получении «сигнала» о том, что в переферийной базе был загружен документ, делаем этот документ недоступным для редактирования:
    <code>
    Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад)
    Если Метаданные.Документы.Содержит(ЭлементДанных.Метаданные()) 
    И ЭлементДанных.Метаданные().Реквизиты.Найти(“ТолькоПросмотр”) <> Неопределено Тогда

    ЭлементДанных.ТолькоПросмотр = Истина;
    КонецЕсли;
    КонецПроцедуры
    </code>

    Обратная связь:
    1. БОльшая часть материала главы была для меня новой.
    2, 3 Достаточно сложными были главы о правах доступа и работе с технологическим журналом. Хотелось бы увидеть различные примеры использоваия этих механизмов, не рассмотренные в учебном материале.

  5. Задание выполнил, долго отлаживал алгоритм, практики в РИБ не было. в жизни делал через КД. Создавал не табличную часть а регистр сведений, на мой взгляд не совсем понятно такое ограничения жесткое на документ который выгрузился, как быть если все же нужно в центре изменить документ если его уже выгрузили . Жаль что в курс не входит КД ))

    • >если все же нужно в центре изменить документ если его уже выгрузили
      В этом случае ничего не нужно запрещать изменять.
      Ну а коллизии будут разрешаться по правилу “Главный – подчиненный”.

  6. ДЗ №5 выполнено!

    1) Создал план обмена РИБ с реквизитами БУ и ЗП (булево), такие же реквизиты добавил всем документам. Создал два узла плана обмена БУХ и ЗУП, установил каждому соотвествующие флажки. Добавил константу ЦентральнаяИБ булевского типа (устанавливается только администратором в ЦБ, в обмене не участвует). Во все документы также добавил реквизит КорректировкаЗапрещена (булево) для учета изменений, сделанных в подчиненых ИБ.

    2) Создал обработку ОбменДанными (по аналогии с видеоуроками). Создал переферийные ИБ при помощи начального образа. На этом этапе проверил полный обмен и убедился что все ок.

    3) Реализовал отсев нужных документов для каждой ИБ. Также учел, чтобы при изменении флага принадлежности документа ИБ, “ошибочный” документ удалялся бы при обмене. Помимо этого фильтрую и регистры на соответствие регистраторов узлу назначения. В модуль плана обмена добавляю обработчик:

    <code>
    Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза)

    МетаданныеЭлемента = ЭлементДанных.Метаданные();

    Если Метаданные.Документы.Содержит(МетаданныеЭлемента) Тогда

    Если (БУ И НЕ ЭлементДанных.БУ) ИЛИ (ЗП И НЕ ЭлементДанных.ЗП) Тогда

    ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить;

    КонецЕсли;    

    ИначеЕсли Метаданные.РегистрыНакопления.Содержит(МетаданныеЭлемента)
    ИЛИ Метаданные.РегистрыБухгалтерии.Содержит(МетаданныеЭлемента)
    ИЛИ Метаданные.РегистрыРасчета.Содержит(МетаданныеЭлемента) Тогда

    Регистратор = ЭлементДанных.Отбор.Регистратор.Значение;

    Если (БУ И НЕ Регистратор.БУ) ИЛИ (ЗП И НЕ Регистратор.ЗП) Тогда

    ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить;

    КонецЕсли;    

    КонецЕсли;    

    КонецПроцедуры
    </code>

    4) Чтобы филиальные документы не попадали в ЦИБ использую обработчик ПриОтправкеДанныхГлавному, где фильтрую документы без обоих признаков БУ и ЗП.

    <code>
    Процедура ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента)

    МетаданныеЭлемента = ЭлементДанных.Метаданные();

    Если Метаданные.Документы.Содержит(МетаданныеЭлемента) Тогда

    Если НЕ ЭлементДанных.БУ И НЕ ЭлементДанных.ЗП Тогда

    ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать;

    КонецЕсли;    

    КонецЕсли;    

    КонецПроцедуры
    </code>

    Чтобы галки БУ и ЗП не могли изменить в филиалах, в обработчике при СозданииНаСервере модулей формы документов проверяю:

    <code>
    ЭтоЦентральнаяИБ = Константы.ЦентральнаяИБ.Получить();

    Элементы.БУ.ТолькоПросмотр = НЕ ЭтоЦентральнаяИБ;
    Элементы.ЗП.ТолькоПросмотр = НЕ ЭтоЦентральнаяИБ;
    </code>

    В принципе можно было и совсем их скрывать с формы.

    5) Для разрешения коллизии в соответствии с требованием задания задействовал обработчик ПриПолученииДанныхОтПодчиненного, в котором переопределяю стандартное поведение системы, и устанавливаю признак запрета корректировок документа в ЦИБ.

    <code>
    Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад)

    Если Метаданные.Документы.Содержит(ЭлементДанных.Метаданные()) Тогда

    ПолучениеЭлемента = ПолучениеЭлементаДанных.Принять;
    ЭлементДанных.КорректировкаЗапрещена = Истина;

    КонецЕсли;    

    КонецПроцедуры
    </code>

    Обработчик ПриСозданииНаСервере модулей формы документов принимает вид:

    <code>            
    ЭтоЦентральнаяИБ = Константы.ЦентральнаяИБ.Получить();

    Элементы.БУ.ТолькоПросмотр = НЕ ЭтоЦентральнаяИБ;
    Элементы.ЗП.ТолькоПросмотр = НЕ ЭтоЦентральнаяИБ;

    Если ЭтоЦентральнаяИБ И Объект.КорректировкаЗапрещена Тогда
    ТолькоПросмотр = Истина;
    КонецЕсли;    
    </code>

    • Обратная связь:
      1. Новое для меня в этом блоке: Работа с ТЖ, РЛС, Анализ и прогнозирование данных, Хранилище настроек.
      2. Долго втыкал РЛС, но в итоге все-таки воткнул :)
      3. Хотелось бы подробней про поставку и поддержку конфигураций. В частности про поддержку от нескольких поставщиков.

  7. Задание выполнено
    Создала План обмена РИБ с реквизитами БУ,ЗП типа Булево.  В базе созданы 3 узла, у каждого выставлен соответствующий флаг.
     Во все документы добавлены реквизиты БУ, ЗП и Выгружено типа Булево. В подчиненных узлах реквизиты БУ и ЗП не доступны.
     Создала обработку для загрузки/выгрузки как в просмотренном видео.
    Подчиненные узлы создавала из плана обмена – «Создать начальный образ».
    В модуле плана обмена созданы процедуры:
    – «ПриОтправкеДанныхПодчиненному»  – проверяю на истинность флага БУ или ЗП и соответствие флагу узла, в который идет выгрузка.
    – «ПриОтправкеДанныхГлавному» игнорируется отправка, если флаг БУ и ЗП равны Ложь, т.е. документ создан в подчиненном узле
    -«ПриПолученииДанныхОтПодчиненного» – устанавливаю реквизит Выгружено в Истина для документов
     – «ПриПолученииДанныхОтГлавного» –  для документов ОтправкаНазад=Истина
    В формах всех документах при открытии проверяю – если Выгружено=Истина, то форма открывается только на просмотр.
     Обратная связь.
    1. Узнала новое практически по каждой главе. Совсем новым было Функциональные опции, хранилище настроек, работа с технологическим журналом. Уже пригодилось на практике. Спасибо.
     2. Затруднения были в теме по логированию, RLS, обменам. Преодолевается все пересмотром материала несколько раз и практика нужна.
    3.Возможно RLS, трудно ответить

  8. Всех защитников Отечества поздравляю с праздником!

    Домашнее задание сделал.
    Создал план обмена Основной, установил признак распределенной информационной базы. В план обмена включил необходимые справочники, документы и регистры. Создал периферийные базы через создание начального образа.
    Создал РС ПравилаМиграции, измерение Документ (тип документСсылка), резурс Узел (тип ПланОбменаСсылка.Основной). Через подписку на событие ПередЗаписью для указанного списка документов в РС записывал узлы, по которым необходимо регистрировать изменения.
    Выгрузку измененных данных организовал при помощи обработки, как в видеоуроках.
    В процедуре ПриОтправкеДанныхПодчиненному() модуля обмена прописал выборку данных из регистра сведений ПравилаМиграции в зависимости от документа и узла. Если получаю пустую выборку, то документ в другие базы не мигрирует, поэтому выгружаются документы с указанными для них узлами.
    Чтобы обойти проблему коллизии, добавил в документы реквизит ЗапретНаредактирования, типа булево. Этот реквизит устанавливается в Истина в процедуре ПриПолученииДанныхОтГлавного() для дочерних баз и документ выгружается обратно в центральную базу (причем делается это всегда). В ПриПолученииДанныхОтПодчиненного() обрабатываются загруженные в дочках документы и, далее, при открытии документа (в модуле формы ПриСозданииНаСервере) если у документа этот признак истина – то его можно только просмотреть – ТолькоПросмотр = Истина. Хотя тут наверно можно было бы использовать подход через RLS, но не стал морочиться.

    Обратная связь.
    1. Узнал новое практически по каждой главе. С журналами регистрации раньше совсем не сталкивался. По RLS тоже были весьма поверхностные знания.
    2. Больше всего затратил времени на RLS и правила обмена, также помню долго бился с ДЗ, где нужно было фильтровать действия менеджеров при доступе к определенным документам. Часть уроков смотрел на перемотке из-за нехватки времени, буду пересматривать, т.к. боюсь упустить что-то важное.
    3. Затрудняюсь ответить, материала очень много, не успеваю осилить в нормальном режиме. Раньше мог смотреть диски и на работе, но теперь эта привязка к железу… надо было заказывать защищенные диски. Пиратов за свои мучения готов душить :)

  9. Всех с наступающим!
    1.Создал в конфигураторе план обмена “План РУ”, создал 2 в программе список из 2 баз. В качестве исходной бд взял БД после 4 ДЗ.
    1.1.Во все документы добавил булевы реквизиты РУ и ЗУ (рассматривал как вариант регистр сведений, но отказался, всё-же считаю что так лучше соблюдается лучше баланс размербазы – скорост обработок).
    1.2.Сохранил конфигурацию (файл cf) и посредством ней сделал пустую базу, в  новой базе сделал идентичный по кодам и именам список узлов бд и посредством обработки из 1 команды указал главный узел (в дальнейшем по итогам разных экспериментов ещё раз 5 делал стартовый образ, но уже посредством обработки –
    быстрее когда программа всё это делает сама).
    2.1.В процедуре “ПриОтправкеДанныхПодчиненному” модуля обмена устновил игнорировать всем кроме: отмеченных докуменитов (где использоватьь ЗУ где РУ решал в зависимости
    от кода узла), кроме регистров(бух, накопления, расчёт) ставил отправку игноре, а
    им удалить. С рег. сведений проверка чуть сложнее – если есть регистратор – делал
    такую-же провреку, если нет – передавал (хотя если разбираться – вожножно не
    совсем правильно).
    2.2. В “ПриПолученииДанныхОтГлавного” – устанавливал ОтправкаНазад только для
    документов.
    2.3. При “ПриОтправкеДанныхГлавному” ставил игноре всем кроме документов с установленым
    флажком ЗУ или РУ (т.е. те что были ранее импортированы).
    2.4.В документы добавил реквизиты ПолученоРУ и ПолученоЗУ  Булево, при получении от
    подчинённого устанавливаю значение соответствующего реквизита, при  азписи документа
    сбрасываю.
    2.5.Дальше логика такая: в процедуре “ПриСозданииНаСервере” если ПолученоРУ=РУ И
    ПолученоЗУ=ЗУ и кроме того хоть одно из Получено*  истино, то выполняю ЭтаФорма.ТолькоПросмотр = Истина;

    • По блоку:
      1.практически всё или совсем новое или значительно подробнее чем в базовом курсе.
      2.наибольшая проблемма – мало практики,  пока кроме повторов некоторых блоков решения нет.
      3.Всё нормально так дано, сложно выбрать…  ну может работа с метаданными.

    • С наступившим! :)

  10. Задание выполнил!
    Создал план  обмена “ПланОбменаРБД” с признаком распределнная ИБ и с автоматической регистраций объектов. Посоздавал дочерние БД созданием начального образа.
    Для возможности указывыть в какие узлы будет выгружаться документ создал регистр сведений “КудаВыгружать” с измерением “Документ” и ресурсом “Узел”, подключил его к формам документов на дополнительную закладку, установив перед этим отбор по текущему документу. Но почемуто в самой форме фильтр не сработал, а вот когда открываешь регистр там все правильно!!!
    Для выгрузки изменненных данных создал обработку  “ОбменДанными” – она практически совпадает с обработкой из уроков.
    В модуле Плана обмена  переопределил процедуры:
    ПриОтправкеДанныхПодчиненному где выбираются данные из регистра “КудаВыгружать” по параметрам документ и узел и если выборка пуста то игнорируется отправка элемента. Для определения выгружить ли записи регистра регистра просто устанавливаю параметры запроса “документ” – регистратором. Т.о. выгружаются только те документы где указаны узлы выгрузки.
    Для решения задачи по обработке коллизии в документы добавил реквизит ТолькоЧтение (булево) и перепределил процедуру модуля плана обмена ПриПолученииДанныхОтГлавного где я на стороне базы получателя для документов устанавливаю этот признак в Истина и отправляю назад на главную базу!!!! А в документе ПриОткрытии обрабатываю этот признак и если он истина то документ становится в режим ТолькоПросмотр! Т.о. у меня после подтверждения об успешной загруке документ в Центральной базе нельзя редактировать!

    • Обратная связь!
      Для меня интересна и очень актуальна была информация по конфигурациям и обновлению конфигураций! Также много нового я узнал о размещении конфигурационных файлов и технологическом журнале.
      Больше всего конечно пришлось посидеть над RLS и обменами. И их бы хотелось более подробно рассмотреть в МГ.

  11. Создал новый план обмена РИБ, установил признак «Распределенная информационная база» включил в него все документы, нужные справочники  и регистры накопления, бухгалтерии и расчетов. Во все документы добавил новую табличную часть «Узлы обмена» с единственным реквизитом Узел типа «ПланОбменаСсылка.РИБ» и обеспечил вывод этой табличной части на управляемые формы документов. Поскольку сами планы обмена не участвуют в обмене, то для того чтобы в подчиненных узлах в табличных частях «Узлы обмена» не создавались битые ссылки в процедуре «ПриПолученииДанныхОтГлавного» я очищал данные табличные части, кроме того при открытии форм документов в подчиненных узлах страницу с табличной частью «Узлы обмена» делал не видимой.
    Создал подписку на событие перед записью для документов в которой запросом с помощью полного соединения текущего состояния табличной части и сохраненного в базе получал список узлов, для которых необходимо зарегистрировать изменения. Цель данного запроса обработать следующую ситуацию: Из центрального узла в подчиненный был выгружен документ, но подтверждение о загрузке еще не пришло в центральный (т.е. документ пока доступен для изменения), в это время в центральном узле отредактировали в документе список узлов и удалили из него подчиненный, для того чтобы событие об удалении было отправлено в подчиненный узел и понадобилось полное соединение в запросе. Кроме того в процедуре «ПриОтправкеДанныхПодчиненному» создал функцию проверяющую если узел отсутствует в табличной части документа то ОтправкаЭлементаДанных.Удалить. Для реализации схемы одностороннего обмена в обработчике события у подчиненных узлов я очищал коллекцию «Получатели» для предотвращения выгрузки изменений.
    Далее началась самая сложная часть с получением в центральном узле подтверждений о принятии документов в подчиненных узлах. Все мои ухищрения с установкой свойств ОбменДанными в процедуре «ПриПолученииДанныхОтГлавного» не увенчались успехом. Система успешно отправляла и получала данные об успешной загрузке, очищая таблицы изменений соответствующих документов, но как перехватить это событие в центральном узле было не понятным.
    Решил задачу следующим образом, создал регистр сведений «ВыгруженныеДокументы» с измерениями «Узел» и «Документ» в обработке обмена данными перед выгрузкой изменений динамически строил запрос по таблицам изменений всех документов входящих в план обмена и результат этого запроса сохранял в этом регистре сведений. При загрузке данных из подчиненного узла снова строил запрос, но на этот раз к регистру сведений «ВыгруженныеДокументы» левым соединением присоединял данные из таблиц изменений документов с условием ЗапросПоДокументам.Ссылка ЕСТЬ NULL таким образом получая документы которые были удалены из таблиц изменений, т.е. были успешно загружены подчиненными узлами. Данные документы я удалял из регистра сведений «ВыгруженныеДокументы» и добавлял в регистр сведений «ЗапретИзмененияДокументов» с одним измерением «Документ», который, как видно из его названия, использовался для ограничения изменения выгруженных документов. Само ограничение я реализовал в виде RLS на право «Изменение» у всех документов.
    Обратная связь:
    1.  Что нового я узнал в нулевом  блоке или в чем поменялись взгляды после изучения материала?
    Новыми для меня были темы по функциональным опциям, групповая разработка конфигураций, права доступа, анализ и прогнозирование данных, средства обмена данными, хранилище настроек.
    2. В какой теме были наибольшие затруднения, и что помогло их преодолеть?
    Затруднений не возникло.
    3.  Какую тему, имеющую отношение к текущему блоку, вы  бы хотели подробнее раскрыть в мастер-группе?
    Здесь я хотел бы еще раз поднять следующий организационный: для меня было бы полезно при планировании знать, по каким темам будут ДЗ, сколько их будет у каждого блока, планируемые даты их выкладывания. Сделать это не сложно, но в чем-то видимо сложности есть, поскольку такого план-графика нет. А он хорошо бы помог спланировать работу.

    • Андрей, в записи https://mg.spec8.ru/?p=1569 есть план-график продвинутого курса.
      Сделали специально по вашей просьбе, в коментах я Вам давал ссылку, видимо пропустили..

      • Извините Евгений,  видимо пропустил, спасибо.

      • Вот реально очень полезный список! Позволят правильно спланировать темп изучения новых глав!

  12. Задание выполнено.
    1.Создал план обмена (РИБ). У него, а также у всех документов определил реквизиты-флаги – РУ, ЗП, причем отображаются они только для главного узла.
    В плане обмена для каждого узла выставляется соотв.флаг.  Т.о. задается связь выгрузки документа из центральной базы в подчиненную.
    2.В МО плана обмена в событии ПриОтправкеДанныхПодчиненному проверяется, если у Элемента Данных не выставлены флаги, или флаг РУ(ЗП)<>ЭтотОбъект.РУ(ЗП), то элемент игнорируется.
    В событии ПриПолученииДанныхОтГлавного для документов всегда ОтправкаНазад = Истина.
    Т.к. в документах, созданных в подчиненных узлах, флаги РУ, ЗП всегда сброшены, а в документах, созданных в центре, хотя бы один выставлен, то в событии ПриОтправкеДанныхГлавному отправка элемента игнорируется, если  НЕ (ЭлементДанных.РУ ИЛИ ЭлементДанных.ЗП).
    Для хранения информации о том, что документ был выгружен в подчиненную базу, сначала использовал еще один реквизит-флаг в документах и в обработчике ПриПолученииДанныхОтПодчиненного выставлял его в истину. Но не понравилось по причине невозможности быстро перевести открываемую форму документа в режим редактирования, когда на документ уже наложено ограничение ТолькоПросмотр = Объект.Выгружен.
    Поэтому использовал РС с измерениями Документ, Узел и булевым ресурсом Выгружен. Соответственно, при открытии формы делается запрос из РС по ссылке,
    далее ТолькоПросмотр = Выборка.Выгружен. А в самом обработчике ПриПолученииДанныхОтПодчиненного делается запрос в РС по ЭлементДанных.Ссылка. И если результат пустой, тогда добавляется запись в РС,
    в противном случае ПолучениеЭлемента = Игнорировать.
    3.Создал обработку, управляющую обменом между узлами. Подчиненные базы создал выгрузкой конфигурации центральной базы, в обработке добавил команду УстановитьГлавныйУзел для них.
    4.Для исключения коллизии с номерами документов из разных узлов, использовал константу для хранения префикса, и в подписке на событие перед записью контролирую заполнение номера.
    Обратная связь.
    1.Очень много нового, полезного и интересного.
    2.Некоторые затруднения возникли в темах по обмену данными, РИБ ввиду большого объема информации. Лечится пересмотрами материала. 
    3.Хотелось бы увидеть развитие темы про RLS.

    • С разрешения Евгения несколько комментариев.
      По п.1 такое решение не очень универсально, а если добавиться еще один узел, получается снова менять структуру данных добавляя новые флаги.
      По п.1, из подчиненного узла информация о изменениях документа попадает в файл выгрузки только при интерактивном изменении документа в подчиненном узле, а в случае просто успешной загрузки документов из центрального узла в файл подтверждения для центрального узла информация о загруженных объектах не выгружается, файл содержит просто заголовок с номерами успешно принятого сообщения поэтому в процедуре ПриПолученииДанныхОтПодчиненного этих данных не будет. В связи с этим вопрос: Каким образом вы добились, чтобы данные о загруженных документах выгружались в файл подтверждения приема для центрального узла?

      • В событии ПриПолученииДанныхОтГлавного всегда отсылаю документ обратно, т.е. выставляю флаг ОтправкаНазад. Сейчас специально проверил – создал новый документ в центре,  в обработке центр. ИБ  нажал Выгрузить, далее в обработке  подчиненной ИБ нажал Загрузить, тут же нажал Выгрузить, и в центре – Загрузить. В результате документ в центр. ИБ встает на замок. Да и в самом xml-файле от подчиненного узла виден возвращаемый документ.

        • Я делал то же самое, устанавливал параметр ОтправкаНазад, но у меня ничего назад не выгружалось. Я было подумал. что это свойство как то по другому работает. Спасибо, за ответ если у вас работает, то значит у меня где-то ошибка. Буду искать.

          • Разобрался почему не работало. В процедуре подписки на событие перед записью я очищал список получателей, для подчиненных узлов поэтому ОтправкаНазад не отрабатывала. Но в результате этой ошибки получилось не плохое решение очевидным плюсом которого является то, что нет необходимости пересылать документы из подчиненных узлов обратно в центр в результате файл выгрузки от подчиненных узлов будет небольшим (содержит только информацию о принятом сообщении) по объему.