Как скрыть справочник в 1с в режиме пользователя
Обновлено: 04.07.2024
Пользователи 1С
Условно администрирование и контроль включает в себя:
- создание пользователя;
- установка прав пользователей;
- просмотр активных пользователей;
- анализ действий пользователей.
Рассмотрим каждый из этих пунктов подробнее:
Создание и установка прав пользователей 1С
В зависимости от конфигурации пользователи вводятся либо в конфигураторе, либо в режиме пользователя. Практически все современные конфигурации поддерживают ввод пользователей в режиме 1С: Предприятие 8. Также в режиме 1С: Предприятие, как правило, вводятся дополнительные параметры пользователей.
Однако, независимо от конфигурации, первый пользователь с административными правами всегда вводится в режиме конфигуратор. Поэтому мы рассмотрим оба режима ввода пользователей.
Ввод пользователей в Конфигураторе
Для входа в режим 1С Конфигуратор необходимо в списке выбора баз выбрать вариант Конфигуратор:
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Получите понятные самоучители по 1С бесплатно:
На этой странице Вы должны указать настройки пользователя:
Создание пользователя в 1С Бухгалтерия 2.0
Необходимо согласиться, отобразится форма нового пользователя базы данных:
Где необходимо указать нужные настройки авторизации и роли пользователя.
Вот и всё! Создание пользователя и назначение ему прав завершено.
Просмотр активных пользователей в базе 1С
Как отключить пользователей в 1С 8.3
Отключить активного пользователя в базе 1С можно двумя способами:
- в интерфейсе программы (для конфигураций 1С Бухгалтерия 3.0, Управление торговлей 11 и т.д);
- через консоль кластера серверов (доступно только в клиент-серверном режиме работы).
Из интерфейса
Из консоли кластера
Контроль работы пользователей 1С 8.3
Информацию из журнала регистрации можно сортировать по типу данных, пользователю, виду действия и т.д. Для этого необходимо нажать на пиктограмму воронки над таблицей журнала регистрации.
Если база данных давно установлена и данные в ней часто меняются, просмотр журнала регистрации существенно замедляется, в особо запущенном случае система может обрабатывать данные очень продолжительный период времени.
Думаю, эта разработка понравится тем, кто имеет подобную задачу.
У нас она звучала так: некоторые элементы справочников потеряли свою актуальность, но удалять их из базы нельзя, т.к. будет нарушена целостность данных. Как бы сделать так, чтобы они не отображались в списках? При этом изменения конфигурации должны быть минимальны.
Для этих целей я создал эту тестовую обработку, которая содержит две процедуры, нужные для реализации задуманного. Все остальные реквизиты и прочее служат только для отладки.
Итак, минимальное изменение конфигурации - это максимальное использование стандартных возможностей. Далее самый безболезненный путь - создание своего общего модуля с необходимым набором процедур. И по возможности минимальные изменения объектов базы - в идеале только незначительная корректировка кода модулей форм или объектов
Поэтому было решено использовать механизм дополнительных сведений и вызовы из форм списков нужных справочников процедур общего модуля, накладывающих отбор на отображаемые списки. Для того чтобы минимизировать количество доп сведений, я решил создать одно свойство "Не используется" (рис.1)
Далее для нужного набора свойств добавляем свойство из другого набора (рис.2-5).
Всё! Подготовка произведена. теперь при нажатии кнопки доп сведений увидим (рис.6). (не совсем удачно выбрал справочник, у него есть свой реквизит Действует, но это не важно).
Теперь в модуль формы списка справочника в процедуру ПриСозданииНаСервере() добавляем вызов.
Для функции в условии аргументом является основной реквизит формы - список справочника (реквизит д.б. типа динамический список, при другом типе работать не будет), для процедуры - ссылка на форму и имя того же самого реквизита.
После этого при открытии формы элементы, которые имеют свойство Не используется, не будут отображаться в форме списка.
При этом отбор, установленный в форме, можно снять, нажав на кнопку Настроить список (рис. 7)
Решение тестировалось на конфигурации УТ 11.4.5.143 платформа 8.3.12.1714, однако скорее всего будет работать на всех конфигурациях с управляемыми формами, где есть подсистема дополнительных реквизитов и сведений.
Почему мой справочник не видно в интерфейсе?
Несмотря на кажущуюся простоту вопроса, с подобной проблемой рано или позно сталкивается практически любой разработчик, когда вдруг он не видит в интерфейсе того, что ожидал. Например, какого-то раздела, или команды перехода к списку справочника.
В такой ситуации нужно проанализировать, что же сделано не так? Алгоритм проверки прост - сначала нужно убедиться, что все в порядке с разделом, к которому относится объект, а затем, что все в порядке с самим объектом.
Для примера рассмотрим справочник Контрагенты , относящийся к подсистеме (разделу) Закупки .
Сначала проверим раздел. Убедимся что:
1. Для той подсистемы, к которой относится искомый объект, и всех подсистем, которые находятся выше ее по иерархии установлено свойство подсистемы Включать в командный интерфейс . Для этого вызовем контекстное меню подсистемы Закупки и откроем палитру свойств этой подсистемы.
2. Откроем командный интерфейс конфигурации и проверим, что в нем установлена видимость этой подсистемы (или подсистемы ее верхнего (первого) уровня). Если в конфигурации созданы роли, то нужно обратить внимание также и на то, как настроена видимость для различных ролей. Для этого выделим корень дерева объектов конфигурации, вызовем его контекстное меню и выполним команду Открыть командный интерфейс конфигурации .
3. Откроем состав объектов подсистемы и убедимся, что подсистема включает в себя хотя бы один объект конфигурации. Если подсистема не содержит ни одного объекта, она не будет отображена в командном интерфейсе. Для этого в окне редактирования подсистемы Закупки откроем закладку Состав .
4. Откроем командный интерфейс подсистемы и проверим, что хотя бы одна команда (стандартная или созданная в конфигурации) доступна для настройки в этой подсистеме. Если таких команд нет – подсистема не будет отображена. При этом важно лишь наличие этих команд, а не их видимость. Для этого вызовем контекстное меню подсистемы Закупки и выполним команду Открыть командный интерфейс .
Если в составе команд нет вашей стандартной команды объекта, значит для объекта отключено использование стандартных команд (см. п.1 ниже).
Если в составе команд нет команды, созданной в конфигурации, значит, ей не назначена группа (см. п.2 ниже).
Если для команды назначена не группа подсистемы, а какая-то группа формы, то для того, чтобы команда стала доступна в интерфейсе форм необходимо задать еще и тип параметра этой команды (см. п.2 ниже).
5. Если в конфигурации созданы пользователи, и им назначены определенные роли, то убедимся, что в правах пользователя разрешено использование той подсистемы, к которой относится искомый объект, и всех вышестоящих по иерархии подсистем. Для этого откроем окно редактирования роли (например, Менеджер по закупкам ), которая назначена пользователю, под именем которого будет происходить работа с прикладным решением.
6. Если в конфигурации созданы функциональные опции, и они связаны с каким-либо объектом конфигурации, то этот объект будет отображен в интерфейсе только в случае, если соответствующая функциональная опция включена в прикладном решении. Поэтому убедимся, что та подсистема, к которой относится искомый объект, и все вышестоящие по иерархии подсистемы, не отключены функциональными опциями в режиме исполнения. Для того, чтобы узнать, с какими функциональными опциями связана подсистема, вызовем контекстное меню подсистемы Закупки и выполним команду Дополнительно .
В нашем случае подсистема не связана ни с одной из функциональных опций. Это значит, что отображение подсистемы в интерфейсе не будет зависеть от значения функциональной опции в прикладном решении.
7. В заключение, в режиме 1С:Предприятие проверим, что раздел, к которому относится искомый объект, и все вышестоящие по иерархии разделы, не отключены пользовательскими настройками панели разделов.
Вернуться к настройкам, выполненным в конфигураторе, можно с помощью команды Все действия – Установить стандартные настройки в окне настройки панели разделов.
Теперь проверим все, что относится к самому объекту:
1. Что для искомого объекта разрешено использование стандартных команд. Для этого вызовем контекстное меню справочника Контрагенты и откроем палитру его свойств.
2. Если у объекта существует нестандартная команда, то чтобы увидеть ее в интерфейсе убедимся, что для нее задана группа и, если команда параметризованная, - тип параметра команды. Для этого вызовем контекстное меню нестандартной команды Печать справочника Контрагенты и откроем палитру ее свойств.
Иначе команда будет недоступна в командном интерфейсе, а параметризованная команда будет недоступна для включения в командный интерфейс форм, соответствующих ее параметру.
3. Откроем командный интерфейс подсистемы и убедимся, что включена видимость команды в подсистеме. При этом нужно обратить внимание не только на то, как настроена видимость по-умолчанию, но и на то, как она настроена для различных ролей. Для этого вызовем контекстное меню подсистемы Закупки и выполним команду Открыть командный интерфейс .
4. Откроем окно редактирования роли (например, Менеджер по закупкам ) и проверим, что в правах этой роли разрешено использование искомой команды. Если речь идет о стандартной команде (например, открытия списка справочника) – нужно проверить права на сам объект.
Если речь идет о нестандартной команде (например, Печать ) – нужно проверить права на эту команду.
5. Убедимся, что объект или команда не отключены функциональными опциями в режиме исполнения. Для того, чтобы узнать, с какими функциональными опциями связан объект, вызовем контекстное меню справочника Контрагенты и выполним команду Дополнительно .
6. В заключение, в режиме 1С:Предприятие проверим, что команда не отключена пользовательскими настройками.
Вернуться к настройкам, выполненным в конфигураторе, можно с помощью команды Все действия – Установить стандартные настройки .
Заметим, что для небольших конфигураций может быть не создано ни одной подсистемы. В этом случае команды для работы с объектами конфигурации будут помещены в раздел Рабочий стол , который создается системой по умолчанию. Вызвав из контекстного меню корня дерева объектов конфигурации команду Открыть командный интерфейс рабочего стола , можно редактировать командный интерфейс этого раздела.
Использование ограничений доступа к данным для различных объектов 1С:Предприятия 8
Этот раздел содержит информацию об особенностях использования ограничений доступа к данным, определяемых поведением различных объектов 1С:Предприятия.
О принципах функционирования ограничений доступа к данным
Основные принципы функционирования и использования ограничений доступа к данным описаны в документации 1С:Предприятия 8 и в разделе "Ограничения доступа к данным. Сведения о принципах функционирования".
Для лучшего понимания механизма проверки ограничений доступа полезно иметь в виду следующие правила:
- Каждое ограничение доступа к данным представляет собой запрос, записанный на языке запросов (с некоторыми упрощениями).
- Проверка ограничений доступа к данным выполняется для каждой записи каждой таблицы базы данных, обращение к которым происходит при выполнении запроса или в процессе манипулирования любыми объектами 1С:Предприятия.
- Для конкретной записи конкретной таблицы базы данных проверка ограничения заключается в исполнении запроса, представляющего это ограничение. Если в результате исполнения этого запроса получается непустая выборка, то считается, что доступ к записи разрешен. Если же выборка пустая, то доступ к записи запрещен.
- Если обращение к данной записи требует проверки нескольких ограничений (из разных полей и/или из разных ролей текущего пользователя), то проверяется каждое из ограничений. Результаты проверки ограничений, наложенных на доступ к разным полям, объединяются логической операцией "И". Результаты проверки ограничений, относящихся к разным ролям текущего пользователя, объединяются логической операцией "ИЛИ". Если результат полученного логического выражения равен "Истина", то доступ к записи разрешен. Иначе - доступ запрещен.
- Обращение по ссылке в ограничении имеет тот же смысл, что и обращение по ссылке в запросе, а именно, если ссылка указывает на несуществующую запись или имеет значение NULL, то значением поля по ссылке будет NULL.
- Если в ограничении доступа к данным операция сравнения использует поле табличной части, то результат сравнения равен "Истина", если табличная часть содержит хотя бы одну запись, для которой результат этого сравнения - "Истина". При использовании в одном сравнении двух полей разных табличных частей значения сравнения будет "Истина", если в декартовом произведении этих табличных частей найдется запись, для которой сравнение имеет значение "Истина".
Приведем несколько примеров.
Например, в случае простейшего ограничения вида:
ГДЕ Реквизит = &ПравильноеЗначениеРеквизита
можно считать, что для каждой записи, для которой проверяется ограничение(проверяемой записи), выполняется запрос следующего вида:
ВЫБРАТЬ 1
ИЗ ТаблицаИзОднойПроверяемойЗаписи
ГДЕ Реквизит = &ПравильноеЗначениеРеквизита
В данной таблице доступ к записи, в которой значение реквизита "Реквизит" совпадает со значением параметра сеанса "ПравильноеЗначениеРеквизита", разрешен. К другим записям этой таблицы доступ запрещен.
Другой пример. Усложним ограничение. Допустим нужно разрешить доступ к записи таблицы "Справочник.Контрагенты" не только если ее "Реквизит" имеет "правильное значение", но и в том случае, если "правильное значение" имеет "Реквизит" родителя этой записи (1-го или 2-го уровня). В этом случае ограничение может иметь следующий вид:
Контрагенты
ИЗ Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты1
ПО Контрагенты.Родитель = Контрагенты1.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты2
ПО Контрагенты1.Родитель = Контрагенты2.Ссылка
ГДЕ Контрагенты.Реквизит = &ПравильноеЗначениеРеквизита ИЛИ Контрагенты1.Реквизит = &ПравильноеЗначениеРеквизита ИЛИ Контрагенты2.Реквизит = &ПравильноеЗначениеРеквизита
Тогда запрос, который будет выполнятся в процессе проверки этого ограничения для конкретной записи справочника "Контрагенты", будет иметь вид:
ВЫБРАТЬ 1
ИЗ ТаблицаИзОднойПроверяемойЗаписи КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты1
ПО Контрагенты.Родитель = Контрагенты1.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты2
ПО Контрагенты1.Родитель = Контрагенты2.Ссылка
ГДЕ Контрагенты.Реквизит = &ПравильноеЗначениеРеквизита ИЛИ Контрагенты1.Реквизит = &ПравильноеЗначениеРеквизита ИЛИ Контрагенты2.Реквизит = &ПравильноеЗначениеРеквизита
Обращения по ссылкам в запросах и ограничения доступа к данным
При установке ограничений доступа к данным важно понимать, что ограничение проверяется при обращении к записи той таблицы базы данных, к которой относится ограничение. При этом если выполняется запрос к данным с ключевым словом РАЗРЕШЕННЫЕ , то запрет доступа к некоторой записи означает, что при выполнении этого запроса будет считаться, что эта запись таблицы базы данных (не результата запроса) отсутствует.
Пусть на справочник "Контрагенты" установлено следующее ограничение доступа:
ГДЕ Ответственный = &ТекущийПользователь
а сам справочник содержит такие записи:
Ответственный
(ссылка на Справочник.Пользователи)
Пусть регистр сведений "КонтактнаяИнформация" содержит следующие записи:
КонтактноеЛицо
(ссылка на Справочник.ФизЛица)
Организация
(ссылка на Справочник.Контрагенты)
Тогда если текущим пользователем является пользователь "Иванов", то результатом запроса:
ВЫБРАТЬ РАЗРЕШЕННЫЕ Имя, Ответственный
ИЗ Справочник.Контрагенты
Ответственный
(ссылка на Справочник.Пользователи)
Однако, результатом следующего запроса:
ВЫБРАТЬ РАЗРЕШЕННЫЕ КонтактноеЛицо, Организация
ИЗ РегистрСведений.КонтактнаяИнформация
Ответственный
(ссылка на Справочник.Пользователи)
противоречат ограничению, и поэтому считаются отсутствующими, а представление непустой ссылки на несуществующую запись равно "<Объект не найден> . ". В то же время, результатом запроса:
ВЫБРАТЬ РАЗРЕШЕННЫЕ КонтактноеЛицо, Организация.Имя КАК Имя, Организация.Ответственный КАК Ответственный
ИЗ РегистрСведений.КонтактнаяИнформация
поскольку противоречащие ограничению записи справочника "Контрагенты" считаются отсутствующими, а значениями полей "Имя" и "Ответственный" по ссылкам, указывающим на несуществующие записи, является значение NULL.
Если же необходимо по тому же признаку ограничить доступ к записям регистра сведений "КонтактнаяИнформация", то на этот регистр можно наложить ограничение вида:
ГДЕ Организация.Ответственный = &ТекущийПользователь
В этом случае результатом выполнения последнего запроса будет таблица:
Ограничения и табличные части
Ограничения доступа к данным действуют только на записи таблиц верхнего уровня и не могут ограничивать доступность записей табличных частей. С другой стороны, в тексте ограничения поля табличных частей использоваться могут. В этом случае в процессе проверки ограничения для некоторой записи будет исполнен запрос, в котором табличная часть будет соединена с таблицей из одной проверяемой записи левым внешнем соединением. Таким образом запись будет удовлетворять ограничению, если в ее табличной части найдется хотя бы одна запись, для которой условие в ограничении принимает значение "Истина".
Из соображений эффективности в ограничениях доступа к данным нельзя использовать агрегатные функции. Поэтому возможности участия в ограничениях доступа к данным каких-нибудь условий на совокупности записей табличных частей не предусмотрено. Подобная цель может быть достигнута посредством запросов, вложенных в ограничения, однако пользоваться этим необходимо с осторожностью из-за возможного снижения производительности.
Например, если документ "Накладная" содержит табличную часть "Состав", то ограничения доступа к этому документу проверяются при обращении к каждой накладной, как к единому целому и не могут разрешить доступ к какой-нибудь одной записи его табличной части "Состав", а к какой-нибудь другой запретить.
Пусть таблица "Документ.Накладная" содержит следующие записи:
Контрагент
(ссылка на Справочник.Контрагенты)
Состав (табличная часть)
В этом случае запрос, исполняемый для каждой накладной в процессе проверки следующего ограничения:
ГДЕ Состав.Количество > 50
будет иметь вид
ВЫБРАТЬ 1
ИЗ ТаблицаИзОднойПроверяемойЗаписи КАК Накладная
ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ Документ.Накладная.Состав КАК Состав
ПО Накладная.Ссылка = Состав.Ссылка
ГДЕ Состав.Количество > 50
Следовательно доступ будет разрешен только для записи "Трикотажная фабрика". Поэтому запрос:
ВЫБРАТЬ РАЗРЕШЕННЫЕ Контрагент, Состав.(Номенклатура, Количество)
ИЗ Документ.Накладная
а запрос к вложенной таблице:
ВЫБРАТЬ РАЗРЕШЕННЫЕ Контрагент, Номенклатура, Количество
ИЗ Документ.Накладная.Состав
поскольку ограничение накладывается только на записи верхнего уровня, но не на записи табличных частей.
Если нужно разрешить доступ еще и к тем накладным, у которых состав пустой, то ограничение может быть модифицировано так:
ГДЕ Состав.Количество > 50 ИЛИ Состав.Количество ЕСТЬ NULL
Если же необходимо разрешить доступ только к тем накладным, у которых в табличной части "Состав" нет записей с "Количеством", превышающем 50, то в ограничении необходимо использовать вложенный запрос:
Накладная1
ИЗ Документ.Накладная КАК Накладная1
ГДЕ Накладная1.Ссылка В
(
ВЫБРАТЬ Состав1.Ссылка
ИЗ Документ.Накладная.Состав КАК Состав1
СГРУППИРОВАТЬ ПО Состав1.Ссылка
ИМЕЮЩИЕ МАКСИМУМ(Состав1.Количество) <= 50
) ИЛИ Накладная1.Состав.Количество ЕСТЬ NULL
Объекты встроенного языка
Для работы с данными в объектной технике во встроенном языке 1С:Предприятия предусмотрены специальные объекты. Например для справочника это: СправочникиМенеджер , СправочникМенеджер.<Имя справочника> , СправочникСсылка.<Имя справочника> , СправочникОбъект.<Имя справочника> , и другие.
Все операции над объектами встроенного языка 1С:Предприятия выполняются в режиме "ВСЕ" (без использования режима "РАЗРЕШЕННЫЕ"). Для успешного получения разрешенных объектов в соответствующих методах объектов необходимо указывать отборы, не противоречащие ограничениям. Например, если на чтение из регистра сведений "КонтактнаяИнформация" установлено ограничение вида:
ГДЕ Тип = &ТипКонтактнойИнформации"
то для успешного выполнения метода
необходимо установить отбор:
Если ограничение доступа сложное и не может быть сформулировано в терминах отборов, то использование выборки (метод Выбрать() ) и аналогичных оказывается невозможным. В этом случае следует использовать запросы. Проектирование разграничения доступа к данным таким образом, чтобы ограничения могли быть сформулированы в терминах отборов, позволит использовать объекты встроенного языка с максимальной гибкостью.
Виртуальные таблицы запросов
При использовании в запросах без ключевого слова РАЗРЕШЕННЫЕ виртуальных таблиц в условиях установленных ограничений доступа к данным необходимо указывать отборы, не противоречащие ограничениям не только для запроса в целом, но и для виртуальных таблиц. Например:
ВЫБРАТЬ
КонтактнаяИнформацияСрезПервых.Представление
ИЗ
РегистрСведений.КонтактнаяИнформация.СрезПоследних(, Тип = &Тип ) КАК КонтактнаяИнформацияСрезПервых
ГДЕ
КонтактнаяИнформацияСрезПервых.Тип = &Тип
Выделенный отбор по виртуальной таблице "СрезПоследних" может содержать произвольное логическое выражение, допустимое для раздела ГДЕ, использующее поля, которые присутствуют в виртуальной таблице.
Читайте также: