Использование подсистемы "Управление доступом" из состава БСП версии 2.2+




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2026-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

83 Comments

  1. AlX0id

    Спасибо за труд — будет очень кстати 🙂

    Reply ↓
  2. Yashazz

    Знаю, как тяжело раскопать это всё в БСП, поэтому очень плюсую и респектую!

    Reply ↓
  3. vandalsvq

    Помню как в свое время копал БСП-шную систему RLS, внимательно читал их шаблоны. Понравилось, хороший труд у них получился. Единственное что не нравится, что управление в основном через администратора, хотя можно и допилить (впрочем ты об этом написал).

    (0) можно еще описать параметры RLS. В шаблонах конечно описание норм, но блин, пока до конца поймешь :))))

    Однозначный плюс.

    Reply ↓
  4. AlX0id

    ЗЫ. Очень надеюсь, что в очередной версии БСП все не перевернут с ног на голову..

    Reply ↓
  5. Поручик

    (0) Очень хорошо. В начале осени занимался доводкой нашей конфигурации в части прав доступа. До всего дощупывался сам.

    Reply ↓
  6. Поручик

    (0) Забыли про процедуру ПриЗаполненииВидовОграниченийПравОбъектовМетаданных в модуле УправлениеДоступомПереопределяемый

    Процедура ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание) Экспорт
    
    // +Наша вставка
    //
    Описание = Описание + »
    |Справочник.ФизическиеЛица.Чтение.ГруппыФизическихЛиц
    |Справочник.ФизическиеЛица.Изменение.ГруппыФизическихЛиц
    |»;
    // +Наша вставка
    
    КонецПроцедуры

    Показать

    Reply ↓
  7. Bassgood

    (6) Поручик, спасибо за подсказку, внес в публикацию необходимые исправления.

    Reply ↓
  8. Поручик

    (7) Строка

         |Справочник.Контрагенты.Добавление.ГруппыКонтрагентов

    лишняя. Смотрите типовые конфигурации и описание к процедуре.

    Reply ↓
  9. Stim213

    я бы не трогал типовой модуль. Отдельная подписка, отдельный модуль — и меньше проблем при последующих обновлениях

    Reply ↓
  10. Bassgood

    (8) Поручик, Исправил, еще раз спасибо за внимательность! =)

    Reply ↓
  11. Bassgood

    (9) Stim213, модуль «УправлениеДоступомПереопределяемый» все равно придется трогать, а вот подписку, да, вместо типовой можно создать свою, она обращается к модулю «УправлениеДоступомСлужебный» (в этот модуль мы и не вносили изменений). Учел ваше замечание.

    Reply ↓
  12. Поручик

    (9) Модули с суффиксом Переопределяемый предусмотрены для того, чтобы их трогали в определённых местах. Этакая пародия на абстрактные методы эмуляция абстрактных методов классов в 1С Предприятии.

    Reply ↓
  13. plus1s_a

    Спасибо.

    Reply ↓
  14. glassman

    Не так давно все это раскапывать пришлось самому. Была мысль подобный пост написать 🙂 Вы меня опередили и описали все очень даже сжато и хорошо!

    Reply ↓
  15. Поручик

    (14) У меня тоже было намерение, но не хватало времени и писательских способностей, поэтому забил.

    Reply ↓
  16. aleksey.kubovtsov

    спасибо за статью. будет полезна

    Reply ↓
  17. V_V_V

    А сколько еще всего осталось за кадром… Но спасибо за проделанную работу.

    Reply ↓
  18. alina0587

    Было бы здорово, если бы расписали, как пользоваться другими БСП-шными шаблонами, не только #ПоЗначениям))

    Reply ↓
  19. Bassgood

    (18) alina0587, это уже совсем другая история =) В этой статье в общем то не описываются возможности использования БСП-шных шаблонов, в ней описано использование БСП-шной подсистемы, в которой применяются эти шаблоны (сами шаблоны независимо от подсистемы применять не получится), использование части возможностей одного из шаблонов, я думаю, из статьи понятно, но описание всех возможностей этих шаблонов — это уже отдельная статья.

    Reply ↓
  20. Поручик

    (11)

    >>> г. Подписка на событие «ОбновитьГруппыЗначенийДоступа» (вместо этого можно также создать свою собственную подписку).

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

    Reply ↓
  21. Поручик

    (11)

    >>> г. Подписка на событие «ОбновитьГруппыЗначенийДоступа» (вместо этого можно также создать свою собственную подписку).

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

    Reply ↓
  22. Bassgood

    (20) Поручик, а как такое может быть, если штатная и наша собственная подписки вызывают одну и ту же процедуру по одному и тому же событию «Перед записью» элемента справочника (конечно, как вариант, в какой-нибудь процедуре штатной подписки идет обращение к ее метаданным и уже на основании состава ее источников выполняется обновление)? Причину ошибки обновления получилось выяснить? Если ошибка точно из-за собственной подписки — то уберу из статьи касающейся этой проблемы текст.

    p.s. Я сам не пробовал делать это с собственной подпиской, я изначально правил штатную подписку.

    Reply ↓
  23. Поручик

    (22) Ошибка из-за того, что в программе при обновлении используется именно штатная ОбновитьГруппыЗначенийДоступа. Свою подписку использовать можно, но до первого обновления.

    Reply ↓
  24. Поручик

    (22) Вот именно так — в модуле менеджера какой-то константы идет обращение к метаданным «ОбновитьГруппыЗначенийДоступа» и уже на основании состава ее источников выполняется обновление.

    Ну воссоздавать вчерашнюю ситуации лениво.

    Reply ↓
  25. Bassgood

    (24) Поручик, убрал из статьи касающийся этой проблемы текст, еще раз спасибо за корректировку публикации! =)

    Reply ↓
  26. ASZub

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

    Reply ↓
  27. Bassgood

    (26) ASZub, честно говоря, не видя картины в живую, сложно что-то сказать что сделано не так, могу лишь посоветовать попробовать еще раз пройтись внимательно по всем пунктам публикации и проверить у себя в конфигурации все ли эти пункты были выполнены.

    Как вариант — проверьте правильно ли заполнена процедура «ПриЗаполненииВидовДоступа».

    Reply ↓
  28. necropunk

    Да, статья помогла, спасибо. По документации БСП не очень просто разобраться, плюс в ней есть ошибки, что затрудняет разработку…

    Reply ↓
  29. kasper076

    На БСП 2.2.5.30 не получилось добиться результата..

    Reply ↓
  30. necropunk

    (29) kasper076, А что именно не получилось? Делал все по статье, со своими нюансами, изредка подглядывая в шаблоны ERP — все заработало.

    Reply ↓
  31. Поручик

    (29) Или руки не там вставлены, или в БСП 2.2.5 есть различия от предыдущей 2.2.4. Не думаю, чтобы отличия были большими.

    Reply ↓
  32. kasper076

    (30) necropunk, Создал новую конфу со справочником «Контрагенты», далее все делал по статье. Справочник «Профили пользователей» имеет несколько другой вид. В итоге пользователь вообще не видит справочник «Контрагенты».

    (31) Поручик, на счет рук спорить не буду. Возможно, что именно в них причина.

    Какой источник указать для Подписки «ЗаписатьНаборыЗначенийДоступа»?

    В демо-базе БСП 2.2.5.30 новые «ВидыДоступа» являются предопределенными элементами ПВХ ВидыДоступа.

    Reply ↓
  33. МимохожийОднако

    Есть какая-нибудь таблица соответствия версии БСП с последним релизом типовой конфигурации?

    Reply ↓
  34. Поручик

    (33) Какой именно типовой? Их целая куча типовых, открою тебе секрет. Только никому не говори.

    Reply ↓
  35. МимохожийОднако

    (34) Поручик, спасибо за секрет )) Например, УТ11, БП3, Розница, ЗУП3. В этих конфигурациях разные или одинаковые БСП?

    Reply ↓
  36. user_2010

    Разбираюсь с БСП. Вижу, что в моей конфигурации есть СтандартныеПодсистемы, нужная мне подсистема ПрисоединенныеФайлы — тоже есть.

    Как узнать — какая версия этих подсистем?

    Ведь для каждой версии по-своему настраивается работа…

    Reply ↓
  37. Поручик

    (36) СтандартныеПодсистемыСервер

    // Возвращает номер версии Библиотеки стандартных подсистем.

    //

    Функция ВерсияБиблиотеки() Экспорт

    Возврат «1.2.1.15»;

    КонецФункции

    Reply ↓
  38. Bassgood

    (36) user_2010, Версию БСП можно просмотреть в регистре сведений «Версии подсистем».

    Reply ↓
  39. user_2010

    (38) Спасибо! Все нашла!

    Reply ↓
  40. user_2010

    Еще вопрос: имеем нетиповую конфигурацию на 8.2. В ней есть некоторые подсистемы из БСП. Версия Стандартных подсистем 2.1.3.50.

    Подсистема «Присоединенные файлы» есть. Начинаю настраивать и вижу, что недостает РегистраСведений.ПрисоединенныеФайлы…? Т.е. внедрили подсистему «Присоединенные файлы» не полностью?

    На сайте обновлений такой версии БСП 2.1.3.50 нет (хотела посмотреть — может в этой версии еще не было РегистраСведений.ПрисоединенныеФайлы). На сайте обновлений есть 2.1.3.51, в ней этот регистр сведений есть.

    Значит мне нужно обновить нужные мне подсистемы БСП?

    Или просто добавить недостающие объекты?

    Можно ли обновлять сразу на самую последнюю версию? Или нужно последовательно ставить все обновления?

    Reply ↓
  41. Bassgood

    (40) user_2010, честно говоря от себя не могу что-то посоветовать, боюсь ошибиться, но я бы просто обновил БСП через сравнение/объединение с 2.1.3.51, т.к. она ближе всего к версии текущей вашей БСП, с последующей проверкой основных функций подсистемы «Присоединенные файлы».

    Reply ↓
  42. user_2010

    Понятно! Спасибо!

    Кажется поняла почему подсистема «Присоединенные файлы» загружена не полностью.

    В Регистре сведений «Версии подсистем» указаны:

    БиблиотекаЭлектронныхДокументов 1.1.17.6

    СтандартныеПодсистемы 2.1.3.50

    Почитала про БиблиотекаЭлектронныхДокументов — она содержит в себе функциональность «Присоединенные файлы»… может быть грузили именно ее, а присоединенные файлы попали прицепом… и болтаются там необновленные…

    Reply ↓
  43. user_2010

    Выяснилось, что это в типовой 1С.БухгалтерияПредприятия.2.0 — так странно загружены подсистемы БСП…

    Никто не пытался использовать БСП в 1С.Бухгалтерии.2.0?

    Reply ↓
  44. chirinna

    Отличная статья — сильно помогла! Может посоветует кто — у меня ограничение «все разрешены, кроме …» замечательно работают. А вот «все разрешены, кроме …» не отрабатывает — пустой справочник показывает. Причем можно создать элемент с разрешенной группой, и этот элемент виден в справочнике. Пока не понял, в чем дело…

    Reply ↓
  45. Jimkaaa

    Добрый день. БСП 2.2.5.33

    Пытаюсь реализовать доступ к документу _ДемоПоступлениеТоваров с ограничением по статусам.

    Создал Справочник ДоступПоСтатусам

    Добавил реквизит «СтатусДоступа» в документ _ДемоПоступлениеТоваров

    Дальше добавил в УправлениеДоступомПереопределяемый строки кода

    Процедура ПриЗаполненииВидовДоступа(ВидыДоступа) Экспорт
    
    // _Демо начало примера
    _ДемоСтандартныеПодсистемы.ПриЗаполненииВидовДоступа(ВидыДоступа);
    // _Демо конец примера
    
    
    ВидДоступа = ВидыДоступа.Добавить();
    ВидДоступа.Имя = «ДоступПоСтатусам»;
    ВидДоступа.Представление    = НСтр(«ru = ‘Доступ по статусам'»);
    ВидДоступа.ТипЗначений = Тип(«СправочникСсылка.ДоступПоСтатусам»);
    
    КонецПроцедуры
    
    
    Процедура ПриЗаполненииИспользованияВидаДоступа(ИмяВидаДоступа, Использование) Экспорт
    
    // _Демо начало примера
    _ДемоСтандартныеПодсистемы.ПриЗаполненииИспользованияВидаДоступа(ИмяВидаДоступа, Использование);
    // _Демо конец примера
    
    Если ИмяВидаДоступа = «ДоступПоСтатусам» Тогда
    Использование = Истина;
    КонецЕсли;
    
    КонецПроцедуры
    
    Процедура ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание) Экспорт
    
    // _Демо начало примера
    _ДемоСтандартныеПодсистемы.ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание);
    // _Демо конец примера
    
    Описание = Описание + »
    |Документ._ДемоПоступлениеТоваров.Чтение.СтатусДоступа
    |Документ._ДемоПоступлениеТоваров.Изменение.СтатусДоступа
    |»;
    
    КонецПроцедуры
    

    Показать

    При запуске обработки ИнструментыРазработчикаОбновлениеВспомогательныхДанных выдаёт ошибку:


    {Константа.ПараметрыОграниченияДоступа.МодульМенеджераЗначения(461)}: Ошибка в процедуре ЗаполнитьСвойстваВидаДоступа

    общего модуля УправлениеДоступомПереопределяемый.

    Тип значений доступа «Доступ по статусам» вида доступа «ДоступПоСтатусам»

    не указан в определяемом типе «Значение доступа».

    ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(

    Подскажите пожалуйста, что не так делаю?

    Reply ↓
  46. Jimkaaa

    Всё разобрался. Забыл добавить в Определяемые типы — ЗначенияДоступа справочник СтатусыДоступа.

    Reply ↓
  47. buy_sale

    (29) kasper076, +1

    Не работает на 3.0.40.38 БСП 2.2.5.35

    Не выводит список контрагентов вообще, все сделано по инструкции. Проверено,что все сделано по инструкции еще 5 раз.

    Reply ↓
  48. Bassgood

    (47) buy_sale, возможно, что в БСП 2.2.5 присутствуют какие-нибудь не глобальные изменения по отношению к предыдущим версиям библиотеки, значит нужно копать глубже.

    Reply ↓
  49. утюгчеловек

    БСП 2.3.1.79

    Инфа из статьи (из ИТС, кстати, тоже) не помогла. Мой справочник для целевого пользователя оказался пуст. Одолжите выпрямитель рук:

    1. Включил подсистему в конфу сравнением/объединением

    2. Планируется использовать шаблон «ПоЗначениям». Добавил вид доступа, писал необходимые процедуры:

    Процедура ПриЗаполненииВидовДоступа(ВидыДоступа) Экспорт
    
    // +
    ВидДоступа = ВидыДоступа.Добавить();
    ВидДоступа.Имя = «ГруппыДоступаПодразделений»; // имя вида доступа (используется в ролях для RLS)
    ВидДоступа.Представление    = НСтр(«ru = ‘Группы доступа подразделений'»);
    ВидДоступа.ТипЗначений      = Тип(«СправочникСсылка.Подразделения»); // критерий ограничения доступа
    ВидДоступа.ТипГруппЗначений = Тип(«СправочникСсылка.ГруппыДоступаПодразделений»); // средство ограничения доступа
    // —
    
    КонецПроцедуры
    
    Процедура ПриЗаполненииИспользованияВидаДоступа(ВидДоступа, Использование) Экспорт
    
    // +
    Если ВидДоступа = «ГруппыДоступаПодразделений» Тогда
    Использование = Истина;
    КонецЕсли;
    // —
    
    КонецПроцедуры
    
    Процедура ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание) Экспорт
    
    // +
    // указание прав объектов метаданных, на которые распространяется RLS
    Описание = Описание + »
    |Справочник.Подразделения.Чтение.ГруппыДоступаПодразделений
    |Справочник.Подразделения.Изменение.ГруппыДоступаПодразделений
    |»;
    // —
    
    КонецПроцедуры
    

    Показать

    3. Включил шаблон для Роли ЧтениеПодразделений на право Чтение: #ПоЗначениям(«Справочник.Подразделения», «», «», «ГруппыДоступаПодразделений», «ГруппаДоступа», «», «», «»,»»,»»,»»,»»,»»,»»,»»,»»,»»,»»,»»,»»,»»,»»,»»,»»,»»,»»,»»,»»,»»,»»,»»,»»,»»,»»,»»).

    Реквизит справочника Подразделения типа СправочникСсылка.ГруппыДоступаПодразделений называется «ГруппаДоступа»

    4. Запустил базу с параметром /C ЗапуститьОбновлениеИнформационнойБазы

    5. Добавил пользователя в группу ОбычныйПользователь. Группа связана с профилем ОсновнойПрофильПользователя, для которого установлен вид доступа. В группе ОбычныйПользователь назначил резрешенные подразделения.

    Админ всё видит. Пользователь не видит. ЧЯНТД?

    Вчитываюсь в текст шаблона. Сравниваю с текстом запроса, полученным из ТЖ… Пока не разобрался.

    Reply ↓
  50. утюгчеловек

    (49) Покурил демобазу БСП. Обнаружил нюансы, о которых не прочитал в статье:

    1. Проблема вылечилась изменением параметров в шаблоне доступа:

    БЫЛО: #ПоЗначениям(«Справочник.Подразделения», «», «», «ГруппыДоступаПодразделений», «ГруппаДоступа«…

    СТАЛО: #ПоЗначениям(«Справочник.Подразделения», «», «», «ГруппыДоступаПодразделений», «Ссылка«…

    2. В демобазе в модуле объекта справочника, группирующего ограничения, тоже установлен реквизит. В моем случае для справочника ГруппыДоступаПодразделений я добавил реквизит ГруппаДоступа типа СправочникСсылка.ГруппыДоступаПодразделений. И поставил RLS с шаблоном:

    #ПоЗначениям(«Справочник.ГруппыДоступаПодразделений«, «», «», «ГруппыДоступаПодразделений», «Ссылка«..

    3. В демобазе на справочник групп доступа навешивается обработчик ПередЗаписью. Где автоматически заполняется реквизит ГруппаДоступа.

    Возможно я не докурил подсистему, и ляпнул что-то лишнего. Но с учетом всего вышесказанного у меня справочник заработал.

    Буду разбираться с другими шаблонами.

    Reply ↓
  51. dkxtitan

    Очень полезная статья, спасибо!

    От себя хочу добавить, что в инструкцию можно добавить ещё один пункт:

    В константу «ПараметрыОграниченияДоступа» в процедуру «ЗаполнитьЗначенияДоступаСГруппами» нужно добавить:

    Если Свойства.Имя = «ГруппыКонтрагентов» Тогда
    ДобавитьВМассив(Свойства.ТипыВыбираемыхЗначений, Тип(«СправочникСсылка.Контрагенты»));
    ДобавитьВМассив(Свойства.ТипыВыбираемыхЗначений, Тип(«СправочникСсылка.ГруппыДоступаКонтрагентов»));
    Возврат;
    КонецЕсли;

    Если что — я не программист и даже не знаю что этот код означает, но без него не проходило обновление базы.

    Reply ↓
  52. portfleet

    51. dkxtitan

    Спасибо! После этой врезки обновление прошло

    Reply ↓
  53. vlan76

    Люди Добрые помогите

    Пытаюсь по тексту статьи сделать ограничение доступа по складам.

    1.Создал справочник ГруппыДоступаСклады

    2. В справочнике Склады добавил реквизит ГруппаДоступаПоСкладу

    3. Для подписки на событие «ОбновитьГруппыЗначенийДоступа» в качестве источника также указал справочник «Склады».

    4. В общий модуль «УправлениеДоступомПереопределяемый» и вставил в три его процедуры фрагменты кода, приведенные ниже.

    ВидДоступа = ВидыДоступа.Добавить();
    ВидДоступа.Имя = «ГруппыДоступаСклады»; // имя вида доступа (используется в ролях для RLS)
    ВидДоступа.Представление    = НСтр(«ru = ‘Группы Доступа Склады'»);
    ВидДоступа.ТипЗначений      = Тип(«СправочникСсылка.Склады»); // критерий ограничения доступа
    ВидДоступа.ТипГруппЗначений = Тип(«СправочникСсылка.ГруппыДоступаСклады»); // средство ограничения доступа
    //Константы.ИспользоватьГруппыДоступаСклады=»Истина»;
    //Сообщить(«33333″,СтатусСообщения.БезСтатуса);
    // -Наша вставка
    Для каждого ВидДоступа Из ВидыДоступа Цикл
    Сообщить(ВидДоступа,СтатусСообщения.БезСтатуса);
    
    ИначеЕсли ВидДоступа=»ГруппыДоступаСклады» Тогда
    Сообщить(видДоступа,СтатусСообщения.БезСтатуса);
    Использование = Истина;
    иначе
    Сообщить(«цццц»,СтатусСообщения.БезСтатуса);
    КонецЕсли;
    
    
    Описание = Описание + »
    |Справочник.Склады.Чтение.ГруппыДоступаПоСкладу
    |Справочник.Склады.Изменение.ГруппыДоступаПоСкладу
    |»;

    Показать

    После всего этого захожу в 1с УТ11.1 В настройки пользователей и ролей в ограничения данные о Группе доступа склады не добавляются

    Подскажите где ошибаюсь

    Reply ↓
  54. UsachevDima

    Протестил этот метод в конф. БГУ2 — все норм, все работает. Спасибо!

    Подскажите плиз кто знает как сделать ограничение к справочнику, к примеру по значениям самого справочника?

    Т.е. не привязывать элементы справочника к группам доступа а в настройках групп сразу указывать в качестве значения ограничения — элементы справочника (указать в настройках доступа конкретных контрагентов).

    Reply ↓
  55. ostapchenko.alexandr

    Подскажите, пожалуйста, зачем нужна фунция

    ПриЗаполненииВидовОграниченийПравОбъектовМетаданных

    ?

    Я вроде пустой её оставил, и ограничение прав работает как надо.

    Reply ↓
  56. Vass429

    Здравствуйте, есть вопросик. Все сделал, как у Вас. Все заработало. Делал для справочника «Номенклатура», в нем реквизит «ГруппаДоступа», а вид доступа называется «ГруппыНоменклатуры». В справочнике номенклатура все верно ограничивается. Хотел бы ещё это применить для связанного справочника «ХарактеристикиНоменклатуры». У характеристики, соответственно, номенклатура в поле владелец. У Вас написано,что необходимо в процедуре добавить:

    // +Наша вставка
    // указание прав объектов метаданных, на которые распространяется RLS
    Описание = Описание + »
    |Справочник.Номенклатура.Чтение.ГруппыНоменклатуры
    |Справочник.Номенклатура.Добавление.ГруппыНоменклатуры
    |Справочник.Номенклатура.Изменение.ГруппыНоменклатуры
    |Справочник.ХарактеристикиНоменклатуры.Владелец.Чтение.ГруппыНоменклатуры            — это добавил
    |Справочник.ХарактеристикиНоменклатуры.Владелец.Добавление.ГруппыНоменклатуры   — это добавил
    |Справочник.ХарактеристикиНоменклатуры.Владелец.Изменение.ГруппыНоменклатуры     — это добавил
    |»;
    // -Наша вставка

    Показать

    Но в списке справочника «ХарактеристикиНоменклатуры» остались записи с владельцем «Объект не найден». Ограничение не сработало, что ещё необходимо добавить?

    Reply ↓
  57. Bassgood

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

    Возможно Вы забыли добавить в имеющиеся роли, которые предоставляют право на чтение справочника характеристик, ваш шаблон RLS вида: #ПоЗначениям(«Справочник.ХарактеристикиНоменклатуры», «Чтение», «ГруппыНоменклатуры», «Владелец»)

    Reply ↓
  58. Vass429

    (57) Добавил, у меня получился пустой список «Характеристик». А тут я правильно добавил:

    // +Наша вставка
    // указание прав объектов метаданных, на которые распространяется RLS
    Описание = Описание + »
    |Справочник.Номенклатура.Чтение.ГруппыНоменклатуры
    |Справочник.Номенклатура.Добавление.ГруппыНоменклатуры
    |Справочник.Номенклатура.Изменение.ГруппыНоменклатуры
    |Справочник.ХарактеристикиНоменклатуры.Владелец.Чтение.ГруппыНоменклатуры
    |Справочник.ХарактеристикиНоменклатуры.Владелец.Добавление.ГруппыНоменклатуры
    |Справочник.ХарактеристикиНоменклатуры.Владелец.Изменение.ГруппыНоменклатуры
    |»;
    // -Наша вставка

    Показать

    Reply ↓
  59. Bassgood

    (58) Что-то мне подсказывает, что вместо

    Справочник.ХарактеристикиНоменклатуры.Владелец.Чтение.ГруппыНоменклатуры

    следует указать

    Справочник.ХарактеристикиНоменклатуры.Чтение.ГруппыНоменклатуры

    т.е. данный запрос указывает подсистеме, что:

    1. «Справочник.ХарактеристикиНоменклатуры» — в этом справочнике

    2. «Чтение» — следует ограничить доступ на чтение

    3. «ГруппыНоменклатуры» — при помощи этого вида доступа

    Реквизит же (в данном случае «Владелец»), по которому уже следует ограничить доступ к объекту, указывается в шаблоне RLS — #ПоЗначениям(«Справочник.ХарактеристикиНоменклатуры», «Чтение», «ГруппыНоменклатуры», «Владелец«), т.е. в шаблоне фактически указана та же самая информация, что и в запросе, за исключением уточнения реквизита, по которому следует ограничить доступ к объекту.

    Попробуйте, уверен, все должно получиться!

    Reply ↓
  60. Vass429

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

     // +Наша вставка
    // указание прав объектов метаданных, на которые распространяется RLS
    Описание = Описание + »
    |Справочник.Номенклатура.Чтение.ГруппыНоменклатуры
    |Справочник.Номенклатура.Добавление.ГруппыНоменклатуры
    |Справочник.Номенклатура.Изменение.ГруппыНоменклатуры
    |Справочник.ХарактеристикиНоменклатуры.Чтение.ГруппыНоменклатуры
    |Справочник.ХарактеристикиНоменклатуры.Добавление.ГруппыНоменклатуры
    |Справочник.ХарактеристикиНоменклатуры.Изменение.ГруппыНоменклатуры
    |»;
    // -Наша вставка

    Показать

    Это в ограничениях доступа к данным в роли для справочника ХарактеристикиНоменклатуры:

    #ПоЗначениям(«Справочник.ХарактеристикиНоменклатуры», «Чтение», «»,
    «ГруппыНоменклатуры», «Владелец»,
    «»,»»,»»,»»,»»,»»,»»,»»,»»,»»,»»,»»,»»,»»,»»,»»,»»,
    «»,»»,»»,»»,»»,»»,»»,»»,»»,»»,»»,»»,»»)
    Reply ↓
  61. Bassgood

    (60) Обратите внимание еще на пункты 5 и 6, возможно справочник характеристик следует включить в состав определяемого типа и в подписку на событие, и запустить конфигурацию в режиме обновления ИБ (пункт 9), попробуйте, других вариантов мне пока в голову больше не приходит.

    Reply ↓
  62. Vass429

    (61) Реализовал пункты 5 и 6, произвел обновление, но все равно список остался пустым. Возникла ещё мысль по этому поводу. А в процедуру «ПриЗаполненииВидовДоступа» не нужно добавлять характеристики?

    Reply ↓
  63. Bassgood

    (62) По идее нет, но чем черт не шутит, поэкспериментировать не навредит 😉

    Reply ↓
  64. Vass429

    (63) Последнюю вещь даже не стал пробовать, которую сам предложил, какая то всё-таки она не логичная… Вернул всё как было, что отображались в итоге и элементы справочника характеристик с «объект не найден». Можно будет просто у пользователя отбор настроить… А в общем спасибо за статью, рабочая, можно пользоваться!!!

    Reply ↓
  65. sergik_nsk

    Не очень понял зачем

    Для подписки на событие «ОбновитьГруппыЗначенийДоступа» в качестве источника также указать справочник «Контрагенты».

    источником для данной подписки является только ОпределяемыйТип.ЗначениеДоступаСГруппамиЗначенийДоступаОбъект

    а для него соответствует только одно значение

    СправочникОбъект.ИдентификаторыОбъектовМетаданных

    у меня версия 2.4.3.61, нет 2.2 что бы сравнить, разбираюсь сам, еще в процессе, вот наткнулся на статью, теперь вопросы

    Reply ↓
  66. Bassgood

    (65) Возможно в БСП 2.4 принцип настройки механизма немного изменился (надеюсь, не кардинально) и включать интересующий справочник в определяемый тип требуется (хотя я сомневаюсь что это так), в версии 2.2, на сколько помню, такого определяемого типа не было. Я бы на вашем месте с этим вопросом просто поэкспериментировал — сначала как есть, если желаемого результата не будет, то включить справочник в определяемый тип.

    Reply ↓
  67. Team leader

    Пункт 9. Запустить конфигурацию в режиме «Предприятия» с параметром запуска «ЗапуститьОбновлениеИнформационнойБазы»:

    — Если вам потребовалось обновить идентификаторы объектов метаданных в 1С, то сапое простое это запустить базу с ключом:

    /c ЗапуститьОбновлениеИнформационнойБазы

    Reply ↓
  68. Bassgood

    (67) Это дополнение к п.9 или замечание к нему? 🙂

    Reply ↓
  69. Team leader

    дополнение) потратил время на поиск данного нюанса, если включюте в публикацию будет замечательно

    Reply ↓
  70. Bassgood

    (69) Это уже относится к использованию БСП в целом, а не к конкретной подсистеме, данный параметр запуска системы не только обновляет данные в справочнике идентификаторов объектов, но также инициирует запуск ряда других обработчиков, необходимых для полноценного обновления ИБ, поэтому я не стал в данной статье расшифровывать назначение данного параметра, а просто прописал это как инструкцию к выполнению.

    Reply ↓
  71. sergik_nsk

    Теперь вопрос на засыпку, что если необходимо ограничить доступ к справочнику не только по группам, но еще и по элементам, как реализовать такую возможность?

    На данный момент получилось сделать либо по элементам, либо по группам

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

    Думаю единственный способ ставить группу доступа как табличную часть и в ней настраивать две группы контрагентов списком — «регион север» и «клиент№15». Или есть какой то более продвинутый способ.

    Reply ↓
  72. wkr

    Спасибо, очень помогло для понимания 🙂

    Reply ↓
  73. pavel_pss

    Спасибо, за статью. Очень помогла.

    Дополнение от меня.

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

    У меня ограничение выглядит вот так:

    #ПоЗначениям(«Документ.уатСливГСМ», «чтение», «», «Организации», «Организация», «Подразделения», «Подразделение», «»,»», «»,»», «»,»», «»,»», «»,»», «»,»», «»,»», «»,»», «»,»», «»,»», «»,»», «»,»», «»,»», «»,»»)

    Иначе, если укажите только в одной роли а в другой не укажите, то документ НЕ скроется, а скроются только подразделение — будет написано что объект не найден. см. картинку.

    Reply ↓
  74. Bassgood

    (73) Да, верно, так и есть, именно так и работает платформенный механизм ограничения прав на уровне записей таблиц (RLS) и настройка доступа через роли — если право предоставлено одной из ролей, то запреты других ролей игнорируются.

    Reply ↓
  75. pavel_pss

    (74) я думаю тебе стоит это указать в статье, т.к. я это не сразу сообразил, уже хотел здоровый комент писать.

    Reply ↓
  76. bsbbur

    Большое спасибо, очень полезная инфо!

    Благодаря этой публикации, когда-то, легко применил новые требуемые виды доступа в УНФ 1.6.7.43. На днях апнул её до актуальной на сегодня 1.6.13.48, БСП в ней 2.4.4.124 — по прежнему всё прекрасно робит!

    (шаблоны, правда, поменялись с тех пор — пришлось переписать свои ограничения)

    Reply ↓
  77. feel063

    Скажите пожаааалуйста..а если задача состоит в том, чтобы привязать к одному партнеру НЕСКОЛЬКО групп доступа партнеров, а не одну. Как быть? Создаю табличную часть в справочнике Партнеры: ГруппыДоступа, в которой есть реквизит «ГруппаДоступа» с типом «СправочникСсылка.ГруппыДоступаПартнеров». Как в этом случае построить ограничение доступа?

    Reply ↓
  78. karapuzzzz

    (77)Все так же. Только необходимо ещё добавить в определяемый тип ЗначениеДоступаСГруппамиЗначенийДоступаОбъект справочник Партнеры. А в процедуре «ПриЗаполненииВидовДоступа» модуля «УправлениеДоступомПереопределяемый» добавить строку ВидДоступа.НесколькоГруппЗначений = Истина;

    Reply ↓
  79. KAV2

    (6) А как бы понять на что влияет эта процедура? Чего мы лишимся если здесь ничего не указать? Ведь шаблоны RLS все равно сработают если они заданы в роли?

    Reply ↓
  80. FesenkoA

    Искал по РЛС что то так долго, в итоге сам разобрался и сделал статью, а тут вашу нашел, и тут именно то же самое))) от блин, аж стыдно теперь)))

    Reply ↓
  81. Mx00

    А может кто пробовал без изменения конфигурации, а только используя Расширение?

    Reply ↓
  82. Shecurok

    (74) Извиняюсь, что обращаюсь, но может подскажите.

    Тут суть такая: делал всё строго по инструкции, вид доступа добавился.

    Создал нового пользователя с минимальным кол-ом ролей.

    Все роли проверил, но суть в том, что отбор не происходит.

    Получается я создал новый справочник с ссылкой на другой справочник. В нём (новом спр.) создал (в режиме предприятия уже) запись с владельцем из типового справочника.

    Роли все проверял — везде всё ограничено, но вполне возможно, как то не верно настроил ограничения.

    Какие варианты могут быть?

    Reply ↓
  83. Shecurok

    (74)в частности меня интересует данный пункт:

    После завершения обновления ИБ в программе необходимо проделать следующие действия:

    Заполнить только что добавленный в систему справочник «Группы доступа контрагентов».

    У элементов справочника «Контрагенты» заполнить необходимым образом реквизит «Группа доступа».

    Как данный реквизит необходимо заполнить?

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *