Механизм разделения данных 1с. Разделение данных, механизм (Data Separation, Mechanism). Редактирование диалога формы

Общий реквизит в 1С 8.3 — это объект метаданных платформы, позволяющий использовать один реквизит для многих объектов конфигурации (справочников, документов, планов счетов и т.д). Объект создан в основном для облегчения труда разработчика и разделения данных.

Общие реквизиты были первоначально реализованы в версии 1С 7.7, но сразу в платформу 8 версии разработчики его не включили. Механизм общих реквизитов был введен разработчиками 1С только в релизе 8.2.14.

Общие реквизиты очень удобно добавлять, чтобы не изменять стандартные объекты в конфигурации, я часто их использую наряду с .

После добавления общего реквизита его можно использовать и в запросах и выводить на форму объектов — внешне он ничем не отличается от обычного реквизита.

Единственное ограничение общих реквизитов — невозможность использования их в .

Рассмотрим основные настройки и свойства общих реквизитов, отличные от других объектов конфигурации:

Состав — список объектов, к которым будет использован общий реквизит, настройка напоминает настройку плана обмена.

Получите 267 видеоуроков по 1С бесплатно:

Автоиспользование — настройка определяет, будет ли использоваться общий реквизит для тех объектов, у которых в составе указан режим использования «Автоматический».

Разделение данных — эту настройку рассмотрим отдельно.

Разделение данных в 1С с помощью общего реквизита

Разделение данных — механизм, аналогичный механизму . Однако производительность данного механизма более эффективна, и он настраивается проще.

Механизм позволяет настроить отображение только элементов, которые может видеть пользователь. К примеру, можно разграничить все объекты (документы, справочники и т.д.), где установлена определенная организация.

Настройка разделения данных с помощью общих реквизитов 1С

Для настройки в общем реквизите необходимо указать разделение данных — Разделять . Сразу после нажатия система предложит создать параметры учета по умолчанию:

При этом необходимо будет при старте системы указать параметры сеанса, как это сделать, с примером было описано в статье .

На этом настройка окончена — пользователю будет доступна только та информация, которая указана в выбранных параметрах сеанса.

Пример использования общего реквизита

Разберем настройку общего реквизита в 1С 8.3 на примере каркасной конфигурации и реквизита Организация:

В системе имеется 3 документа, где необходимо указание реквизита Организация: это Приходная Накладная, Расходная Накладная, Начисление Зарплаты.

Настройка проста:

  1. Создаем новый Общий реквизит, указываем тип — СправочникСсылка.Организация.
  2. В составе расставляем для наших документов — Использовать .

Все, настройка окончена!

Смотрим результат:

Система отображает общий реквизит «как свой»: и в запросах, и в реквизитах формы, и в других местах. Вот такое волшебство! 🙂

Не добавляется общий реквизит 1С 8.3

Что Вы узнаете из этой статьи?

  • В статье рассматривается предназначение режима разделения итогов
  • Разбирается поведение системы «1С:Предприятие 8» при параллельной работе большого количества пользователей
  • Показываются минусы режима разделения итогов
  • Выдаются рекомендации по корректному использованию разделения итогов регистра

Платформа «1С:Предприятие 8» содержит возможности и механизмы, о работе которых не все имеют полное представление, как и о способах их эффективного использования. Таковым является режим разделения итогов.

Механизм разделения итогов выполняет весьма важную и полезную функцию: его использование делает возможным осуществлять параллельную запись в регистры бухгалтерии и регистры накопления .

Покажем эффективность данного режима с помощью примера. Для этого рассмотрим ситуацию до и после включения режима разделения итогов.

До включения режима разделения итогов

Мы имеем в наличии два одинаковых документа с номерами 001 и 002:

Оба документа осуществляют движение по регистру накопления. Контроля остатков нет. Структура регистра накопления:

Два пользователя, работая в своих документах, начинают одновременное проведение. Возникает ситуация, при которой два документа одного типа пытаются сделать движения одновременно.

При этом на уровне СУБД возникает следующая картина:

Вот что происходит в системе:

  1. Документы пытаются внести запись в регистр накопления
  2. На уровне СУБД регистр накопления представлен двумя таблицами: таблицей движений и таблицей остатков (таблица итогов).
  3. В таблице движений возможна запись документами своих данных параллельно. Это обеспечивается различными значениями поля «Регистратор», и, соответственно, работа идет с различными строками таблицы.
  4. А вот в таблице остатков нет поля «Регистратор», данные в этой таблице хранятся в разрезе измерений самого регистра.
  5. Тут наблюдается ситуация, при которой двум документам необходимо изменить одну запись, но одну запись одновременно менять нельзя.
  6. Для того чтобы не потерять записываемые данные, какой-либо из документов должен ожидать своей очереди на запись, пока другой документ не запишет свои движения. И, после того как первый из документов внесет свои движения, второй сможет внести уже свои.

В результате мы наблюдаем потерю времени – второй пользователь вынужден ждать окончание проведения документа у первого. С одной стороны, все правильно и логично, с другой – страдает параллельность работы пользователей в системе.

Для разрешения возникшей проблемы и создан механизм разделения итогов.

Его использование предусмотрено только для регистров накопления и регистров бухгалтерии.

Включение режима разделения итогов

Включение данного режима выполняется достаточно просто:

Заметим, что режим разделения итогов включен по умолчанию для всех создаваемых регистров накопления и бухгалтерии. Помимо Конфигуратора в пользовательском режиме мы можем посмотреть, для каких регистров включено использование режима:

Что происходит после включения режима разделения итогов?

В таблице итогов регистра накопления/бухгалтерии появляется новый столбец «Разделитель». В самой СУБД он назван «Splitter».

При этом таблица движений остается неизменной, разделителем в ней выступает «Регистратор». Изменение мы видим в таблице итогов.

Это поле заполняется только в том случае, когда две (или более) транзакции пытаются изменить одну строку в таблице итогов. При возникновении такого случая поле «Разделитель» хранит разные значения для каждой из транзакций.

Такая реализация режима разделения итогов делает возможным выполнять параллельную запись всем транзакциям.

В нашем примере с двумя документами при включении режима наблюдается следующее:

Оба наших документа выполнили параллельную запись своих данных благодаря новому полю «Разделитель». В результате не возникают ожидания при блокировках и повышена параллельность работы пользователей.

Минусы режима разделения итогов

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

При получении остатков по регистру возникает потребность свертки данных, что приводит к затратам времени, пусть и незначительным.

В нашем случае с двумя документами для получения остатка товара «Стол» по складу «Основной» возникает необходимость сложения двух строк для получения итогового значения «7». При выключенном разделителе группировка строк (сложение) не требуется.

Когда следует использовать режим разделения итогов?

Для этого необходимо выполнить условия:

  1. По регистру нет контроля остатков – нет чтения данных в транзакции. В регистрах бухгалтерии контроль остатков, как правило, отсутствует. Но если контроль остатков присутствует, то мы не получим никакого выигрыша в производительности. К тому же, при контроле остатков нужно использовать свойство набора записей «БлокироватьДляИзменения», так как возникает вероятность взаимоблокировки.
  2. С регистром выполняется параллельная работа пользователей, причем активная.

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

Бурмистров Андрей

Редактор форм используется для создания и редактирования форм объектов прикладного решения. Формы объектов используются системой для визуального отображения данных объекта в процессе работы пользователя.

Любая форма представляет совокупность трех составляющих:

  • диалога формы - окна, которое будет отображаться на экране;
  • модуля формы - программы на встроенном языке, отвечающую за работу с элементами управления формы и обработку событий;
  • реквизитов формы - совокупности объектов, принадлежащих форме, данные которых она использует в своей работе.

Непосредственно редактор форм обеспечивает редактирование диалога формы, ее реквизитов и вызывает редактор текстов и модулей для редактирования модуля формы.

Окно редактора формы содержит три закладки, обеспечивающие редактирование всех трех составляющих формы.

Редактирование диалога формы

Редактор форм позволяет разработчику полностью использовать широкий набор возможностей диалога. Перечислим основные из этих возможностей:

Панели, страницы, закладки

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

Редактор позволяет разместить на форме несколько панелей, каждая из которых может содержать несколько страниц. Например, форма документа может содержать панель с двумя страницами: Товары и Дополнительно:

Разработчик имеет возможность задать режим, при котором страницы будут прокручиваться в пределах панели, или использовать закладки для переключения между страницами. Редактор позволяет определить большое количество разнообразных вариантов расположения и отображения закладок:

Например, закладки можно расположить сверху горизонтально:

Или можно расположить закладки слева вертикально:

Элементы управления

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

В случае, когда форма содержит большое количество элементов управления, разработчик может использовать режим отображения элементов управления в списке, который позволяет быстро перемещаться к нужному элементу управления:

Редактор предоставляет возможность задания порядка, в котором пользователь будет обходить элементы управления формы при вводе и редактировании данных. Возможна установка автоматического порядка обхода или ручное задание порядка обхода в специальном списке элементов управления, или щелчком мыши прямо на форме:

Сетка, выравнивание

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

Также редактор поддерживает использование выравнивающих линий, которые служат для облегчения выравнивания и взаимного расположения элементов управления формы. Например, на следующем рисунке выравнивающие линии использованы для размещения элементов управления на странице Дополнительно:

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

Выравнивание элементов управления также может быть выполнено с помощью специальных маркеров, показывающих желаемое направление смещения элементов управления. Маркеры появляются, когда два элемента управления находятся в непосредственной близости друг от друга.

Синие выравнивающие маркеры указывают желаемое направления перемещения элемента управления для выравнивания его по одной из границ соседнего элемента управления:

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

Также следует сказать, что редактор поддерживает операции выравнивания, изменения размеров и порядка для группы элементов управления:

Привязки

Редактор форм позволяет настроить поведение элементов управления, расположенных в форме, таким образом, чтобы при изменении размеров формы, обеспечивалось естественное восприятие информации: одна часть элементов оставалась на месте, другая часть перемещалась вместе с границами формы, а третья часть изменяла свой размер в соответствии с изменением размеров формы.

Для задания подобного поведения элементов формы разработчик может описывать привязки - зависимости положения границ элементов управления от положения границ формы. Границу элемента управления можно привязывать как к границе или центру формы, так и к границе или центру другого элемента управления.

Редактор поддерживает большое разнообразие различных видов привязок и может отображать их в графическом виде:

Разделители

Разделители являются специальными элементами управления, с помощью которых возможно перераспределение пространства формы без изменения ее размеров. В режиме 1С:Предприятие разделитель обладает способностью "захватываться" мышью и перемещаться внутри формы в ее пределах с учетом возможности расположения других элементов управления и ориентации разделителя:

При перемещении разделителя, все элементы управления, привязанные к разделителю, будут изменять свои размеры или перемещаться в соответствии с установленными привязками:

ActiveX

Редактор позволяет размещать в форме элементы управления типа ActiveX, которые разработчик может настроить и в дальнейшем управлять ими, используя средства встроенного языка:

Редактирование модуля формы

Для редактирования модуляформы конфигуратор вызывает редактор текстов и модулей. Этот редактор предоставляет разработчику большое разнообразие возможностей для создания и изменения текста модуля.

Редактирование реквизитов формы

Редактирование реквизитов формы выполняется в списке, который позволяет создавать новые реквизиты, изменять имеющиеся и удалять ненужные реквизиты:

Если у формы существует основной реквизит, определяющий поведение формы, отличное от типового, - он выделяется жирным шрифтом. Разработчик может установить курсор на нужный реквизит и, используя команду меню, сразу перейти в диалог формы, к тому элементу управления, который соответствует выбранному реквизиту.

Дополнительная информация

Вы можете познакомиться с использованием редактора форм в реальном режиме времени. Для этого можно скачать демонстрационный ролик "Пример разработки торговой мини-системы", в котором показан процесс разработки торговой мини-системы с использованием этого редактора для создания форм документов "Приходная накладная", "Расходная накладная" и форм отчетов "Анализ продаж" и "Анализ продаж по периодам".

1.Преамбула.

Возникла необходимость организовать учет по двум организациям в одной ИБ. Ситуация не уникальная, но так сложилось, что наша сильно не типовая 250 гигобайтная УППшка работала довольно медленно, поэтому вместо RLS решили попробовать разделение данных. Что это такое, описано, например, или . Вкратце, если RLS дополняет условиями запросы SQL, то разделитель данных - это дополнительный столбец в таблицах на уровне СУБД, за счет чего механизм разделения должен работать пошустрее RLS.

Итак, в базу, где велся учет по ООО №1, необходимо перенести информацию из отдельной базы ООО №2 и организовать совместную работу. Прямо как на картинке:

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

2. Реализация

Платформа 8.2.19.90, без режима совместимости. СУБД - MSSQL Server 2008 R2 Standart.

Создали общий реквизит ОрганизацияРазделитель типа "число", согласились с предложением создать параметры сеанса, заполнили состав реквизита (включили несколько справочников, все документы, регистры накопления, бухгалтерии и расчета). Разделение данных - "Независимо и совместно". Значение параметра сеанса устанавливается из стандартных настроек пользователя в процедуре УстановкаПараметровСеанса в модуле сеанса:

Организация = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глТекущийПользователь,"ОсновнаяОрганизация");
ПараметрыСеанса.ОрганизацияРазделительЗначение = Организация.ЗначениеРазделителя;

В интерфейсе главбуха сделали формочку с возможностью переключения между организациями и включения/выключения режима разделения:

При отключенном разделении, когда ПараметрыСеанса.ОрганизацияРазделительИспользование = Ложь, платформа отказывается записывать документы, вываливаясь с ошибками типа "ОшибкаSDBL: ожидается выражение (pos=12)", поэтому давать пользователю записывать документы в таком варианте нельзя. Для надежности, создали подписки на событие "Перед записью" для объектов, входящих в состав общего реквизита:

Если ПараметрыСеанса.ОрганизацияРазделительИспользование = Ложь Тогда
#Если Клиент Тогда
Предупреждение("Нельзя записать, т.к. разделение данных отключено!");
#КонецЕсли
Отказ = Истина;
КонецЕсли;

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

Конфигурацию подготовили, возник вопрос, как установить значение общего реквизита для документов и их движений в закрытых периодах, причем быстро и без риска того, что полетят цифры в балансе? Через объектную модель 1С записывать разделитель отдельно от объекта невозможно, поэтому пришлось нарушить лицензионное соглашение выкручиваться и писать запрос для MS SQL. Поскольку в составе общего реквизита много объектов, а таблиц в скуле по этим объектам еще больше, написали обработку, генерирующую запрос для SQL (для каждого объекта метаданных, входящего в состав разделителя, писали "update " + Имя_БД + ".dbo._" + ИмяТаблицы + " set _" + ПолеОбщийРеквизит + " = 1";)

Значение проставили, перенесли часть данных из ИБ №2, начали тестировать.

Результат разочаровал. Во-первых, проблемы с регистром бухгалтерии. При включенном разделении не видно аналитику:

Связано это с тем, что регистр бухгалтерии на уровне СУБД хранится как несколько таблиц, и не во всех таблицах было проставлено значение общего реквизита (для просмотра структуры использовали обработку ).


Хорошо, проставляем значение разделителя через MS SQL, аналитику видим. Теперь не работают отчеты. Оказывается, проблемы с запросами к виртуальным таблицам регистра бухгалтерии "Обороты" и "ОборотыДтКт":

(Fld27033 - это как раз общий реквизит в таблице регистра бухгалтерии)

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

Далее, выясняется что перестал работать механизм вытеснения у регистров расчета. Планы видов расчета мы не разделяли, пробуем искать проблему в таблицах регистра расчетов и в перерасчетах. Проверяем, проставляем значение основного реквизита, делаем ТиИ - безрезультатно.

Попутно, диагностируем проблему при записи в независимые регистры сведений из формы списка. При этом данные записываются, их можно увидеть после перезапуска. Проблема воспроизводится и на тестовой базе:


Регистры сведений "починить" путем манипуляций с SQL не получилось (значение разделителя во всех таблицах установлено), поэтому просто исключили их из состава общего реквизита. После нескольких дней экспериментов, неудачными оказываются и попытки восстановить работоспособность вытеснения.

На этот момент принимаем решение выключить разделение данных и использовать-таки RLS. При установке разделения в "не использовать" натыкаемся на ошибки "Microsoft OLE DB Provider forSQL Server: CREATE UNIQUE INDEX terminated because a duplicate keywas found for index...". Т.е., вернуться в состояние до разделения так запросто не получается. Проблема с индексами таблиц перерасчетов, настроек хранения итогов и других. Дело в том, что в таблицах хранятся идентичные строки, отличающиеся только значением общего реквизита. При удалении общего реквизита появляются неуникальные записи. Придется удалить ненужные записи напрямую в MS SQL, примерно так (для таблицы перерасчетов):

Use base;
ALTER TABLE _CRgRecalc1399
ADD id INT IDENTITY(1,1);
GO
DELETE FROM _CRgRecalc1399
WHERE id < (SELECT MAX(id)
FROM _CRgRecalc1399 AS T1
WHERE _CRgRecalc1399._RecorderTRef = T1._RecorderTRef and
_CRgRecalc1399.[_RecorderRRef] = T1.[_RecorderRRef] and
_CRgRecalc1399.[_CalcKindRRef] = T1.[_CalcKindRRef] and
_CRgRecalc1399.[_Fld1400RRef] = T1.[_Fld1400RRef] and
_CRgRecalc1399.[_Fld1401RRef] = T1.[_Fld1401RRef] and
_CRgRecalc1399.[_Fld1402RRef] = T1.[_Fld1402RRef]
);
GO
ALTER TABLE _CRgRecalc1399
DROP COLUMN id;

И только после чистки нескольких десятков таблиц удается выключить разделение данных. После выключения разделения никаких проблем нет.

3. Выводы.

Теплилась надежда, что на 8.3 проблемы решены. Не поленились, проверили на 8.3.4.482 (с отключенным режимом совместимости). Смотрели на практически типовой УПП-шке, с изменениями в конфигурации только по общему реквизиту. На этой тестовой базе разделение включили до ввода информации, т.е. платформа должна была корректно записывать значение разделителя во все таблицы, самостоятельно напрямую в MS SQL ничего не писали.

Результат:

    Проблема с запросами к виртуальным таблицам "Обороты" и "ОборотыДтКт" воспроизводится.

    Проблема с вытеснением воспроизводится.

    Проблема с записью в независимые регистры сведений воспроизводится.

    Проблема с выключением разделения - одним нажатием кнопки от него избавится не получится!

Таким образом, заменить RLS новым механизмом у нас не получилось. Задумывался этот механизм, по всей видимости, для облачных сервисов, и в варианте использования разделяемых данных "независимо", может быть, разделение заработает, но нам нужна общая НСИ. Остается ждать, когда 1С исправит ошибки, а еще лучше, реализует типовой механизм разделения по организациям в типовых конфигурациях.

Элемент разделитель 1С нужен для того, чтобы перераспределить области формы так как это удобно пользователю в данный момент. Навык использования разделителей имеется практически у каждого пользователя Windows. Допустим, вы создали простенькую форму из двух элементов управления.

Традиционно, в левой части могут быть расположены пункты какого либо списка. В правой части, соответственно находится развернутая детализация этих самых пунктов. Если левый список состоит из коротких названий, логично сократить этот столбец до минимума. Соответственно, в этом случае повысится читабельность правой части. И наоборот, если в левой части будут длинные названия, столбец стоит расширить. Разделители предоставляют пользователю настраивать форму произвольно, просто перетаскивая границу с помощью мыши.

Такой способ управления используется при редактировании таблиц в Word и Excel. При создании формы вы можете создавать как вертикальный так и горизонтальный элемент формы разделитель. В целом, наиболее предпочтительно создавать формы, которые визуально находятся в пределах экрана.

Разделитель 8.2, 8.3 (управляемые формы)

Разделитель в управляемой форме 1с добавить нельзя , он добавляется программой автоматически перед/после табличного поля

Поделитесь с друзьями или сохраните для себя:

Загрузка...