Решаемая задача: У заказчика в штате был бухгалтер, который и оформлял продажи. Но в связи с расширением бизнеса понадобился еще один продавец. Требуется урезать продавцу возможности до выписки счета на оплату, документа "Реализация товаров услуг", счетов-фактур. Продавец не должен видеть иных цен, кроме основной цены продажи, не должен видеть остатков товаров по другим организациям в базе. Также нельзя редактировать цены и сумму в документе продажи.
Надо сказать, что Бухгалтерия для торговли плохо приспособлена. Поэтому пришлось править конфигурацию во многих местах. Пошаговая инструкция:
- Сперва нужно включить возможность изменения для конфигурации в целом, чтобы добавить новую роль и новый интерфейс. После создать пользователя "Продавец" используя их. Возможность редактировать другие объекты конфигурации добавлять по мере надобности. Добавить "ИнтерфейсПродавца": из справочников только "Номенклатура", из документов - "Реализация товаров и услуг", "Счет на оплату", "Счёт-фактура выданный". Убрать "Операции", "Сервис", из "Справка" убрать "Панель функций".
- В свойствах общего интерфейса поставить галочку переключаемый.
- Добавить "РольПродавца:
- дать права на запуск толстого клиента
- параметры сеанса: галочки получение и установка
- общие формы: просмотр
- интерфейсы: только ИнтерфейсПродавца, с общего снять галочку
- константы: чтение
- справочники: чтение, просмотр, ввод по строке
- документы: в зависимости от конкретных требований: можно поставить всем чтение, добавление, изменение, проведение, просмотр, интерактивное добавление, редактирование, интерактивное проведение, ввод по строке. Документы->Последовательности: чтение и изменение, Документы->Установка цен номенклатуры - только чтение.
- журналы документов: чтение
- обработки: БухгалтерскиеИтоги, ДополнительнаяИнформация, ПодборНоменклатуры - для всех них использование и просмотр
- планы всех видов - чтение
- регистры всех видов - полный доступ
- ОбщийМодуль.УправлениеПользователями проц. ПроверитьВозможностьРаботыПользователя: добавить выделенное:
Если НЕ РольДоступна("ПолныеПрава") И НЕ РольДоступна("Бухгалтер") И НЕ РольДоступна("РольПродавца") Тогда
- Модуль обычного приложения: проц. ПроверитьЗапускСтартовогоПомощникаИПанелиФункций: добавить выделенное
Если НЕ РольДоступна("РольПродавца") Тогда ОткрытьПанельФункций = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОткрыватьПриЗапускеПанельФункций"); Если НЕ СПОткрыт И ОткрытьПанельФункций Тогда .... КонецЕсли; Если НЕ СПОткрыт И ОбщегоНазначения.ЭтоДемонстрационнаяБаза() Тогда .... КонецЕсли; Если НЕ СПОткрыт Тогда .... КонецЕсли; КонецЕсли; КонецПроцедуры
- ОбщаяФорма.ФормаЦеныИВалюта модуль проц. НовыйТипЦенНачалоВыбора: добавить выделенное
Если РольДоступна("РольПродавца") Тогда НовыйТипЦен = Справочники["ТипыЦенНоменклатуры"].НайтиПоНаименованию("Основная цена продажи"); СтандартнаяОбработка = Ложь; КонецЕсли; КонецПроцедуры
- Справочник.Номенклатура.Форма.ФормаЭлемента проц. ПриОткрытии() - запрет на просмотр цен:
Если РольДоступна("РольПродавца") Тогда ЭлементыФормы.ЦеныНоменклатуры.Видимость = Ложь; КонецЕсли; КонецПроцедуры
- Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента модуль: добавить выделенное в проц. ПриОткрытии()
Если ЭтоНовый() Тогда Если РольДоступна("РольПродавца") Тогда Организация = Справочники.Организации.НайтиПоКоду("000000001"); Склад = Справочники.Склады.НайтиПоКоду("000000001"); ТипЦен = Справочники["ТипыЦенНоменклатуры"].НайтиПоНаименованию("Основная цена продажи"); ЭтаФорма.ЭлементыФормы.Организация.КнопкаВыбора = Ложь; ЭтаФорма.ЭлементыФормы.Организация.КнопкаСпискаВыбора = Ложь; ЭтаФорма.ЭлементыФормы.Организация.БыстрыйВыбор = Ложь; ЭтаФорма.ЭлементыФормы.Организация.ТолькоПросмотр = Истина; КонецЕсли; ....... Если РольДоступна("РольПродавца") Тогда ЭлементыФормы.Товары.Колонки.Цена.ТолькоПросмотр = Истина; ЭлементыФормы.Товары.Колонки.Сумма.ТолькоПросмотр = Истина; КонецЕсли; КонецПроцедуры // ПриОткрытии()
- Обработка.ПодборНоменклатуры.Форма.ОсновнаяФорма модуль: изменить выделенное в проц. ДействияПриОткрытии() - чтобы фильтр по умолчанию был активен
ФильтрЗапроса = ?(ПараметрФильтрЗапроса = Неопределено, Истина, ПараметрФильтрЗапроса); // Покажем соответствующее табличное поле и заполним таблицу номенклатуры текущего родителя. ПриИзмененииВидаПодбора(ЭлементыФормы.СписокВидовПодбора.Значение); ЭтаФорма.Заголовок = СтруктураИсходныхПараметров.Заголовок; КонецПроцедуры // ДействияПриОткрытии()
Обработка.ПодборНоменклатуры.Форма.ВводПараметров модуль - запрет на изменение цены:
Процедура ПриОткрытии() мПриОткрытии(ЭтаФорма); Если РольДоступна("РольПродавца") Тогда ЭлементыФормы.Цена.ТолькоПросмотр = Истина; КонецЕсли; КонецПроцедуры
Буду рад, если данный алгоритм кому-нибудь будет полезен и сэкономит время, а так же замечаниям, как данную задачу можно было решить проще, более красиво и правильней.