1с как запретить изменять отбор
Блин ну чо за фигня, есть рыд пользователям которым разрешено видеть только то что нужно. поэтому стоят отборыи запрещено их менять доступность. НО отключить отбор можно по контексному меню.
где <> - табличное поле, где выводятся строки по фильтру Пример (документ ЗаявкаНаРасходованиеСредств):
рлс не позволяет документы в списках отключать видимость. а толку от того что не будет видно контрагента. доки все равно видны, суммы и прочее.
угу сейчас гляну. главное чтобы по контексному меню не отключалось. Доступность у меня тоже стоит Ложь однако когда нажать отключить отбор то доступности игнорируются
Через РЛС можно запретить видеть документы по каким-либо реквизитам, например Хотя лично я РЛС не люблю
РАЗРЕШЕННЫЕ "спасет отца русской демократии" © В конфигураторе, для начала определив по каким признакам ограничить доступ.
в рознице у на свообще никаких отчетов нет. их задача тупо доки делать. чеки, перемещения между собой, заявки , поступления. никаких отчетов.
А дальше прописываешь для каждой роли и каждого объекта ограничения в соответствие с этими признаками.
где одним РЛС можно все эти признаки ввести? хаха, я про это и говорил. туфта этот рлс. каждый объект щелкать.
а что будет есл ивыкрутят без регистратора? все также итоги получат. регистратор то еще фигня. Тогда надо и на регистры ставить условия. А это целый комплекс. Да и на все настройки нужно заводить специальный справочник более гибкий чем основные значения пользователей.
Если пользователь не должен видеть документ, то и движения по нему не нужны. А если это не так, значит система ограничения прав непродумана. А кто говорил, что RLS одним движением мизинца левой ноги делается? Нормально настроить это труд еще тот.
А больше чемго не нравится что это надо в конфигураторе делать. А вообще есть такая возможность в РЛС простоу универсальную процедуру везде поставить, а сами настройки например сделать справочник, в котором можно будет все это разрулить просто в режиме программы.
в типовых есть стандартные правила по контрагентам и организациям. в программе есть регистр сведений настройки прав доступа. В РЛС написаны запросы которые по настройкам делают ограничения. Я бы хотел чтобы в РЛС была универсальная какая нибуть процедура, а все настройки без изменения конфигуратора в дальнейшем можно было настраивать в режиме программы. Делал ктонибудь такое?
ну я понимаю что шаблоны. только все признаки ограничений нужно где то описать. а это привязка к конкретным данным.
+ да это нормально. в ораклах тоже тоб данные какие-то ограничить в каждую вьюху процедуру ограничения вставляли. ну в 1С шаблоны для этого.
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C: Enterprise Development Tools 50
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем 1С Предприятие что это? 12
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » - конкретный продукт, который выпускает компания 1С . Что такое COM-подключение к базе 7.7 из 8.2 1С 6
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D: ВашаБаза 1с77 " ; Пользователь= Посмотреть все результаты поиска похожих
Еще в этой же категории
Как в форме списка реализовать сортировку по своему реквизиту? 12
Если реквизит примитивного типа, то достаточно установить для свойства реквизита «Индексировать» значение «Индексировать» или «Индексировать с доп. упорядочиванием» (не доступно для реквизитов типа ХранилищеЗначения). Если же реквизит ссылочного типа Сортировка списка по произвольной колонке? 7
В процедуру ПриОткрытии или в конец модуля добавить: ЭлементыФормы.РегистрСведенийСписок.НастройкаПорядка.НомерСоглашения.Доступность=Истина; Где НомерСоглашения - Колонка в списке регистра сведений по которой нужно сортировать! Далее щелкнув Оформление строки в ПриПолученииДанных или ПриВыводеСтроки 7
Событие ПриПолученииДанных использется для оформления ячеек строк данных, отображаемых табличным полем. Обработчик данного события вызывается табличным полем в тех же случаях, что и обработчик ПриВыводеСтроки , т.е. при обновлении данных, отображ Табличное поле ~ Как получить строки табличного поля, отобранные отбором? 4
ОтборСтрок = ТабличнаяЧастьИсточник.ОтборСтрок ; ПостроительЗапроса = Новый ПостроительЗапроса; ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличнаяЧастьИсточник); // Добавляются необходимые отборы, такие же как в отбор Отбор по списку значений 3
СозданныйСписок = Новый СписокЗначений; СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.Выполнено); СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.ЗакрытиеЗаявки); СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.ОтклоненаРукОтдЗакупок); Посмотреть все в категории Список Справочника, Документов, Регистров
ZIP-архив Чтение 0
Для того чтобы прочитать файлы из ZIP-архива необходимо выполнить несколько простых действий: - Открыть необходимый архив - Распаковать файлы Создание объекта ЧтениеZIPФайла можно осуществить двумя путями - создать инициализированный объект или Внешние источники данных 0
Почему данная возможность вызывает такой интерес? Любой человек, который программировал в 1С при этом достаточно неплохо знаком с SQL и хотя бы в общих чертах знаком с архитектурой и принципами разработки других технологических платформ для бизнес пр Восстановление узла распределенной информационной базы из резервной копии 0
В случае возникновения ситуации, при которой необходимо восстановить резервную копию информационной базы, работающую в рамках распределенной информационной базы, можно воспользоваться следующими рекомендациями. Процедура восстановления информационно Временные таблицы, что из себя представляют и как с ними работать? 7
Временные таблицы - хранятся на сервере и позволяют писать более простые запросы. Временные таблицы хранятся в объекте типа МенеджерВременныхТаблиц . Когда этот объект уничтожается, уничтожаются и временные таблицы. Чтобы создать временную таблицу Вывод Диаграммы График Валют, Сохранение диаграммы, графиков и гистограмм в виде Картинки 0
Алгоритм обработки выполняет запрос к регистру сведений " курсы валют" за определенный пользователем период. Полученные данные выборки в цикле выводятся в элемент экранной формы " диаграмма" в режиме построения графика. Для элемента управления " Ди Посмотреть все результаты поиска похожих
Еще в этой же категории
Как в форме списка реализовать сортировку по своему реквизиту? 12
Если реквизит примитивного типа, то достаточно установить для свойства реквизита «Индексировать» значение «Индексировать» или «Индексировать с доп. упорядочиванием» (не доступно для реквизитов типа ХранилищеЗначения). Если же реквизит ссылочного типа Сортировка списка по произвольной колонке? 7
В процедуру ПриОткрытии или в конец модуля добавить: ЭлементыФормы.РегистрСведенийСписок.НастройкаПорядка.НомерСоглашения.Доступность=Истина; Где НомерСоглашения - Колонка в списке регистра сведений по которой нужно сортировать! Далее щелкнув Оформление строки в ПриПолученииДанных или ПриВыводеСтроки 7
Событие ПриПолученииДанных использется для оформления ячеек строк данных, отображаемых табличным полем. Обработчик данного события вызывается табличным полем в тех же случаях, что и обработчик ПриВыводеСтроки , т.е. при обновлении данных, отображ Табличное поле ~ Как получить строки табличного поля, отобранные отбором? 4
ОтборСтрок = ТабличнаяЧастьИсточник.ОтборСтрок ; ПостроительЗапроса = Новый ПостроительЗапроса; ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличнаяЧастьИсточник); // Добавляются необходимые отборы, такие же как в отбор Отбор по списку значений 3
СозданныйСписок = Новый СписокЗначений; СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.Выполнено); СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.ЗакрытиеЗаявки); СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.ОтклоненаРукОтдЗакупок); Посмотреть все в категории Список Справочника, Документов, Регистров
Динамические списки - это один из базовых объектов для разработок на базе 1С.
Однако, долгое время разработчики не имели возможность запрещать пользователям делать отборы по конкретным полям и их реквизитам. Такое бывает необходимо, чтобы не дать возможность "положить" списки со сложными запросами или с большим количеством данных.
И вот с версии 8.3.10 в платформе появился метод УстановитьОграниченияИспользованияВОтборе()
Тип: Массив.
Пути к полям компоновки, на которые требуется установить ограничение.
Запрещает использование указанных полей и всех их дочерних полей в настройках отбора.
Поля, на которые установлено ограничение, не входят в коллекцию доступных полей.
После вызова метода список полей с ограничениями замещается указанным. Вызов метода с пустым списком полей отменяет ранее установленные ограничения.
Использование в версии:
Доступен, начиная с версии 8.3.10.
Здесь нас интересует этот пункт:
Запрещает использование указанных полей и всех их дочерних полей в настройках отбора.
Поля, на которые установлено ограничение, не входят в коллекцию доступных полей.
После вызова метода список полей с ограничениями замещается указанным. Вызов метода с пустым списком полей отменяет ранее установленные ограничения.
Это означает, что метод можно вызывать повторно, настраивая доступность полей в зависимости от каких-то событий. Но нужно понимать нюансы работы.
Обычно метод применяют в одном событии формы - ПриСозданииНаСервере(). Когда платформа ещё не приступила к непосредственному открытию формы и всячески к этому готовится. В такие моменты разработчик отбирает у пользователей возможность фильтрации по каким-то полям. А что если менять состав полей несколько раз?
Приведём такой пример. Есть динамический список с документами. Необходимо запретить пользователям делать фильтры по полям, если в шапке формы пустой параметр "Организация". Возьмём для нашего эксперимента форму журнала документов продажи из демо базы ERP 2.4:
Для этого добавим форму в расширение:
Подключимся к обработчику изменения организации:
И вставим такой простой код:
Обновим базу и откроем форму в режиме предприятия. Сразу видим, что в контекстном меню по полю "Подразделение" нет возможности поиска:
Расширенный поиск не позволяет выбирать подразделение:
Так же отбор недоступен и в форме настройки списка:
А теперь заполним организацию:
И появилась возможность фильтровать в расширенном поиске:
Ну и настройка динамического списка заработала:
А значит теперь мы можем наложить отбор на подразделение. Давайте так и сделаем.
Сейчас в списке доступны три строки с двумя подразделениями:
Установим отбор по подразделению "Дирекция" при помощи Ctrl+Alt+F
Всё хорошо. Но что будет, если мы сейчас очистим организацию в шапке формы, тем самым запретив отбирать по подразделению?
Странно, да? Отбор отключился. Но надпись осталась. Да, её не трудно закрыть крестиком вручную, но пользователю будет непонятно, почему показан отбор, который не работает.
Ну хорошо, допустим мы свыклись с тем, что надпись не обновляется и отключили её. Но что с отбором через "Настроить список" ?
Для начала снова выберем организацию в шапке формы и установим отбор по подразделению:
Хорошо, а теперь очистим организацию в шапке:
Мы установили ограничение на отбор, но существующий при этом не сбросился. А в настройке списка наш отбор помечен красным и более недоступен:
Как же так? Понять это поможет другая статья, в которой рассказывается принцип того, как СКД (на которой и базируются динамические списки) работает с ограничениями полей:
Ограничения полей, или как обмануть СКД?.
Прочитав её, станет понятно, что ограничения полей в отборах полноценно влияют только на пользовательскую доступность полей, но не на логику выборки данных. То есть, пользовательские настройки обходят ограничения полей.
Интересно, что решение, которое было предложено в статье, в данной ситуации не работает. Если использовать КомпоновщикНастроек.Восстановить(), то пользовательские отборы всё равно остаются на месте.
Попробуем же программно отключить использование отборов, если их полей нет в коллекции ДоступныеПоляОтбора.
Теперь когда пользователь очищает поле "Организация", то и наш "неправильный" отбор отключается.
Можно заметить, что при этом поле остаётся. И самое интересное, что если пользователь вручную нажмёт его использование, то и, несмотря на ограничения отборов, фильтрация применится:
Но что же делать? Придётся не отключать использование отбора, а просто удалять его.
Теперь при очистке организации, так же удаляются и "запрещенные" отборы:
Пользователь теперь не может наложить отбор, так как его нет в доступных полях для отбора. А старые отборы почистились автоматически.
Хорошо, мы разобрались с ограничениями отборов в динамическом списке. Но как обстоят дела с другими ограничениями? Добавим запреты на группировку и сортировку:
Открываем форму с пустой организацией и видим, что подразделения нет в доступных к группировке полей. Всё хорошо.
Теперь выберем организацию и добавим группировку:
Всё хорошо применилось:
А теперь очистим организацию. После очистки, наш код запрещает использование поля Подразделение в группировках.
И вот мы видим такую ошибку:
На группировку 1С поругалась. И форма теперь показывает пустой список:
То же самое и с ограничением по сортировке.
Выходит, что платформа позволяет блокировать такие действия. Но с отборами это не работает. Хорошо, что мы написали свой метод по обработке этого?
На первый взгляд, все эти проблемы возникнут только в тех случаях, если разработчик в рамках одного списка производит включение\отключение ограничений. Однако, это не совсем так.
Если изначально форма списка не содержала ограничения по отборам, то при внесении изменений, у пользователей могут остаться сохранённые настройки. Как и те, что подгружаются автоматически при открытии формы, так и те, что пользователь может подгрузить вручную по кнопке "Выбрать настройки".
И это так же нужно обрабатывать кодом. Иначе нет никакой уверенности, что ваши ограничения действительно заработали и пользователи не накладывают "запрещенные" отборы.
А напоследок, давайте вспомним один из хитрых методов обхода ограничений по отборам из статьи Ограничения полей, или как обмануть СКД? .
Он позволяет наложить нехитрый отбор для примитивных типов полей, поэтому немного изменим наш код и ограничим поле "Сумма". И оставим пока только ограничение отборов.
(В нашей обработке два поля "Сумма", поэтому, чтобы избежать путаницы, ограничим оба)
Для этого в форме с пустой организацией зайдём в "Настроить список". Как видим, поля суммы в отборах нет:
А теперь нажмём "Ещё" -> "Изменить форму"
И перенесем доступные к сортировке поля в группу с отборами:
Организация у нас пустая, но поле Сумма теперь доступно. И мы можем сделать своё грязное дело - перенести поле в отбор:
Фильтр применился. Несмотря на ограничения.
Да, этот способ обхода замудрён, но работает. И к сожалению, события по изменению отборов в 1С нет.
Есть простой способ предотвратить это. Если вы отключаете использование в отборах, то и запрещайте использовать в группировках и сортировках. Тогда неоткуда будет подтянуть поле с отбором.
Выводы:
Ограничения отборов в динамическом списке автоматически обрабатываются недостаточно, поэтому:
1. Дополнительно программно обходите настройки
а) при установки ограничений
б) при загрузке пользовательских настроек
2. Если запрещаете отборы, то запрещайте и группировку\сортировку.
3. Если планируете включать\отключать ограничения и у вас платформа меньше 8.3.16, то отключите отображения поля состояния просмотра, чтобы оно не вводило пользователя в заблуждение.
Понравилась статья?
Подайте знак автору =) Поставьте плюс, оставляйте комментарий и переходите к другим публикациям:
1C: Enterprise Development Tools 50
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем Cодержимое указанного ниже веб-сайта в этом приложении блокируется. Aboutsecurity_1cv8c.exe 1
Проблема: После обновления на 1С:Бухгалтерию предприятия 3-й версии, при нажатии на закладку командного интерфейса 1С:предприятие, выскакивает ошибка: Aboutsecurity_1cv8c.exe или Aboutsecurity_1cv8.exe «Содержимое указанного ниже веб-узла в э ZIP-архив Чтение 0
Для того чтобы прочитать файлы из ZIP-архива необходимо выполнить несколько простых действий: - Открыть необходимый архив - Распаковать файлы Создание объекта ЧтениеZIPФайла можно осуществить двумя путями - создать инициализированный объект или Внешние источники данных 0
Почему данная возможность вызывает такой интерес? Любой человек, который программировал в 1С при этом достаточно неплохо знаком с SQL и хотя бы в общих чертах знаком с архитектурой и принципами разработки других технологических платформ для бизнес пр Восстановление узла распределенной информационной базы из резервной копии 0
В случае возникновения ситуации, при которой необходимо восстановить резервную копию информационной базы, работающую в рамках распределенной информационной базы, можно воспользоваться следующими рекомендациями. Процедура восстановления информационно Посмотреть все результаты поиска похожих
Еще в этой же категории
Как в форме списка реализовать сортировку по своему реквизиту? 12
Если реквизит примитивного типа, то достаточно установить для свойства реквизита «Индексировать» значение «Индексировать» или «Индексировать с доп. упорядочиванием» (не доступно для реквизитов типа ХранилищеЗначения). Если же реквизит ссылочного типа Сортировка списка по произвольной колонке? 7
В процедуру ПриОткрытии или в конец модуля добавить: ЭлементыФормы.РегистрСведенийСписок.НастройкаПорядка.НомерСоглашения.Доступность=Истина; Где НомерСоглашения - Колонка в списке регистра сведений по которой нужно сортировать! Далее щелкнув Оформление строки в ПриПолученииДанных или ПриВыводеСтроки 7
Событие ПриПолученииДанных использется для оформления ячеек строк данных, отображаемых табличным полем. Обработчик данного события вызывается табличным полем в тех же случаях, что и обработчик ПриВыводеСтроки , т.е. при обновлении данных, отображ Табличное поле ~ Как получить строки табличного поля, отобранные отбором? 4
ОтборСтрок = ТабличнаяЧастьИсточник.ОтборСтрок ; ПостроительЗапроса = Новый ПостроительЗапроса; ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличнаяЧастьИсточник); // Добавляются необходимые отборы, такие же как в отбор Отбор по списку значений 3
СозданныйСписок = Новый СписокЗначений; СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.Выполнено); СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.ЗакрытиеЗаявки); СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.ОтклоненаРукОтдЗакупок); Посмотреть все в категории Список Справочника, Документов, Регистров
Читайте также: