Архив за месяц: Октябрь 2018

Как работает доступ на уровне записей RLS в 1с 8.3

С помощью RLS можно скрыть некоторые записи от пользователей, которые не должны их видеть.

Такую настройку можно привязать чисто к роли, или же создать справочник, в котором будет информация о том, какой пользователь к чему имеет доступ. Типичный пример — никто кроме расчетчика и кадровика не должен видеть РКО с видом операции «Выплата зарплаты». Делаем справочник, к примеру «Группы доступа РКО», а в его табличной части добавляем два реквизита: 1) пользователь, 2) Вид операции РКО. И к примеру далее отталкиваемся от того, что если есть комбинация Пользователь/Вид операции РКО — тогда пользователю можно видеть РКО с таким видом операций.

Касательно ролей, есть один интересный вопрос: Что если в одной роли есть ограничение доступа на уровне записей, а в другой нет? Будет ли ограничение потому что в одной из ролей оно есть, или не будет, потому что в другой роли его нет? В этом случае 1С будет работать привычным для программиста образом — Если хотя бы в одной роли что то разрешено, то разрешение преобладает над запретом. Иными словами в описанном случае ограничение доступа не будет действовать, будут видны все записи.

Поэтому обычно используют две роли: «Пользователь», и «Наша Роль» — в которой мы и творим ограничение на уровне записей, далее (ОУЗ
 (RLS) ).

Можно поступить хитрее. Для всех ролей внести ОУЗ
 (RLS) , а для отдельной роли нет. И у кого будет эта роль — тот будет видеть все записи.

Роли, у которых нет прав на данный объект, не влияют на ОУЗ (RLS) . Поэтому вносить правило можно только в роли, у которых имеется доступ к объекту, который мы хотим ограничить.

ОУЗ используется только для действий «Чтение»,»Изменение»,»Добавление» и «Удаление». Причем для каждого действия правила могут быть различными. Это дает большую гибкость.

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

Таким образом запрос вида «ГДЕ ЛОЖЬ» сделает то, ни одной записи мы не увидим. А «ГДЕ ИСТИНА» — покажет все записи. Что касается нашего РКО, то чтобы не увидели зарплатные документы, запрос будет выглядеть так 

ГДЕ
ВидОперации<>Значение(Перечисление.ВидыОперацийРКО.ВыплатаЗаработнойПлатыРаботнику)
И
ВидОперации<>Значение(Перечисление.ВидыОперацийРКО.ВыплатаЗаработнойПлатыПоВедомостям)

То же самое будет, если обратиться напрямую к таблице

ТекущаяТаблица ИЗ Документ.РасходныйКассовыйОрдер КАК ТекущаяТаблица ГДЕ
ТекущаяТаблица.ВидОперации<>Значение(Перечисление.ВидыОперацийРКО.ВыплатаЗаработнойПлатыРаботнику)
И
ТекущаяТаблица.ВидОперации<>Значение(Перечисление.ВидыОперацийРКО.ВыплатаЗаработнойПлатыПоВедомостям)

Есть специальные зарезервированные фразы, которые начинаются с символа #. Так можно обратиться к текущей таблице с помощью выражения #ТекущаяТаблица. Зачем это нужно, для универсальности наверно. Использовать псевдонимы можно и нужно, если у вас используется несколько таблиц, у которых есть одинаковые реквизиты. В предыдущем запросе вы увидели, как мы создали псевдоним «ТекущаяТаблица» для таблицы «Документ.РасходныйкассовыйОрдер». А можно то же самое сделать вот так.

	ТекущаяТаблица
ИЗ
	#ТекущаяТаблица КАК ТекущаяТаблица
 ГДЕ
ТекущаяТаблица.ВидОперации<>Значение(Перечисление.ВидыОперацийРКО.ВыплатаЗаработнойПлатыРаботнику)
И
ТекущаяТаблица.ВидОперации<>Значение(Перечисление.ВидыОперацийРКО.ВыплатаЗаработнойПлатыПоВедомостям)

Если такой запрос с выражением «#ТекущаяТаблица» использовать в разных объектах, то каждый раз будет иметься ввиду именно таблица этого объекта. То-есть — это относительная ссылка на таблицу конкретного документа, справочника, регистра, в котором используется данное выражение.

Как вы заметили — в запросах ОУЗ нет слова ВЫБРАТЬ и так же нет полей. Зачем последние два запроса начинаются со слова «ТекущаяТаблица» — если это псевдоним таблицы, сказать не могу. Просто все так делают.

Покажу ещё пример, как сделал настраиваемые ограничения, с помощью нового справочника. Здесь присутствует объединения. Пользователь не видит продажи отчетах по регистру «Продажи», у которых ему не имеется соответствующей строки «пользователь/склад» в этом справочнике.

ТекущаяТаблица ИЗ РегистрНакопления.Продажи КАК ТекущаяТаблица
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступаСкладов.Склады КАК ГруппыДоступаСклады
    ПО 
        (    ТекущаяТаблица.Подразделение = ГруппыДоступаСклады.Склад.Подразделение
        	)
        И (ГруппыДоступаСклады.Ссылка.Пользователь = &ТекущийПользователь))

Здесь мы увидели новый элемент — такой как &ТекущийПользователь. Это параметр. Параметры берутся из одноименных переменных сеанса. По другому установить параметры для отбора невозможно.

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

Куда вводятся правила ОУЗ (RLS) в 1С 8. Есть много способов записать эти правила. Можно их писать непосредственно в документе, в роли, в окне «Все роли», в окне «Ограничения доступа». Выбираете роль, объект, и действие (чтение, запись, изменение или удаление) — и в поле редактирования нужно написать правило.

В окне редактирования одной роли, или в окне редактирования «Все ограничения доступа» имеется закладка «Шаблоны ограничений«, в котором можно написать шаблон, а потом вместо того, чтобы каждый раз копировать весь запрос, вносить только имя шаблона в формате #ИмяШаблона. Это предпочтительный метод, так как при изменении запроса не нужно искать и переклацывать его повсюду.

Каждая отдельно взятая роль «видит» только свои шаблоны. Так что для использования того же запроса в другой роли, нужно в ней создать аналогичный шаблон.

Изменили шаблон, и всё. Вот для примера на картинке мы создали шаблон.

А вот мы им воспользовались.

или так, в окне «Все роли»

Или так, в окне «Все ограничения доступа».

Кто не знает, это в окне метаданных нужно открыть «Общие» ->»Роли» и щелкнуть по пункту «Роли» правой кнопкой мыши, и выбрать нужный пункт.

Кстати в окне «Все ограничения доступа» есть удобный конструктор запроса. А вот в шаблонах почему то конструктора нет. Поэтому для удобства первоначально можно создать запрос в этом конструкторе, а затем скопировать в шаблон и там уже корректировать при необходимости.

Для этого откройте для редактирования нужную строчку ограничений, и выберите кнопку конструктора.

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

Эта ошибка возникает не только при подключении через 1С, но и просто при попытке открыть файл через сетевой ресурс.  Обычно это бывает, если ваш компьютер на XP, а сервер — виндовс семерка, либо наоборот, но не обязательно. Просто чаще бывает именно так.

Нужно зайти на компьютер-сервер —

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

В нем зайти в реестр,  то есть нажать сочетание клавиш windows + R, либо зайти «Пуск» и внизу в окне ввода набрать «cmd» и нажать «Enter», он же «Ввод», он же стрелка вниз и влево (перевод каретки).

В реестре перейти в раздел: 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanServer\Parameters

найти там параметр под названием: 

IRPStackSize

Если его нет — создать: Щелкнуть правой кнопкой мыши на свободном месте правой панели, и выбрать пункт «Создать — Параметр DWORD (32 бита)

Ввести наименование
IRPStackSize  в новой добавившейся строчке или же скопировать отсюда.

Важно — соблюдайте регистр букв. То есть большие и маленькие буквы как здесь указано, так и должны быть в наименовании в реестре.

Нажмите Enter

Нажмите ещё раз Enter или кликните двойным щелчком левой кнопки мыши по имени параметра 
IRPStackSize

или кликните правой кнопкой мыши по этой строке и выберите пункт «Изменить»

В появившемся окне выберите систему исчисления «Десятичная«, а значение напишите 50. По имеющейся у меня информации с других сайтов — это максимальное число одновременных подключений. Причем 1с 8 делает сразу несколько подключений — от 10 и больше. По проверенной мной информации, обычно это 24 открытых файла.

Нажмите ОК.

Закройте окно реестра.

Перезагрузите компьютер.

Ещё раз повторяю, так как многие, и я в том числе на этом спотыкались — это всё нужно делать на компьютере — на котором располагается папка общего доступа с базой 1С.

То же самое касается любых файлов, при доступе к которым не из 1с возникают подобные ошибки.

Вообще, если вы хотите использовать windows 7 для работы на ней файловой базы с количеством одновременно подключаемых пользователей от 3-х и выше, вышеперечисленных мер недостаточно. Нужно превратить операционную систему в некий файловый сервер, я бы сказал даже, в файловую помойку. Для этого придется поковыряться ещё.

Нужно установить следующие параметры в реестре:

 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters\size
Установите одно из значений ключа: 1, 2 или 3. 1 = Минимальное использование памяти 2 = Сбалансированное 3 = Максимальная пропускная способность для общих файлов и приложений, подключающихся по сети
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\MemoryManagement\LargeSystemCache
Для ключа доступны значения 0 и 1. 1 = Максимальная пропускная способность для использования файлов по сети, 0 = Максимальная пропускная способность для приложений, работающих по сети.

Таким образом, чтобы пользователи могли использовать общие файлы и подключаться к базе данных 1С без ограничений, выставляем на компьютере, который хотим использовать в качестве файлового сервера такие значения:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management]
"LargeSystemCache"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters]
"Size"=dword:00000003

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

УПП 1.3 Украины документ Принятие к учету ОС не делает бухгалтерских проводок

В УПП 1.2 и 1.3 это так. В других конфигурациях не пробовал вести ОС, не знаю. Если документ «Принятие к учету ОС» не сделал ожидаемых бух проводок, то скорее всего и в поступлении товаров услуг не провелись некоторые регистры, например, «Партии товаров на складах (упр. учет)». Это связано с настройкой учетной политики. Перейдите в «Сервис -> Настройка Учета  -> Настройка параметров учета  -> Режим учета затрат, и установате переключатель «Использовать партионный учет», а так же обязательно установате флажки «В управленческом учете», «В регламентированном учете». Это дает большую нагрузку на систему при проведении документов, чем без установленных флажков. Иначе проводки по партиям делаются какой то обработкой, в конце учетного периода, не помню как она называется, врать не буду, смотреть лень. Если кто знает напишите в комментариях.

Более наглядно процесс настройки показан на картинке.