Запрет на запись документа 1с
Частенько приходится слушать от руководства: "запретить этому пользователю, запись этого документа\справочника". А через какое-то время, почему тот-то не может записать справочник/документ. Вот и родилась идея оперативного запрета/разрешения записи документа/справочника/рс.
Данное решение работоспособно в типовых решениях, где присутсвует справочник "ГруппыПользователей".
Алгоритм механизма следующий:
1. Создаются подписки на событие ПередЗаписью на все документы/справочники/рс (в чем есть необходимость).
2. В справочнике "ГруппыПользователей" создается элемент, например: "Запрет на запись документа".
3. Далее, в эту группу ("Запрет на запись документа") добавляются элементы, для которых необходимо запретить запись, с именем = Имя справочника/документа/рс .
4. В обработчтике подписки на событие вставляем код:
ИмяОбъекта = Источник . Метаданные (). Имя ;
ГруппаЗапрета = Справочники . ГруппыПользователей . НайтиПоНаименованию ( "Запрет на запись документов" , Истина);
ОбъектЗапрета = Справочники . ГруппыПользователей . НайтиПоНаименованию ( ИмяОбъекта , Истина, ГруппаЗапрета );
Если НЕ ОбъектЗапрета = Справочники . ГруппыПользователей . ПустаяСсылка () Тогда
Запрос = Новый Запрос ;
Запрос . Текст = "ВЫБРАТЬ
| ГруппыПользователейПользователиГруппы.Ссылка
|ИЗ
| Справочник.ГруппыПользователей.ПользователиГруппы КАК ГруппыПользователейПользователиГруппы
|ГДЕ
| ГруппыПользователейПользователиГруппы.Пользователь = &Пользователь
| И ГруппыПользователейПользователиГруппы.Ссылка = &Ссылка" ;
Запрос . УстановитьПараметр ( "Пользователь" , ПараметрыСеанса . ТекущийПользователь );
Запрос . УстановитьПараметр ( "Ссылка" , ОБъектЗапрета );
Результат = Запрос . Выполнить ();
Если НЕ Результат . Пустой () Тогда
Отказ = Истина
КонецЕсли;
В итоге имеем механизм, оперативного запрета/разрешения записи любого документа/справочника/РегистраСведений.
P.S. У данного решения остается вопрос с производительность при большом докуметообороте и включенном РЛС. Протестировать пока не представляется возможным.
1С 8.1.
Скажите пожалуйста, как можно ограничить возможность Записи документов, не запрещая при этом возможность их проведения ?
У меня пользователи создают документы, записывают их, но не проводят. Делают это задним числом, что сказывается на отчетности.
Нужно что бы можно было либо:
- Документ создать можно, записать, но выйти - не проведя, нельзя.
- Документ создать можно, но кнопки записать нет вообще, есть только Провести.
(проблема в том что Провести - насколько я знаю включает в себя и Записать, поэтому блокируя Запись, в процедуре "ПередЗакрытием" , у меня и проведение блокируется. Помогите пожалустаа.
Нажатие на кнопку ОК переопредели своей процедурой, в которой присваивай значение гобальной переменной модуля формы, например Проведение = Истина, а ПриЗаписи проверя, если Не Проведение, то блокируй запись.
to Sasha_Rapira - где это выставить ?
Документ типовой или нет?
Открываете конфигуратор, в дереве ищете документ, у него открываете Форма документа. Нажмите/выделите саму форму и в свойствах "ПриЗаписиПерепроводить".
ПРивет - привет !! ПРоверила ! . такая галочка стоит уже. и стояла ранее. НАписано что документ будет проводиться, при записи, ЕСЛИ УЖЕ БЫЛ проведен!! А речь о новых доках! (см.проблему в первом топе) .
(6) на самом деле всё легко. Вас остается только одна - сделать что бы при закрытии нового документа он проверял на проведение.
Вариантов решения очень много, сделаем как вы хотели.
Модуль формы документа.
Процедура ПередЗаписью(РежимЗаписи, РежимПроведения)
+ если пытаюсь мухлевать, окно: Документ изменен, сохранить, да ? нет, сохраняет сам .
Да, работает ! За листинг Действие 1 - большое спасибо!
А вот защиты от дурака - нет (((((( крестиком можно закрыть .
Ну и такой вариант:
А есть какая нибудь виндовая или программная (1с-ная) отсечка, не дающая сохранять по крестику ?
Такая фишка есть во всяких МикрософтОфис и прочих, когда правленный документ не закрывается, не попытавшись сохраниться (да,нет,отмена) . может есть что то способное блокировать такое сохранение ?
У меня (14) работает полностью, я бы не кинул нерабочий код. Создаю новый, закрываю на крестик, он спрашивает, жму сохранить и сразу проводит
Спасибо за участие, и за тим вьювер ) тут пока сисадмина допросишься, поседеешь !
(вы еще не уходите ? у меня еще тема, насчет отчета (уже месяц с ним борюсь, щас будут публиковать ))
(2) обращайтесь. всегда помогу "своим" =) можете вконтакте добавить и т.д. я каждый день на работе, будет свободное время, буду вам подсказывать.
Ссылку на тему отчета
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
to Тындр - предусмотрительно!
но тут внутренний нюанс - после того как документ все же проведен (а мы добивались именно этого), далее другими процедурами создается дочерний платежный документ, и это главная задача. Вот его уже, никто никуда не денет, там у меня просто запрет на удаление.
Главное что бы не висели первоначальные - записанные, но непроведенные доки.
я не знаю как и кому написать - в мою вторую тему войти не могу. Есть администратор кто это прочтет и посмотрит что не так ? я залогинена на сайте, но когда перехожу по ссылке:
Как сделать выборку по строкам в табличной части документа
- открывается тема, а мне предлагают войти или зарегистрироваться. ввожу имя пароль, выкидывает меня на главную форума. захожу в тему свою - опять так же. я уже браузер поменяла и пароль сохранила, бестолку
(15) По поводу закрытия формы по крестику я решил подобную проблему так. В обработке формы передЗакрытием СтандартнаяОбработка = Ложь; Посмотрите в эту сторону если вопрос еще актуален.
(24) то, что вы придумали - это полнейший дурдом. Пользователи вас или повесят или четвертуют.
Например, ошибочно ввели документ, у вас они не смогут удалить. Потом, если большой документ, строчек 100 и по какой-то причине не проводится, они реально не смогут его сохранить, чтобы второй раз не набирать.
давайте по порядку:
to hhhh - Здраво рассуждаете, но заметьте - задача ограничения касается не всей конфигурации в целом, а одного лишь типа документов. С которым работают люди одной должности. У них не будет 100 строк в этом документе, да и - кто мешает им - набить хоть 200 строк и! - провести, сохранив тем самым. И никто не обижен. Ничто не пропало.
А при грамотной работе - ошибочных документов будет раз два и обчелся. Надо что-то удалить ? Обратятся куда-нужно, заодно и выяснится - кто и зачем мухлюет в базе.
Извините - головой надо думать.
to Krolik Bezobraznik - спасибо и вам за совет.
to Sasha_Rapira - в соседнюю тему мою не могу зайти, скинуть то что у меня уже есть. У вас цикл , естественно в общем виде, я буду прорываться на форум .
Да, с целью обмануть порядок и план своей работы, пользователи набивают документы, а проводят их задним числом.
(32) обычно бывает так, что ошибки при проведении. Особенно когда будут обновления потом. Очень важна возможность просто сохранить документ из 200 строк, не проводя.
(35) Так запретить неоперативное проведение может быть?
Первые отвечающие напомнили анекдот, который вчера начальник рассказал :)
"Яблоня. На ней яблоко. Запустили обезьяну. Та увидела яблоко, подбежала, потрясла раз - яблоко не упало. Потрясла два - яблоко висит. Оглянулась, нашла палку, кинула - яблоко упало.
Далее запустили прапорщика. Потряс раз - не упало, потряс два - не упало. Ему и говорят: "Может подумать стоит?".
В 1С можно настроить ограничения по ролям, т.е. запретить пользователям с определенной ролью изменять какие либо реквизиты или объекты конфигурации. Например, при создание или открытии какого либо документа (справочника) можно запретить изменять номер, дату или другие необходимые элементы. На практики подобные задачи встречаются довольно часто, так как некоторые пользователи могут поменять дату документ или его номер, тем самым нарушить учет документооборота. Реализовать все это достаточно просто.
Программное ограничения по ролям в 1С
Допустить у нас в базе есть роль «Пользователь» и нам необходимо всем учетным записям с данной ролью запретить изменять номер и дату документа поступления, а так же указывать в поле «Ответственный» наименование роли.
Для этого в обработчике события «При создании на сервере» пишем вот такой код.
Думаю в нем все понять, если учетная запись под которой создается документ имеет роль «Пользователь» тогда запрещаем редактировать «Номер», «Дату» и в поле «Ответственный» подставляем значение из справочника «Пользователи» которое найдем по коду. Под данным кодом в справочнике находиться «Пользователь».
Запустим 1С и посмотрим что получилось, в итоге ввести что-то с клавиатуры в поля «Номер», «Дата» не получиться.
Но если у данного поля есть возможность выбора, например, как у даты то изменить её все же буде возможно.
Для того чтобы исключить подобную ситуацию можно отключить доступность, без ограничения редактирования.
В этом случае пользователь уже ни чего не сможет сделать.
Вариантов реализации подобных задач очень много, я показал один из, возможно он даже не самый оптимальной. Если Вы знаете другой обязательно поделитесь.
Кстати механизм подставления «Ответственного» тут не совсем корректен, так как в базе может быть много пользователей 10, 20 и если у всех у них есть роль «Пользователь» то она и будет подставляться, тут необходимо подставлять имя пользователя а не роли, с помощью ПользователиИнформационнойБазы.ТекущийПользователь() но об этом в следующей статье.
Мы рассмотрим в этой статье, как можно ограничить права на запись справочников и документов 1С. Использовать для этого примера будем программу 1С Бухгалтерия. Для нашего случая мы возьмем конфигурацию Бухгалтерии 2.0. С помощью ее мы будет решать задачу: ограничение доступа сотрудникам к изменениям и записи в справочники и документы. Для выполнения поставленной задачи можно поменять роль Бухгалтер, чтобы она была доступна только определенному числу пользователей. Но это наложит некоторые ограничения на работу в базе и в случае обновлений и различных изменений снова придется изменить роли вручную снова. А это займет много времени.
Попробуем решить данную задачу, чтобы не вносить лишние изменения и сделать все максимально удобно и быстро:
Нам нужно в конфигурации завести новую роль. Переименовываем ее в Контрагенты.
Права этой роли не надо предоставлять.
Заводим новый модуль и пишем ему имя УправлениеДоступом.
Далее заводим подписку на событие, назовем ее по своему желанию, мы назовем эту подписку: (ПередЗаписьюКонтрагентыУправлениеДоступом).
Там, где надо выбрать «источник», пишем и устанавливаем тип данных – составной. Также указываем в этом поле «справочникиКонтрагенты» и «ДоговорыКонтрагентов».
В строчке «Событие» указываем ПередЗаписью. В строке «Источник» выбираем тот модуль, который мы создавали по инструкции до этого. После этого программа запустит процедуру для этого события.
Далее выбираем роль «Контрагенты», тем работникам, которым надо вносить изменения в базе или производить какие-либо глобальные действия.
Эти действия помогут нам обезопасить базу от потери данных или их кражи. Также это поможет избежать случайных изменений, которые могут внести необученные пользователи и также нарушит работоспособность базы.
Если у вас возникли какие-то вопросы по этой инструкции или в вашем случае надо сделать более сложные доработки, и вы не в силах выполнить их самостоятельно, то мы рекомендуем вам обратиться к нашим специалистам. Наши специалисты обладают огромным опытом и имеют более 500 сертификатов и смогут решить любую вашу задачу в кратчайшие сроки и это не потребует от вас больших вложений.
Часто возникает необходимость в частичном ограничении доступа к данным. Например, когда пользователь должен видеть документы только своей организации. В таких случаях в 1С используется механизм ограничения доступа на уровне записей (так называемый, RLS – Record Level Securiy).
Для примера предположим, что перед нами стоит следующая задача. На предприятии ведется многофирменный учет и каждый контрагент и пользователь базы данных относится к определенной организации. Необходимо обеспечить доступ к справочнику “Контрагенты” таким образом, чтобы каждый пользователь мог просматривать, редактировать и добавлять контрагентов только своей организации.
Для решения задачи будем использовать платформу “1С:Предприятие 8.2″. Создадим новую конфигурацию в свойствах которой в качестве основного режима запуска будет выбран вариант “Управляемое приложение”.
Далее создадим справочник “Организации” и ещё два справочника – “Контрагенты” и “Пользователи” с реквизитом “Организация”. Кроме справочников нам понадобятся два параметра сеанса – “Организация” и “Пользователь” (соответствующих типов). Значения этих параметров устанавливаются при запуске сеанса работы с конфигурацией и хранятся до его завершения. Именно значения этих параметров мы и будем использовать при добавлении условий ограничения доступа на уровне записей.
Установка параметров сеанса выполняется в специальном модуле – “Модуль сеанса”
В этом модуле опишем предопределенную процедуру “УстановкаПараметровСеанса” в которой вызовем функцию заранее подготовленного общего модуля “ПолныеПрава”. Это необходимо в силу особенностей работы базы данных в режиме управляемого приложения, когда часть программного кода может выполняться только на стороне сервера (подробно на объяснении этих принципов в данной статье я останавливаться не буду).
В свойствах модуля “ПолныеПрава” необходимо отметить флажки “Сервер”, “Вызов сервера” и “Привилегированный” (последнее означает, что процедуры и функций данного модуля будут выполнятся без контроля прав доступа). Текст модуля будет выглядеть так:
В модуле управляемого приложения будем проверять наличие пользователя конфигурации в справочнике “Пользователи” (для простоты будем искать его по наименованию) и завершать работу системы если он не найден. Это необходимо для того, чтобы обеспечить заполнение параметров сеанса.
Перейдем на закладку “Права” роли “Пользователь” и откроем список прав справочника “Контрагенты”. Будем использовать шаблон ограничений “КонтрагентыЧтениеИзменеие” для прав “Чтение”, “Изменение” и “Доблавление”.
Для права “Чтение” будем использовать шаблон с параметром “ИЛИ ЭтоГруппа”. При этом пользователям данной роли будет разрешено чтение не только элементов справочника “Контрагенты” своей организации, но и всех групп этого справочника.
Поскольку при добавлении новых элементов справочника системой выполняется неявное чтение предопределенных реквизитов (это нужно, например, для нумерации), то необходимо обеспечить беспрепятственное чтение этих полей. Для этого добавим дополнительную строку с пустым текстом ограничения в таблицу ограничения доступа к данным и перечислим поля для которых действует данное правило – Ссылка, Версия данных, Родитель, Код.
Таким образом, поставленная задача ограничения доступа на уровне записей решена. Пользователи с действующими ограничениями получат доступ на просмотр и редактирование данных только своей организации.
Читайте также: