Продвинутый курс. Занятие №5

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

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

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

Если не активировали токен — посмотрите видео-инструкцию (видео N5)

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

комментариев 27 на “Продвинутый курс. Занятие №5”

  1. Задание выполнила. Во все документы добавлена табличная часть Выгрузка с реквизитом БазыДляВыгрузки. Во всех объектах включена авторегистрация изменений. В событии ПриОтправкеДанныхПодчиненному для документов и регистов(по их регистратору) обхожу табличную часть с проверкой на равенство ЭтотОбъект.  В процедуре ПриОтправкеДанныхГлавному игнорирую отправку элемента. Каркас обработки для загрузки/выгрузки взяла из уроков. Вот с запретом редактирования док-то в ЦБ красиво не получилось. При получении сообщения в обработке через ПланыОбмена.ВыбратьИзменения для выбранного узла проверяю перечень документов в сообщениях от НомерПринятого до НомерОтправленного и заношу их в регистр сведений. Потом при открытии документа для определения ТолькоПросмотра в ЦБ смотрю наличие в регистре.

  2. Добрый день.
    Вопрос по хранилищу настроек. Последний и предпослений урок видео, глава 25. сохранение ком.интерфейса.
    Делаю как у вас в уроке – не получается.
    1. когда делаете восстановление интерфейса используете метод “сохранить” и 3им параметром передаете не саму настройку , а хранилище значения.  хотя вроде работает и хранилище…
    2. у меня метод “обновить интефейс” не работает. помогает только перезаход в программу.  ведь это метод (в справке) для функциональных опций.
    как у вас это работало?
     

    • и еще вопрос.
      изменил форму документа – добавил колонку в табл.части. как достать настройку этого документа? походу все перепробовал – везде “неопределено”.

      • Пробовали использовать настройку формы в системном хранилище?
        Ключ объекта примерно такой:
        Документ.РасходнаяНакладная.Форма.ФормаДокумента/НастройкиФормы

    • 1. Да, точно. Интересно, что работает и хранилищем.

      2. Почему у Вас не работает? СП как всегда не договаривает.
      Можете взять конфигурацию после 0-го модуля и увидеть, что все прекрасно обновляется.

      • по п.2
        я взял базу ДЗ5 и там сделал в точности как было описано в последнем и предпоследних уроках 25главы.  настройки сохраняются и восстанавливаются. Когда открываешь настройки панели навигации, то видно, что настройки восстановились и по кнопке “ОК” интерфейс обновляется. Но программно метод “ОбновитьИнтерфейс” этого не делает.
        Обновился до 8.2.14.519 – эффекта нет.
        вот весь текст модуля формы:

        &НаКлиенте
        Процедура ВыгрузитьИзИнтерфейса(Команда)
        // Вставить содержимое обработчика.
        ВыгрузитьИзИнтерфейсаНаСервере();

        КонецПроцедуры

        &НаСервере
        Процедура ВыгрузитьИзИнтерфейсаНаСервере()
        Настройка = ХранилищеСистемныхНастроек.Загрузить(“Подсистема.УпрУчет/ПанельНавигации/НастройкиКомандногоИнтерфейса”);

        СпрОбъект = РеквизитФормыВЗначение(“Объект”);
        СпрОбъект.Настройка = Новый ХранилищеЗначения(Настройка);
        ЗначениеВРеквизитФормы(СпрОбъект, “Объект”);

        КонецПроцедуры

        &НаКлиенте
        Процедура ЗагрузитьВИнтерфейс(Команда)
        // Вставить содержимое обработчика.
        ЗагрузитьВИнтерфейсНаСервере();

        ОбновитьИнтерфейс();
        КонецПроцедуры

        &НаСервере
        Процедура ЗагрузитьВИнтерфейсНаСервере()
        // Вставить содержимое обработчика.
        СпрОбъект = РеквизитФормыВЗначение(“Объект”);

        ХранилищеСистемныхНастроек.Сохранить(“Подсистема.УпрУчет/ПанельНавигации/НастройкиКомандногоИнтерфейса”, “”, СпрОбъект.Настройка)
        КонецПроцедуры

        • Спасибо за детальный анализ.
          Действительно, есть проблема с обновлением интерфейса.
          Как выяснилось в конфигурации курса используются функциональные опции, и они способствуют обновлению интерфейса (причем связь не совсем прямая).
          Сейчас разбираемся, есть ли возможность как-то по другому обновить интерфейс.

  3. respublica 26.06.2011 в 20:50

    Задание выполнил. С настройкой обмена и созданием обработки пришлось повозиться… Мое решение похоже на то, что представлено в решении, отличия – для пометки успешности выгрузки документа использовал булевский реквизит, который инициализировал в истину при загрузке в подчиненном узле и допущение, что документы главного в подчиненных не редактируются.
    Отзывы о нулевом блоке:
    1. Узнал много нового: о принципах работы с ЖР , ТЖ и обмена данными, что отладка на сервере достаточно проста и как используются показатели производительности и еще многое…
    2. Средства обмена данными, РИБ. Нет уверенности, что до конца преодолел все трудности и ясно понимаю всю механику обмена данными средствами платформы 1С.
    3. Средства обмена через веб-сервисы.

  4. Задание выполнено.
    Односторонний обмен в РИБ реализован с помощью событий модуля объекта плана обменов.  Используются следующие события:
    1.  ПриОтправкеДанныхГлавному() – игнорирование отправки всех объектов, т.к. в  дочерние узлы изменения не передаются.
    2. ПриОтправкеДанныхПодчиненному() – фильтрация объектов по узлам назначения.
    Для хранения узлов назначения используется табличная часть “УзлыНазначения”.
    Реализована обработка выгрузки/загрузки данных, абсолютно стандартно.
    Начальные пустые образы дочерних баз получены с помощью загрузки конфигурации и установки главного узла.
    Для уменьшения объема хранимых данных авторегистрация изменений выключена.  Получатели изменений заполняются на основе анализа узлов назначения документа.
    Обратная связь.
    1.  Нового очень много:
    – технологический журнал;
    – функциональные опции;
    – распределенные информационные базы;
    – хранилище настроек.

    2.  Самая объемная тема –  средства обмена данными и РИБ.

    3.  Тема мастер-группы/ мини-курс – использование конфигурации “Конвертация данных”.
     
     

  5. Домашнее задание выполнено.
    Создан план обмена, в который, помимо предопределенного узла, добавлены еще два: регламентированная база и база расчета ЗП. В состав плана обмена включены (с авторегистрацией) все документы и связанные с ними объекты, включая регистры. Для возможности указания, в какие узлы будут выгружаться документы, добавлен регистр сведений “УзлыВыгрузкиДокументов” с измерениями “Документ” (ссылка на документ), “Узел” (ссылка на узел) и с булевским ресурсом “Выгружать”; в состав плана обмена данный регистр не включается. Для плана обмена в событии “ПриОтправкеДанныхПодчиненному” проверяется, имеются ли для выгружаемого документа соответствующие строки в регистре сведений. Если для текущего узла такие строки не найдены (либо не стоит галочка “Выгружать”), то в текущий узел посылается “УдалениеОбъекта” – для учета ситуации, если пользователь поменяет узел выгрузки или значение флага в регистре сведений. Точно так же учитываются регистры, регистраторами которых служат документы, включенные в план обмена. Чтобы новые документы, созданные в подчиненных узлах, не попадали в главный узел, сделана подписка на событие “ПередЗаписью” для всех документов. В подписке проверяется: если мы находимся в подчиненном узле, то очищаются получатели для свойства “ОбменДанными” документа. Кроме того, с помощью коллекции “Движения” осуществляется обход наборов записей регистров для данного документа, для каждого набора выставляется свойство получателей “Автозаполнение” в значение “Ложь”, потом получатели очищаются. Чтобы реализовать третье требование, пришлось в регистр сведений “УзлыВыгрузкиДокументов” добавить реквизит, в котором хранится номер последнего сообщения, в котором был передан данный документ в конкретный узел. Получается следующая схема. Пусть документ Д выгружается в узел У в сообщении №1. После выгрузки данных имеем запись: Документ = Д, Узел = У, Выгружать = Истина, НомерСообщения = 1. Подобная запись появится в таблице изменений документов данного вида; однако при загрузке подтверждения от узла У данная запись исчезнет. Тогда в подписке “ПередЗаписью” анализируем: если мы находимся в главном узле, номер последнего сообщения для данного документа <> 0 и в таблице изменений нет соответствующей записи, то данный документ был успешно выгружен в подчиненный узел и менять его нельзя. Также создана обработка для обмена данными.

    • Обратная связь:
      1. Практически весь материал нулевого блока был для меня новым.
      2. Затруднения вызвали темы, связанные с обменом данными, RLS. Понимание пришло после выполнения ДЗ.
      3. Было бы очень интересно посмотреть мастер-группу, посвященную основам работы с “Конвертацией данных”.

  6. Задание, пусть и с опозданием, но выполнил.
    1. Создал план обмена, в состав включены все документы, регистры остатков. В модуле в событии ПриОтправкеДанныхГлавному игнорирую выгрузку всех данных (для отправки в центр только подтверждения приема без новых объектов), в событии ПриПолученииДанныхОтПодчиненного устанавливаю новый реквизит  ТолькоПросмотр для документа.
    2. Во все документы добавил по табличной части УзлыВыгрузки с одним реквизитом Узел(тип ПланОбмена)
    3. В подписке на событие перед записью документа проверяю, если ли тч УзлыВыгрузки, и если есть, то корректирую свойство ОбменДанными.Получатели по содержимому этой табличной части. Если тч нет, то Получателей обнуляю.
    4. Создал узлы согласно структуре плана обмена. В обработке: выгрузка, загрузка, очистка регистрации изменений, установка главного узла.
    Результат работы проверен, работает вроде как надо.
    Пошел смотреть решение..

  7. Задание выполнил.
    Добавил в конфигурацию план видов обмена с установленным признаком распределенные базы данных. Добавил в документы возможность указания в какой узел происходит выгрузка, возможность была реализована добавлением новой табличной части в которой указывается узел обмена. Создал подписку на события на документы участвующие в обмене.  Так же добавил подписку на события для регистров накопления. Для документов и регистров участвующих в обмене запретил автоматическую регистрацию изменений.
    Для указания узлов для которых будет производится выгрузка добавил реквизит «Узел»  тип ПланыОбменаСсылка в документы , но в данном случае документ мог бы попадать только в один узел , переделал, добавив табличную часть «Обмен» в документы, в табличную часть можно было бы добавить несколько узлов.
    При записи документа, произвожу перебор табличной части «Обмен» и получаю узлы для которых требуется произвести выгрузку. Для полученных узлов в свойстве документа ОбменДанными добавляю узлы получателей.
    Для форм документов которые были загружены в периферийную базу устанавливаю свойство ТолькоПросмотр , использовал для этого метод  ИзменениеЗарегистрировано() плана обмена.
    В обработке для выгрузки и загрузки данных XML использовал, методы ПланаОбмена, ЗаписатьИзменения и ПрочитатьИзменения.
    Обратная связь по нулевому блоку:

    Практически весь материал оказался для меня новым.
    Затруднений практически не было, единственная сложность это выделить время на просмотр курсов.
    Информации достаточно  большое количество, я считаю материала достаточно.

  8. Создал план обмена РИБ. В состав плана обмена включил практически все объекты, за исключением справочника Пользователи и служебных объектов связанных с регистрацией изменений по ценам.
    Создал две ветки без данных и программно отметил в них главный узел.
    Создал обработку по выгрузке и загрузке данных обмена, аналогично той, что была в уроках по РИБ.
    Для настройки плана обмена выполнил следующее:
    1. Для документов авторегистрацию запретил. В модуле объекта плана обмена в событии ПриОтправкеДанныхПодчиненному, проверяю необходимость выгрузки наборов записей регистров, в зависимости от того входит ли регистратор в состав выгружаемых данных или нет.
    Ничего более приличного, чем добавить два флага во все документы – Регламентированный и ЗПиКадры не придумал. Вывел их на формы документов. Их видимость настроил по функциональной опции ЦентральныйУзелРИБ.
    2. При записи документа программно добавляю узлы получатели, для которых необходимо зарегистрировать изменения.
    3. Добавил во все документы флаг БлокироватьИзменения. Флаг выставляется в истину в подписке на событие перед записью документа в подчиненном узле и регистрируется изменение для центрального узла.
    Если НЕ Константы.ЦентральныйУзелРИБ.Получить() Тогда
    Если Источник.ОбменДанными.Загрузка Тогда
    Источник.БлокироватьИзменения = Истина;
    Источник.ОбменДанными.Получатели.Добавить(ПланыОбмена.РИБ.НайтиПоКоду(“777”));
    КонецЕсли;
    Иначе
    Если НЕ Источник.ОбменДанными.Загрузка Тогда
    Отказ = Источник.БлокироватьИзменения;
    КонецЕсли;
    КонецЕсли;

  9. Мне немного не понятен вот этот момент в задании: для всех документов базы ЦО нужно иметь возможность указать, в какие узлы его выгружать… А зачем тогда вверху расписаны подчиненные базы(именно какие документы туда должны попадать). Какой смысл если пользователь пометит документ ПоступленияТоваров в базу КадровИЗП ?

    • Смысла в подобной отметки нет.
      Будем считать, что действия пользователей будут сознательными. При желании можно жестко распределить виды документов по определенным узлам плана обмена, но пользователь все же должен иметь возможность указания узлов для выгрузки (только среди доступных).

  10. Задание выполнено. В целом, особых сложностей не возникло.
    Создан план обмена РИБ с признаком распределенной базы. В каждом документе (кроме Операции) созданы булевы реквизиты – признаки выгрузки в регламентированную и кадровую базы. Также создан регистр сведений, в котором хранится информация о документах, успешно принятых в соответствующих узлах.
    В плане обмена в состав включены все документы кроме Операции, регистры накопления и расчета, а также все связанные с ними объекты. Для всех объектов разрешена авторегистрация. Отсев ненужных для выгрузки объектов происходит в момент самой выгрузки в обработчике события ПриОтправкеДанныхПодчиненному. Если объект соответствует документу или набору записей, то анализируется признак выгрузки в документе (регистраторе набора), и при необходимости, данный объект игнорируется. Так как обмен производится только в одну сторону, то в обработчике события ПриОтправкеДанныхГлавному происходит безусловное игнорирование.
    Создана обработка для выгрузки / загрузки по плану распределенной базы, аналогично показанной в уроках. Дополнительно при загрузке в главном узле выбираются все документы, для которых зарегистрировано изменение в узел, от которого получены данные и с непустым номером сообщения, меньшим или равным номеру принятого сообщения. Эти документы заносятся в регистр сведений как успешно полученные и в дальнейшем при открытии их форм запрещается редактирование.

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

  11. Признак выгрузки указывается с помощью реквизита документа, которому соответствует реквизит плана обмена. Поскольку один документ, судя по всему, может выгружаться в оба дочерних узла, придется добавить два реквизита типа булево. Для документов и регистров с подчинением регистратору авторегистрация запрещена, для прочих объектов передаются все изменения. Регистрация изменений документа происходит с помощью процедуры ВыполнитьРегистрациюДокумента(Отказ, Документ) в событии ПерезЗаписью() документа. В главном узле в зависимости от наличия документа в регистре выгруженных документов устанавливается свойство “Отказ”, если запись  возможна, происходит регистрация в зависимости от признаков выгрузки, здесь же регистрируются наборы записей движений документа. В дочерних узлах при ОбменДанными.Загрузка=истина регистрируется только документ для отправки в главный узел. Регистр “Выгруженные документы” в состав плана обмена не входит, заполняется в событии ПриПолученииДанныхОтПодчиненного(), имеет одно измерение типа “ДокументСсылка”. 
    Не нашла времени проверить, но кажется в 8.1 свойство “ОтправкаНазад” в процедуре ПриПолученииДанныхОтГлавного() работало независимо от установок авторегистрации. А здесь при запрете авторегистрации оно не срабатывает. Почему? В справке об этом не говорится.

    1. Глава 17, 21, 22, 25. Полезные приемы работы при обновлении и постановке на поддержку конфигураций.
    2. Директивы компиляции. Технологический журнал.
    3. Обмен данными или РИБ. Не совсем по теме: механизм XDTO и как можно его использовать.

    • > А здесь при запрете авторегистрации оно не срабатывает. Почему?
      То есть в вашем случае для документов и регистров параметр ОтправкаНазад не срабатывает?

      • Не срабатывает, если в плане обмена указано Авторегистрация=запретить. Если авторегистрация разрешена, то срабатывает.  Релиз платформы 8.2.11.236.

        • А могли бы Вы обновить релиз платформы и сообщить результат? Все-таки множество ошибок было исправлено в последней сборке 13-го релиза.

  12. Кононов Сергей 19.05.2011 в 15:58

    Задание выполнено.
    1. Был создан план обмена РИБ с указанным свойством распр. инф. база и с реквизитами РегламентированныйУчет и КадрыИЗП, оба реквизита типа булево. Эти же реквизиты были созданы у всех документов и помещены на форму. По этим реквизитам и будет строиться мое дальнейшее решение. То есть если пользователь укажет в документе один или оба этих реквизита, то этот документ соответственно будет выгружен в узел. Каждому узлу также следует проставить галочки.
    2. Создал обработку по выгрузке и загрузке данных. Создал узлы и их начальные образы интерактивно. Далее описал выгрузку и загрузку данных таким же образом, как и в уроках.
    3. Далее я отфильтровываю документы и регистры с подчинением регистратору в зависимости от указания узла выгрузки (в моем случае это галочки выше описанные). Делаю я это модуле объекта плана обмена РИБ след. образом:
    </cod>
    Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза)

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

    Если Метаданные.Документы.Содержит(МетаЭлемент) Тогда
    Если НЕ ((РегламентированныйУчет И МетаЭлемент.Реквизиты.Найти(“РегламентированныйУчет”)<> Неопределено И ЭлементДанных.РегламентированныйУчет)
    ИЛИ
    (КадрыИЗП И МетаЭлемент.Реквизиты.Найти(“КадрыИЗП”)<> Неопределено И ЭлементДанных.КадрыИЗП)) Тогда

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

    КонецЕсли;
    КонецЕсли;

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

    КонецПроцедуры
    Процедура ОчиститьНабор(ЭлементДанных)
    Регистратор = ЭлементДанных.Отбор.Регистратор.Значение;
    МетаРегистратор = Регистратор.Метаданные();
    Если НЕ ((РегламентированныйУчет И МетаРегистратор.Реквизиты.Найти(“РегламентированныйУчет”)<> Неопределено И Регистратор.РегламентированныйУчет)
    ИЛИ
    (КадрыИЗП И МетаРегистратор.Реквизиты.Найти(“КадрыИЗП”)<> Неопределено И Регистратор.КадрыИЗП)) Тогда

    ЭлементДанных.Очистить();

    КонецЕсли;
    КонецПроцедуры // ()
    </cod>
    Отбираются все документы или наборы записей, которые не принадлежат данному узлу и посылается информация об их удалении/очищении в узел. Таким образом в узел отправляются только нужные документы и наборы записей. Соответсвтенно отправляются и другие объекты, которые присутствуют в составе плана обмена.
    Решая задачу оповещения дочерними узлами об удачном приеме сообщения и в то же время не выгружая в Центр свои данные я решил следующим образом. В модуле объекта план обмена РИБ написал следующий код:
    <cod>
    Процедура ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента)
    ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать;
    КонецПроцедуры
    </cod>
    4. Последняя задача, связанная с коллизией была мною решена с помощью объекта метаданных Подписка на события. Идея заключалась в том, чтобы перед записью документа проверять, а не был ли он уже выгружен в какой-либо узел. И если он выгружен, то запрещать запись.
    Для этого я создал подписку на событие,  указал источник ДокументОбъект, так как все документы меня интересуют. Выбрал событие документов  ПередЗаписью и в созданном серверном общем модуле описал это событие:
    <cod>
    Процедура ЗапретРедактированияДокументаПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт

    СсылкаНаДокумент = Источник.Ссылка;

    Если СсылкаНаДокумент.Пустая() Тогда
    Возврат;
    КонецЕсли;

    ГлУзел = ПланыОбмена.ГлавныйУзел();
    Если ГлУзел<>Неопределено Тогда
    Возврат;
    КонецЕсли;

    Если Не СсылкаНаДокумент.РегламентированныйУчет И Не СсылкаНаДокумент.КадрыИЗП Тогда
    Возврат;
    КонецЕсли;

    Запрос = Новый Запрос;
    Запрос.Текст =
    “ВЫБРАТЬ
    | РИБ.Ссылка,
    | ВложенныйЗапрос.Док
    |ИЗ
    | ПланОбмена.РИБ КАК РИБ
    | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    | ПоступлениеТоваровИУслугИзменения.Узел КАК Узел,
    | ПоступлениеТоваровИУслугИзменения.Ссылка КАК Док
    | ИЗ
    | Документ.ПоступлениеТоваровИУслуг.Изменения КАК ПоступлениеТоваровИУслугИзменения
    | ГДЕ
    | ПоступлениеТоваровИУслугИзменения.Ссылка = &СсылкаНаДокумент) КАК ВложенныйЗапрос
    | ПО (ВложенныйЗапрос.Узел = РИБ.Ссылка)
    |ГДЕ
    | РИБ.Ссылка <> &ГлУзел
    | И ВложенныйЗапрос.Док ЕСТЬ NULL “;
    Запрос.Текст = СтрЗаменить(Запрос.Текст, “ПоступлениеТоваровИУслуг”, Источник.Метаданные().Имя);
    Запрос.УстановитьПараметр(“ГлУзел”, ПланыОбмена.РИБ.ЭтотУзел());
    Запрос.УстановитьПараметр(“СсылкаНаДокумент”, СсылкаНаДокумент);
    Результат = Запрос.Выполнить().Выбрать();
    Если Результат.Следующий() Тогда
    Отказ = Истина;
    Сообщить(“Запрет редактирования!”);
    КонецЕсли;
    КонецПроцедуры
    </cod>
    В процедуре я проверяю, не новый ли элемент и в главной ли я базе нахожусь (по условию ТЗ). Так же  я проверяю, а указан ли какой-либо узел у документа. Если узел указан, то выполняется проверка на то, зарегистрированы ли изменения, то есть  объект отправлялся или он ожидает подтверждения, что успешно выгружен. В зависимости от этого и запрещаю запрет на редактирование.
    P.S.
    1. Нового я много  узнал, каждая тема мне дала кучу информации. Опять же как и в базовом блоке  все продолжает выстраиваться и пониматься на уже на более высоком  уровне .
    2. Затруднения были в теме о технологическом журнале, но разобрался. Помощь в этом оказывают домашние задания.
    3. Если у вас припасена еще дополнительно интересная информация по темам технологического журнала и плана обмена, то интересно  было бы ознакомиться с ней в какой-либо мастер группе.

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

    1. Был создан план обмена РИБ с указанным свойством распр. инф. база и с реквизитами РегламентированныйУчет и КадрыИЗП, оба реквизита типа булево. Эти же реквизиты были созданы у всех документов и помещены на форму. По этим реквизитам и будет строиться мое дальнейшее решение. То есть если пользователь укажет в документе один или оба этих реквизита, то этот документ соответственно будет выгружен в узел. Каждому узлу также следует проставить галочки.
    2. Создал обработку по выгрузке и загрузке данных. Создал узлы и их начальные образы интерактивно. Далее описал выгрузку и загрузку данных таким же образом, как и в уроках.
    3. Далее я отфильтровываю документы и регистры с подчинением регистратору в зависимости от указания узла выгрузки (в моем случае это галочки выше описанные). Делаю я это модуле объекта плана обмена РИБ след. образом:
    </cod>
    Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза)

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

    Если Метаданные.Документы.Содержит(МетаЭлемент) Тогда
    Если НЕ ((РегламентированныйУчет И МетаЭлемент.Реквизиты.Найти(“РегламентированныйУчет”)<> Неопределено И ЭлементДанных.РегламентированныйУчет)
    ИЛИ
    (КадрыИЗП И МетаЭлемент.Реквизиты.Найти(“КадрыИЗП”)<> Неопределено И ЭлементДанных.КадрыИЗП)) Тогда

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

    КонецЕсли;
    КонецЕсли;

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

    КонецПроцедуры
     
    Процедура ОчиститьНабор(ЭлементДанных)
     
    Регистратор = ЭлементДанных.Отбор.Регистратор.Значение;
    МетаРегистратор = Регистратор.Метаданные();
    Если НЕ ((РегламентированныйУчет И МетаРегистратор.Реквизиты.Найти(“РегламентированныйУчет”)<> Неопределено И Регистратор.РегламентированныйУчет)
    ИЛИ
    (КадрыИЗП И МетаРегистратор.Реквизиты.Найти(“КадрыИЗП”)<> Неопределено И Регистратор.КадрыИЗП)) Тогда

    ЭлементДанных.Очистить();

    КонецЕсли;
     
    КонецПроцедуры // ()
     
    </cod>
    Отбираются все документы или наборы записей, которые не принадлежат данному узлу и посылается информация об их удалении/очищении в узел. Таким образом в узел отправляются только нужные документы и наборы записей. Соответсвтенно отправляются и другие объекты, которые присутствуют в составе плана обмена.
    Решая задачу оповещения дочерними узлами об удачном приеме сообщения и в то же время не выгружая в Центр свои данные я решил следующим образом. В модуле объекта план обмена РИБ написал следующий код:
    <cod>
    Процедура ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента)
    ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать;
    КонецПроцедуры
    </cod>
    4. Последняя задача, связанная с коллизией была мною решена с помощью объекта метаданных Подписка на события. Идея заключалась в том, чтобы перед записью документа проверять, а не был ли он уже выгружен в какой-либо узел. И если он выгружен, то запрещать запись.
    Для этого я создал подписку на событие,  указал источник ДокументОбъект, так как все документы меня интересуют. Выбрал событие документов  ПередЗаписью и в созданном серверном общем модуле описал это событие:
    <cod>
    Процедура ЗапретРедактированияДокументаПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт

    СсылкаНаДокумент = Источник.Ссылка;

    Если СсылкаНаДокумент.Пустая() Тогда
    Возврат;
    КонецЕсли;

    ГлУзел = ПланыОбмена.ГлавныйУзел();
    Если ГлУзел<>Неопределено Тогда
    Возврат;
    КонецЕсли;

    Если Не СсылкаНаДокумент.РегламентированныйУчет И Не СсылкаНаДокумент.КадрыИЗП Тогда
    Возврат;
    КонецЕсли;

    Запрос = Новый Запрос;
    Запрос.Текст =
    “ВЫБРАТЬ
    | РИБ.Ссылка,
    | ВложенныйЗапрос.Док
    |ИЗ
    | ПланОбмена.РИБ КАК РИБ
    | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    | ПоступлениеТоваровИУслугИзменения.Узел КАК Узел,
    | ПоступлениеТоваровИУслугИзменения.Ссылка КАК Док
    | ИЗ
    | Документ.ПоступлениеТоваровИУслуг.Изменения КАК ПоступлениеТоваровИУслугИзменения
    | ГДЕ
    | ПоступлениеТоваровИУслугИзменения.Ссылка = &СсылкаНаДокумент) КАК ВложенныйЗапрос
    | ПО (ВложенныйЗапрос.Узел = РИБ.Ссылка)
    |ГДЕ
    | РИБ.Ссылка <> &ГлУзел
    | И ВложенныйЗапрос.Док ЕСТЬ NULL “;
     
    Запрос.Текст = СтрЗаменить(Запрос.Текст, “ПоступлениеТоваровИУслуг”, Источник.Метаданные().Имя);
    Запрос.УстановитьПараметр(“ГлУзел”, ПланыОбмена.РИБ.ЭтотУзел());
    Запрос.УстановитьПараметр(“СсылкаНаДокумент”, СсылкаНаДокумент);
     
    Результат = Запрос.Выполнить().Выбрать();
     
    Если Результат.Следующий() Тогда
    Отказ = Истина;
    Сообщить(“Запрет редактирования!”);
    КонецЕсли;
     
    КонецПроцедуры
     
    </cod>
    В процедуре я проверяю, не новый ли элемент и в главной ли я базе нахожусь (по условию ТЗ). Так же  я проверяю, а указан ли какой-либо узел у документа. Если узел указан, то выполняется проверка на то, зарегистрированы ли изменения, то есть  объект отправлялся или он ожидает подтверждения, что успешно выгружен. В зависимости от этого и запрещаю запрет на редактирование.
     
    P.S.
    1. Нового я много  узнал, каждая тема мне дала кучу информации. Опять же как и в базовом блоке  все продолжает выстраиваться и пониматься на уже на более высоком  уровне .
    2. Затруднения были в теме о технологическом журнале, но разобрался. Помощь в этом оказывают домашние задания.
    3. Если у вас припасена еще дополнительно интересная информация по темам технологического журнала и плана обмена, то интересно  было бы ознакомиться с ней в какой-либо мастер группе.

  13. Уточните, что значить “Создайте обработку для выгрузки/загрузки из указанного xml-файла”?

    • Нужно создать обработку, с помощью которой выполняется обмен данными: выгрузка из текущей ИБ, загрузка данных из других узлов обмена в текущую ИБ.

  14. Уфффф…… Задание выполнено полностью.
    Для удобства создана ФО. При ее включении становятся доступны инструменты для работы с планами обмена.
    Создана константа “Префикс”. В подписке присваивается префикс документа.
    Создан план обмена. Для разделения документов между регламентированной базой и базой ЗП в плане обмена создан реквизит “ТипРИБ” (перечисление “ТипыРИБ”). В зависимости от типа РИБ при выгрузке проверяется, входит ли данный документ в структуру (список документов, определенных для каждого из типов РИБ). Если не входит – документ не выгружается в подчиненный узел. В обратную сторону также происходит фильтрация. Не выгружаются документы, созданные в РИБ.
    Для определения запрета на редактирование документа используется следующее: в событии “ПриСозданииНаСервере()” документа идет проверка на существование записи изменения (если это не создание нового документа). Т.к. данная запись существует до тех пор, пока не пришло сообщение об успешной загрузке, мы можем использовать этот подход. Если записи нет и документ не является новым, то тогда документ открывается только в режиме чтения.
    Обработка по работе с планами обмена создана. Реализованы: регистрация изменений, привязка к главному узлу, отключение от главного узла, выгрузка и загрузка данных.
    Обратная связь:
    1. Нового очень много. Примерно 70%. В основном из-за того, что не было такой необходимости в этих задачах.
    2. Наибольшие затруднений – обмен данными (как через ручное формирование, так и используя РИБ). Некоторые моменты не совсем осознал, поэтому придется еще раз пересматривать блок.
    3. На мой взгляд, материала очень много и он охватывает почти 100% информации. Бывало при просмотре урока думаешь: “Вот он, нераскрытый вопрос! Надо пометить для рассмотрения в МГ”. Однако, чуть погодя этот вопрос рассматривается. :)

  15. Задание выполнила. Признак выгрузки документа в РИБ указываю в регистре сведений, там же хранится и признак успешной загрузки (для возможности запрета редактирования загруженного документа). 
    Ответы на вопросы:
    1) Узнала много нового – никогда не работала с хранилищем конфигурации, планами обмена, технологическим журналом.
    2) Наибольшие затруднения вызвало это домашнее задание, которые преодолевала повторным просмотром уроков и, пожалуй, упорством.
    3) Не могу выделить. Любая тема будет интересна.