Сторно-записи, «прикрывающие» фактический период действия вводимой записи с более поздним периодом регистрации, могут быть сформированы вручную стандартными методами формирования записей регистра расчета. В этом случае разработчик должен самостоятельно предусмотреть алгоритм, по которому будут сформированы сторно-записи, исходя из первоначального набора записей. Это достаточно сложный путь, предполагающий самостоятельный анализ взаимодействия периодов действия конкурирующих записей.
Вместо формирования собственных алгоритмов можно воспользоваться методом ПолучитьДополнение() объекта РегистрРасчетаНаборЗаписей. Суть его состоит в том, что система самостоятельно анализирует возможные конфликты формируемого набора записей с записями, имеющими более ранний период регистрации. Если обнаруживается пересечение периодов действия с конкурирующими записями, на каждое такое пересечение система предложит сформировать сторно-запись, которая позволит вводимому набору записей сохранить фактический период действия. При этом система укажет, по каким видам расчета необходимо ввести сторно-записи и какой период действия они должны иметь.
Метод ПолучитьДополнение() применяется к набору записей регистра расчета, поддерживающего период действия, и не требует указания пара- метров. Данный метод возвращает значение типа ТаблицаЗначений, в котором содержатся все необходимые данные для формирования сторно-записей. Таблица включает значение всех полей записей, для которых должны быть введены сторно-записи (кроме полей Регистратор и НомерСтроки, которые не нужны для формирования сторно-записей), а также дополнительные поля – период регистрации сторно-записи и даты начала и окончания периода действия сторно-записи.
В приведенном примере для набора записей, состоящего из одной записи о больничном, метод ПолучитьДополнение() вернет таблицу следующего вида:
Период регистрации Вид расчета Период действия … Период регистрации сторно Период действия начало сторно Период действия конец сторно
01.03.2010 Дежурство 01.03.2010 01.04.2010 15.03.2010 22.03.2010
Полученная таблица позволяет ввести необходимые сторно-записи без дополнительных вычислений. Ниже приведен текст модуля, в котором используется метод ПолучитьДополнение() и формируются сторно-записи в регистре расчета:
;
Таким образом, сторно-записи имеют те же значения полей, что и исходные записи, за исключением периода регистрации и периода действия. Сторно-записи отличаются от обычных записей значением Истина в предопределенном поле Сторно.
Для того чтобы существовала возможность обмена какими-либо данными с кем-либо, необходимо некоторым образом идентифицировать тех, с кем мы будем обмениваться, и для каждого из них описать перечень обмена
Обе эти задачи позволяет решать прикладной объект конфигурации План обмена.
При помощи планов обмена мы получаем информацию о том, какие элементы данных были изменены и в какой узел обмена их необходимо передать. Это возможно благодаря тому, что планы обмена содержат механизм регистрации изменений. Информация об измененных данных переносится с помощью сообщений, инфраструктура которых также поддерживается планами обмена.
Подобно тому, как элементами данных справочника являются элементы справочника, элементами данных плана обмена являются узлы плана обмена. Каждый узел идентифицирует участника обмена по данному плану обмена. Кроме этого в каждом плане обмена всегда существует один предопределенный узел, идентифицирующий данную информационную базу.
В состав данных, которыми может производиться обмен, входят элементы информационных структур базы данных, которые описываются следующими объектами встроенного языка: Константа.МенеджерЗначения.<имя>;
СправочникОбъект.<имя>;
ДокументОбъект.<имя>;
ПоследовательностьНаборЗаписей.<имя>;
ПланВидовХарактеристикОбъект.<имя>;
ПланСчетовОбъект.<имя>;
ПланВидовРасчетаОбъект.<имя>;
РегистрСведенийНаборЗаписей.<имя>;
РегистрНакопленияНаборЗаписей.<имя>;
РегистрБухгалтерииНаборЗаписей.<имя>;
РегистрРасчетаНаборЗаписей.<имя>;
ПерерасчетНаборЗаписей.<имя>;
БизнесПроцессОбъект.<имя>;
ЗадачаОбъект.<имя>;
УдалениеОбъекта.
При описании состава данных плана обмена разработчик имеет возможность указать для каждого типа объектов признак Авторегистрация. Он определяет, каким образом план обмена будет отслеживать изменения этих данных.
Создание плана обмена Филиалы
Состав данных обмена должен выглядеть следующим образом:
Теперь с помощью конструктора создадим основную форму узла, чтобы описать в ней некоторые действия, которые должны выполняться при создании нового узла обмена.
Суть этих действий будет заключаться в том, что при создании нового узла обмена мы должны будем сформировать для него все необходимые записи регистрации изменений для всех объектов конфигурации, входящих в данный план обмена. Это будет своего рода начальная синхронизация узла обмена всеми данными обмена.
Прежде всего, опишем в модуле формы узла служебную переменную, которая будет хранить признак того, является ли записываемый узел новым или нет.
Перем РегистрацияВНовыйУзел;
Затем создадим обработчик события формы ПередЗаписью.
Этот обработчик и будет устанавливать значение нашей служебной переменной в Истина в случае записи нового узла плана обмена.
После этого создадим обработчик события формы ПриЗаписи.
Создание обработки Обмен данными
Откроем конфигуратор и создадим новый объект конфигурации Обработка с именем ОбменДанными. Перейдем на закладку Прочее и откроем модуль объекта.
Создадим в нем процедуру ОбменСФилиалами.
Теперь создадим основную форму обработки и в обработчик события нажатия кнопки Выполнить – КнопкаВыполнитьНажатие вставим вызов процедуры ОбменСФилиалами().
Создание процедуры записи данных
Сами процедуры записи и чтения данных обмена мы разместим в модуле объекта План обмена Филиалы. Сначала создадим процедуру, которая используется нами при обмене данными, – ЗаписатьСообщениеСИзменениями.
На этом создание процедуры записи данных обмена закончено.