gifts2017

Убрать тип цены "закупочная" в УТ

Опубликовал Андрей Бударный (WhiteShadow) в раздел Программирование - Практика программирования

Появилась задача: убрать всем кассирам и менеджерам возможность видеть тип цены "закупочная" при выборе товара в справочнике Номенклатура...
Попробовал найти готовое решение на просторах интернета, но безуспешно...
Поэтому пришлось ковыряться самому(правда не без помощи подсказок знающих людей).
Не судите строго в 8.1 программировать только учусь...

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

Выкладываю для тех, кто в программировании также как и я не силен, но надо...

Заходим в конфигураторе в Справочник Номенклатура ->ФормаСписка(тоже самое надо сделать будет и в ФормаВыбора)->процедура ПередОткрытием.

Ищем код:

// восстанавливаем выделенные элементы у СписокЦенОстатков
СписокПомеченныхЭлементовТиповЦен = ВосстановитьЗначение("Справочники.Номенклатура.ФормаСписка.СписокПомеченныхЭлементовТиповЦен");
УправлениеЗапасами.ОбновитьСписокТиповЦен(СписокЦенОстатков, СписокПомеченныхЭлементовТиповЦен);

Далее добавляем следующее:

Если НЕ РольДоступна("ПолныеПрава") Тогда
  СписокЦенОстатков.Удалить(СписокЦенОстатков.Индекс(СписокЦенОстатков.Найти("Закупочная", "Наименование")));
КонецЕсли;

 

Тоже самое проделываем для ФормаВыбора.

 

после этого у всех пользователей у которых нет роли "ПолныеПрава", Тип цены "закупочная" в выборе типов цен в справочнике Номенклатура пропадет.

 

P.S.: Это действие не закрывает получение закупочных цен через отчеты, поэтому для "умных пользователей"  необходимо дорабатывать еще и отчеты, в моем случае касиры работают только в интерфейсе кассира, да и уровень "делаем только то что показали"

P.S.2: Не забывайте перед любыми действиями с конфигурацией делать копию, поскольку ответственность за работоспособность базы лежит только на Вас.

Удачи в работе.

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Сергей Ожерельев (Поручик) 13.09.11 12:27
(0) Использовать RLS не предлагать?
2. Андрей Бударный (WhiteShadow) 13.09.11 12:51
Я пока еще учусь, и насколько хватает моего понимания, - там надо будет править все роли кроме Полных прав?
находил решение на каком то форуме через RLS, - там надо вводить ограничение на чтение в ролях... проделал как все было описано ничего у меня не получилось... :( я понимаю что это из-за моего не знания, но все же через кодинг конфы получилось лучше, да и быстрее...
3. Дмитрий Атапин (dva1c) 14.09.11 07:00
Это решение имеет право на жизнь. Аналогичным способом я поступил в ЗиУП, для того, чтобы табельщик подразделения видел только свое подразделение.
(1) RLS надо курить, а это не быстро :D
WhiteShadow; +1 Ответить
4. alex_2k (alex_2k) 14.09.11 13:15
Вообще делается намного проще.
Открываешь роль которой надо запретить доступ к ценам.
открываешь регистр сведений ЦеныНоменклатуры, ставишь только одну галку "Чтение",
добавляешь запись в "Ограничения доступа к данным", поля слева не указываешь, в поле ограничение пишешь
ГДЕ ТипЦен.Код <> "00001" (укажи свой код элемента справочника, к которому закрыть доступ).
Собственно все. У меня все работает, человек с этой ролью не видит закупочных цен вообще нигде.
s_tagil@mail.ru; makaorel; legrey; IDija; krein; WhiteShadow; artemka; +7 Ответить 1
5. Азамат Масалимов (neuromancer_aza) 14.09.11 14:44
да, только вот оно будет действовать на обработку подбора номенклатуры? а так костыль нормуль ;)
6. Азамат Масалимов (neuromancer_aza) 14.09.11 15:41
есть вариант получше. Усли у вас УТ10
то можно в общих модулях УправлениеЗапасами.ЗаполнитьСписокТиповЦенДляПолученияОстатков
добавить в конце что-то типа того

	Если НЕ (РольДоступна("ПолныеПрава") или РольДоступна("МенеджерПоЗакупу") или РольДоступна ("СтаршийМенеджерПоПродажам") ) Тогда
		СписокЦенОстатков.Удалить(СписокЦенОстатков.Индекс(СписокЦенОстатков.Найти("Приобретение", "Наименование")));
	КонецЕсли;

...Показать Скрыть


тогда она будет действовать везде где оно используется
7. Михаил Кузнецов (hotey) 14.09.11 18:32
Решал недавно аналогичную проблему, делал через RLS. Кода получается не много, но действительно пришлось разобраться. Но и результат того стоит.
8. Андрей Бударный (WhiteShadow) 14.09.11 21:04
alex_2k пишет:

Вообще делается намного проще.
Открываешь роль которой надо запретить доступ к ценам.
открываешь регистр сведений ЦеныНоменклатуры, ставишь только одну галку "Чтение",
добавляешь запись в "Ограничения доступа к данным", поля слева не указываешь, в поле ограничение пишешь
ГДЕ ТипЦен.Код <> "00001" (укажи свой код элемента справочника, к которому закрыть доступ).
Собственно все. У меня все работает, человек с этой ролью не видит закупочных цен вообще нигде.


чесное слово приблизительно тоже самое и пробовал(разница только в том что там наименование юзалось вместо кода), - итог : не получилось.... но я повторюсь это из-за моего недопонимания... :)
9. Алексей Новоселов (a-novoselov) 15.09.11 08:35
(0) У вас менеджеры по закупу под полными правами работают? У нас нет... как нам быть :cry:
10. Азамат Масалимов (neuromancer_aza) 15.09.11 14:16
a-novoselov пишет:

(0) У вас менеджеры по закупу под полными правами работают? У нас нет... как нам быть :cry:


добавьте еще условие на роль менеджера по закупу.
WhiteShadow; +1 Ответить 1
11. Андрей Бударный (WhiteShadow) 22.09.11 22:50
(9) a-novoselov, прошу прощения отсутствовал неделю :)
условие можно использовать для любых прав, которые требуются...

как уже ответил Вам, neuromancer_aza...

подробнее так :

Если НЕ (РольДоступна("ПолныеПрава") ИЛИ РольДоступна("МенеджерПоЗакупкам")) Тогда
СписокЦенОстатков.Удалить(СписокЦенОстатков.Индекс(СписокЦенОстатков.Найти("Закупочная", "Наименование")));
КонецЕсли;

P.S. не проверял :)
12. Алексей Новоселов (a-novoselov) 23.09.11 07:07
(10)(11) Ну а если еще бухгалтерам нужно закупочные цены видеть и у нас 8 разных ролей для бухгалтеров... Может целесообразнее всетаки делать через "Настройку дополнительных прав пользователей"? Опять же в отчтетах (например какой-нибудь прайс-лист по всем типам цен) лишние пользователи смогут увидеть, или просто через операции->регистры сведений->цены номенклатуры. А для RLS на регистры список ролей не очень-то подходит, проще проверку по регистру "значения доп.прав" делать.
13. Андрей Бударный (WhiteShadow) 23.09.11 12:52
(12) a-novoselov, для Вас целесообразнее всетаки делать через "Настройку дополнительных прав пользователей"... поэтому с радостью познакомлюсь с Вашим вариантом решения, для повышения уровня знаний :)
14. Стас Веселов (StasssiK) 18.10.11 16:48
Делал типа таково же, но увы не получилось. Попробую вашу
15. Andrey Ermakov (EAU1c) 08.12.11 12:01
alex_2k пишет:
Вообще делается намного проще. Открываешь роль которой надо запретить доступ к ценам. открываешь регистр сведений ЦеныНоменклатуры, ставишь только одну галку "Чтение", добавляешь запись в "Ограничения доступа к данным", поля слева не указываешь, в поле ограничение пишешь ГДЕ ТипЦен.Код <> "00001" (укажи свой код элемента справочника, к которому закрыть доступ). Собственно все. У меня все работает, человек с этой ролью не видит закупочных цен вообще нигде.
именно так в большинстве случаев если к 81 применительно

    да но и для этого нужно создать и распределить пользователей по ролям
16. alex_2k (alex_2k) 08.12.11 12:09
EAU1c пишет:
именно так в большинстве случаев если к 81 применительно

да но и для этого нужно создать и распределить пользователей по ролям


Это применительно и к 8.2 тоже.
А как работать без ролей то? Естественно роли должны быть, куда же без них!
17. Петр Шаталов (3sf) 25.02.13 10:05
Спасибо! Очень пригодилось!
18. Станислав Бабицкий (websamson) 05.03.14 10:22
(4) alex_2k,
4. alex_2k 14.09.2011 13:15
Вообще делается намного проще.
Открываешь роль которой надо запретить доступ к ценам.
открываешь регистр сведений ЦеныНоменклатуры, ставишь только одну галку "Чтение",
добавляешь запись в "Ограничения доступа к данным", поля слева не указываешь, в поле ограничение пишешь
ГДЕ ТипЦен.Код <> "00001" (укажи свой код элемента справочника, к которому закрыть доступ).
Собственно все. У меня все работает, человек с этой ролью не видит закупочных цен вообще нигде.

Если так делаешь, то пользователь с ограниченной ролью не может запускать отчеты в которых есть запрос, содержащий вложенный запрос к РС "Цены номенклатуры" (например, Печать прайс-листа в УПП 1.3). Не помогает ключевое слово "РАЗРЕШЕННЫЕ", т.к. "Ключевое слово РАЗРЕШЕННЫЕ доступно только у первого запроса".
У кого-нибудь есть еще варианты решения, кроме "чистки" базы с запретом просмотра закупочной цены?
Может, RLS-ом это как-то правильно можно решить?
KillHunter; +1 Ответить 1
19. Vlad (KillHunter) 05.03.14 12:13
(18) websamson,
4. alex_2k 14.09.2011 13:15
Вообще делается намного проще.
Открываешь роль которой надо запретить доступ к ценам.
открываешь регистр сведений ЦеныНоменклатуры, ставишь только одну галку "Чтение",
добавляешь запись в "Ограничения доступа к данным", поля слева не указываешь, в поле ограничение пишешь
ГДЕ ТипЦен.Код <> "00001" (укажи свой код элемента справочника, к которому закрыть доступ).
Собственно все. У меня все работает, человек с этой ролью не видит закупочных цен вообще нигде.

Если так делаешь, то пользователь с ограниченной ролью не может запускать отчеты в которых есть запрос, содержащий вложенный запрос к РС "Цены номенклатуры" (например, Печать прайс-листа в УПП 1.3). Не помогает ключевое слово "РАЗРЕШЕННЫЕ", т.к. "Ключевое слово РАЗРЕШЕННЫЕ доступно только у первого запроса".
У кого-нибудь есть еще варианты решения, кроме "чистки" базы с запретом просмотра закупочной цены?
Может, RLS-ом это как-то правильно можно решить?

я тоже долго думал над решением этой проблемы и манулы курил, но в данном случае намного проще организовать через программный код.
20. Вячеслав Носков (SlavonNoskoff) 30.11.16 16:31
А у меня вообще так:
{Справочник.Номенклатура.Форма.ФормаСписка(489)}: Ошибка при вызове метода контекста (Индекс)
СписокЦенОстатков.Удалить(СписокЦенОстатков.Индекс(СписокЦенОстатков.Найти("Закупочная", "Наименование")));
по причине:
Несоответствие типов (параметр номер '1')

В чём дело?
21. Андрей Бударный (WhiteShadow) 02.12.16 12:20
22. Сергей Зенюков (Sanario) 02.12.16 12:26
(20) Как вариант просто в программе называются не "Закупочная", а "Закупочные". Поэтому найти не может