Запрет на запись документа 1с
В типовых конфигурациях 1С есть замечательный инструмент, позволяющий запретить изменения документов в закрытых периодах. Обзор и инструкцию по нему вы можете прочитать по ссылке . Но иногда все таки возникает необходимость проведения операций задним числом или исправления уже введенных данных. Поэтому, какой-то период всегда держат открытым для редактирования. Как правило, это текущий месяц или квартал.
При работе вы или другие пользователи часто открываете старые документы, для того, чтобы что-то посмотреть или проверить. Иногда, особенно в конце периода, при подготовке отчетности случайно можно поменять данные. Так же можно просто « случайно » перепровести старый документ. Напомню, что дата запрета у нас на текущий период еще не установлена. Изменения документов, включая даже простое перепроведение документа, могут привести к изменениям, которые сложно отловить, особенно если сразу не обратили на это внимание.
Рассмотрим несколько способов решения данной проблемы.
Использование даты запрета
В программе можно настроить автоматическое изменение даты запрета. Минусы данного способа очевидны — пользоваться таким строгим ограничением не очень удобно, так как при необходимости внесения изменений в текущем периоде — придется отключать контроль, а потом включать заново.
Правильное закрытие документов
Можно развить в себе и в сотрудниках привычку закрывать документы не кнопкой «Провести и закрыть», а как это принято говорить «крестиком». Т.е. пиктограммой в правом верхнем углу формы. Предположим, что за себя вы можете поручиться, то за других сотрудников, работающих в базе, сделать это будет сложно.
Использование расширения
Я подготовил специальное расширение для типовых конфигурации, которое позволяет решать данную проблему альтернативным способом.
Расширение предоставляет возможность включить режим «Только просмотр» для проведенных документов. Другими словами, когда вы открываете проведенный документ, вы не можете изменять данные на форме. Для того чтобы внести изменения, необходимо будет найти этот документ в списке и вызвав правой клавишей мыши контекстное меню, отменить его проведение. Таком образом, случайная ошибка при этом практически исключается.
Чтобы быстро найти нужный документ в списке можно использовать следующий метод: В открытой форме необходимого документа выбрать команду Еще. В открывшемся меню выбрать команду Показать в списке . Далее откроется список, текущей строкой в котором будет искомый документ. И уже здесь можно отменить проведение указанным выше способом
Расширение добавляет на главную страницу программы в раздел сервис отдельную команду для вызова формы настройки. Доступ к настройкам имеют только пользователи с полными правами.
Есть несколько режимов работы. Самый первый режим отключает контроль для всех документов. Т.е. расширение ничего не делает и система работает в штатном режиме . Он может пригодится для временного отключения расширения.
Второй режим, включает контроль для всех документов. Любые проведенные документы будут открываться в режиме «Только просмотр»
Третий режим позволяет указать виды документов, для которых будет производиться контроль. Например, вы можете выбрать только банковские документы. Здесь все зависит от особенностей учета в Вашей организации. Этот вариант является наиболее предпочтительным.
В заключение рассмотрим плюсы и минусы расширения.
- дополнительные возможности контроля изменения документов
- подходит для разных конфигураций
- простота настройки и подключения
- несколько режимов работы
- не влияет на обновления
- для редактирования проведенного документа из списка ограничений, приходится отменять проведение
- нельзя использовать в базовой версии
Ознакомится с возможностями данного продукта вы также можете на странице расширения.
Напоминаю, что Вы всегда можете обратиться ко мне по любым вопросам связанными с доработкой и настройкой 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С:Предприятия выполняются в режиме "ВСЕ" (без использования режима "РАЗРЕШЕННЫЕ"). Для успешного получения разрешенных объектов в соответствующих методах объектов необходимо указывать отборы, не противоречащие ограничениям. Например, если на чтение из регистра сведений "КонтактнаяИнформация" установлено ограничение вида:
ГДЕ Тип = &ТипКонтактнойИнформации"
то для успешного выполнения метода
необходимо установить отбор:
Если ограничение доступа сложное и не может быть сформулировано в терминах отборов, то использование выборки (метод Выбрать() ) и аналогичных оказывается невозможным. В этом случае следует использовать запросы. Проектирование разграничения доступа к данным таким образом, чтобы ограничения могли быть сформулированы в терминах отборов, позволит использовать объекты встроенного языка с максимальной гибкостью.
Виртуальные таблицы запросов
При использовании в запросах без ключевого слова РАЗРЕШЕННЫЕ виртуальных таблиц в условиях установленных ограничений доступа к данным необходимо указывать отборы, не противоречащие ограничениям не только для запроса в целом, но и для виртуальных таблиц. Например:
ВЫБРАТЬ
КонтактнаяИнформацияСрезПервых.Представление
ИЗ
РегистрСведений.КонтактнаяИнформация.СрезПоследних(, Тип = &Тип ) КАК КонтактнаяИнформацияСрезПервых
ГДЕ
КонтактнаяИнформацияСрезПервых.Тип = &Тип
Выделенный отбор по виртуальной таблице "СрезПоследних" может содержать произвольное логическое выражение, допустимое для раздела ГДЕ, использующее поля, которые присутствуют в виртуальной таблице.
Мы рассмотрим в этой статье, как можно ограничить права на запись справочников и документов 1С. Использовать для этого примера будем программу 1С Бухгалтерия. Для нашего случая мы возьмем конфигурацию Бухгалтерии 2.0. С помощью ее мы будет решать задачу: ограничение доступа сотрудникам к изменениям и записи в справочники и документы. Для выполнения поставленной задачи можно поменять роль Бухгалтер, чтобы она была доступна только определенному числу пользователей. Но это наложит некоторые ограничения на работу в базе и в случае обновлений и различных изменений снова придется изменить роли вручную снова. А это займет много времени.
Попробуем решить данную задачу, чтобы не вносить лишние изменения и сделать все максимально удобно и быстро:
Нам нужно в конфигурации завести новую роль. Переименовываем ее в Контрагенты.
Права этой роли не надо предоставлять.
Заводим новый модуль и пишем ему имя УправлениеДоступом.
Далее заводим подписку на событие, назовем ее по своему желанию, мы назовем эту подписку: (ПередЗаписьюКонтрагентыУправлениеДоступом).
Там, где надо выбрать «источник», пишем и устанавливаем тип данных – составной. Также указываем в этом поле «справочникиКонтрагенты» и «ДоговорыКонтрагентов».
В строчке «Событие» указываем ПередЗаписью. В строке «Источник» выбираем тот модуль, который мы создавали по инструкции до этого. После этого программа запустит процедуру для этого события.
Далее выбираем роль «Контрагенты», тем работникам, которым надо вносить изменения в базе или производить какие-либо глобальные действия.
Эти действия помогут нам обезопасить базу от потери данных или их кражи. Также это поможет избежать случайных изменений, которые могут внести необученные пользователи и также нарушит работоспособность базы.
Если у вас возникли какие-то вопросы по этой инструкции или в вашем случае надо сделать более сложные доработки, и вы не в силах выполнить их самостоятельно, то мы рекомендуем вам обратиться к нашим специалистам. Наши специалисты обладают огромным опытом и имеют более 500 сертификатов и смогут решить любую вашу задачу в кратчайшие сроки и это не потребует от вас больших вложений.
Дата запрета редактирования данных — стандартная функция конфигураций 1С 8.3. Данный механизм позволяет задавать ограничения для редактирования, добавления, удаления и проведения документов ранее определенной даты. Иначе говоря, позволяет закрыть период для редактирования . Запрет можно устанавливать как в целом во всей программе. Так и по отдельным объектам, например, по организациям. Так же его можно установить для определенных пользователей.
На что влияет дата запрета
После установки запрета редактирования будет запрещено изменение, проведение и удаление документов. Таким образом, дата запрета
не позволяет записать существующий документ с датой, входящей в период запрета
запрещает сохранить новый документ с датой, входящей в период ограничений
не позволяет удалить документы, помеченные на удаление, с датой, входящей в запрещенный период
Простая настройка даты запрета
Для включения функции запрета редактирования необходимо перейти в раздел Администрирование (Администрирование и НСИ) – Настройки пользователей и прав . На открывшейся форме необходимо включить флажок Даты запрета изменения и перейти по ссылке Настроить .
Самой простой является настройка общей даты запрета для всех пользователей. При такой настройке никто, даже вы сами, не сможете изменить документы в закрытом периоде. Для их корректировки придется отключать или изменять дату запрета.
Общие ограничения по пользователям
Когда требуется назначить ограничения для определенных пользователей, необходимо перейти на вкладку По пользователям. Далее необходимо указать с помощью кнопки Подобрать нужных пользователей. Таким образом, можно настроить даты запретов в зависимости от компетенции и должности того или иного пользователя системы.
Ограничения по разделам и объектам
Важной настройкой ограничений является возможность установки запрета на определенные разделы и объекты учета. В поле Указывать дату запрета доступны следующие значения:
- Общая дата – дата запрета задается для всех данных.
- По разделам – для каждого раздела программы устанавливается своя дата запрета. При этом становится доступным список, в который можно добавлять Разделы и указывать для каждого раздела свое значение даты запрета.
- По разделам и объектам – даты запрета задаются и в разрезе разделов, и в разрезе объектов. Для каждого объекта устанавливается своя дата запрета. Если выбрано это значение, то становится доступным список, в который можно добавлять объекты и указывать для каждого объекта свое значение даты запрета.
Например, способ указания по разделам и объектам , можно использовать, когда в системе ведется учет по нескольким организациям.
Читайте также: