[Кнопка 7710967300 БУХ РБ] Connect=Srvr="%servername%";Ref="%base_name%"; AdditionalParameters=/Z "-0,-0,+7710967300";

После /Z указываем общие реквизиты по порядку. Так как в нашей типовой бухгалтерии уже есть два общих системных реквизита, указываем для них значение -0 чтобы они не использовались, а в качестве третьего (который мы создали) передаём ИНН.

1000 и 1 чекбокс

Теперь нужно определить, какая часть данных будет являться общей для всех областей. Всё это настраивается через конфигуратор. В свойствах общего реквизита, который мы только что создали, есть пункт «Состав» открывающий небольшой список из 800 параметров:

Подбор параметров оставляем на ваше благоразумие, усмотрение и окружение. Вот наш вариант (аккуратнее, там 20 000 пикселей).

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

Выгружаем данные из текущих баз

Для выгрузки данных из текущих баз, мы используем универсальный XML-обмен. Нельзя просто так взять и выгрузить базу, нужно настроить правила обмена, иначе при загрузке могут (и обязательно возникнут) ошибки и конфликты, а вторая база просто не пролезет. Напомним, что мы делим области базы для каждой организации и в нашем случае работают такие правила обмена . Если вам вздумается использовать другой разделитель, придётся пораскинуть мозгами и чекбоксами. Главное — не использовать типовую выгрузку — это приведёт к дублированию всех предопределённых записей.

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

Загружаем данные в разделённую базу

Запускаем 1С с параметром /Z «-0,-0,+%ваш разделитель%», указывая разделитель той организации, данные которой собираемся загрузить. Запускаем универсальный обмен и скармливаем ему полученные при выгрузке файлы: сперва справочники, потом документы. Повторяем эту операцию для каждой базы-области.

Чтобы упростить задачу, мы осуществляем выгрузки массово, предварительно запуская чуть исправленную стандартную обработку через командную строку (/Execute c:\выгрузка.epf). Затем вручную загружаем полученные файлы в разделённую базу.

Как потратить больше времени, чтобы потратить меньше времени

Процесс разделения — штука не быстрая. Напомним, что у нас сейчас больше 500 организаций, но за пару недель мы успели разделить только 70. Однако, мы точно знаем, что уже через полгода поблагодарим прошлых себя за проделанную работу и кучу сэкономленных времени и сил.

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

Побочные эффекты: экономия места 1 к 20, косвенное увеличение скорости работы — неоценимо. В абсолютных цифрах: 50 организаций занимают 2 Гб пространства в SQL, тогда как одна отдельная база занимает от 800 Мб.

Обещанная ложка дёгтя, даже четыре:

  • если кто-то из пользователей запорол данные в одной организации, приходится откатывать назад всю разделённую базу — нельзя просто взять и откатить одну область данных
  • приходится более тщательно тестировать обновления, особенно те, которые добавляют или изменяют справочники
  • если нужно передать базу клиенту (или слить налоговой:), приходится делать обратную процедуру: выгружать организацию из разделённой базы при помощи универсального обмена, затем загружать в пустую обычную базу и из неё сохранять в. dt-файл
  • в разделённой базе нельзя управлять регламентными заданиями (например, не получится автоматически обновить курсы валют)
Первые три ложки не такие горькие — они просто заставляют нас быть более внимательными. А вот что делать с четвёртой мы пока не знаем, но усердно исследуем.

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

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

Для установки значения разделителя учета следует воспользоваться пунктом "Разделитель учета" меню "Действия" или соответствующей кнопкой панели инструментов. При этом на экран выдается диалог для установки значения разделителя учета.

В поле "Значение разделителя учета" можно указать конкретное значение разделителя учета. Способ ввода значения зависит от типа разделителя учета, определенного в конфигурации. Как правило, это справочник. В этом случае для выбора значения следует воспользоваться кнопкой выбора и выбрать нужное значение из списка значений справочника.

Кнопка "Пустое значение" позволяет стереть введенное значение разделителя учета, то есть задать пустое значение. Это имеет смысл в том случае, если, наряду с конкретными значениями разделителя учета, в проводках использовалось и пустое значение.

Флажок "По всем" позволяет установить режим вывода итогов по всем значениям разделителя учета в сумме.

Для установки выбранных значений следует нажать кнопку "ОК" . Для отказа от установки значений - кнопку "Отмена" .

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

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

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

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

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

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

Однажды мы обсуждали механизмы ограничения доступа пользователей в 1С и в частности .

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

Свойство общего реквизита-разделителя – Разделение пользователей 1С – позволяет установить доступность списка пользователей в зависимости от использования разделителей.

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

Таким образом можно организовать различные списки пользователей для различных частей базы.

Свойство общего реквизита-разделителя – Разделение аутентификации 1С – позволяет заводить пользователей с одинаковыми именами пользователя для разных частей базы.

Условное разделение 1С

Условное разделение 1С позволяет включать и отключать разделитель на основании данных базы. Таким образом можно создавать цепочки зависимых друг от друга разделителей динамически действующих в том или ином случае.

Чтобы включить условное разделение 1С – нужно указать в свойстве общего реквизита-разделителя – Условное разделение 1С – , который будет отвечать за определение факта включения разделения 1С.

Возможно использовать константу с типом булево или реквизит справочника с типом булево.

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

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С исправит ошибки, а еще лучше, реализует типовой механизм разделения по организациям в типовых конфигурациях.


Close