Добрый день!
Возникла необходимость разделить права пользователям на просмотр/изменение документов по фирмам учета.
Например:
Дано:
1. Фирма1, Фирма2, Фирма3. Все они занесены в Справочник.Фирмы.
2. 3 пользователя: Пользователь1, Пользователь2, Пользователь3.
Нужно:
1. Чтобы Пользователь1 видел все документы по Фирма1, Фирма2, Фирма3.
2. Чтобы Пользователь2 видел все документы по Фирма2, Фирма3, но не видел документы по Фирма1.
3. Чтобы Пользователь3 видел все документы по Фирма3, но не видел докуметы по Фирма1, Фирма2.
Так же в некоторых журналах документы разделены по фирмам при помощи вкладок. Как именно к сожалению я не знаю. Но очень хотелось бы узнать=)
Вот код, который формирует вкладки при открытии формы журнала "РасходныеНакладные":
Процедура ПриОткрытии()
...
Форма.ИспользоватьЗакладки(1);
СпрФ=СоздатьОбъект("Справочник.Фирмы");
СпрФ.ПорядокКодов();
СпрФ.ВыбратьЭлементы();
фП=0;НашаФ="";
Пока СпрФ.ПолучитьЭлемент()=1 Цикл
Форма.Закладки.ДобавитьЗначение(СпрФ.ТекущийЭлемент());
фП=фП+1;
Если фП=1 Тогда
НашаФ=СпрФ.ТекущийЭлемент();
КонецЕсли;
КонецЦикла;
глСохранитьЗначение(,"глНашаФирма",НашаФ);
УстановитьОтбор("ФирмаРасхода",НашаФ);
КонецПроцедуры
Процедура ПриОткрытии()
Если Фирма=ЧужаяФирма Тогда
СтатусВозврата(0);
Возврат;
КонецЕсли;
Процедура ПриОткрытии()
Если Фирма=ЧужаяФирма Тогда
СтатусВозврата(0);
Возврат;
КонецЕсли;
Вам принципово, щоб всі фірми були в одній базі?
Лично у меня после того как В ТЕЧЕНИИ ЦЕЛОГО ГОДА раз в 3 недели приходилось ОБЪЕЗЖАТЬ ВСЕХ и обновлять им налоговую накладную (в основном в 7.7) случилась жестокая 7.7-обновляльческая депрессия.
И 7.7 будут обновлять ещё оочень долгооо.
не думаю, як тільки вийде Бух. 8.3(2) на керованих формах (планують в кінці першого кварталу цього року тестову версію), 7.7 піде в анали історії. ІМХО
Да уж, накаркал я про обновление 7.7.
С разделением на три базы тоже свои приколы. Любые доработки потом нужно будет обязательно копировать.
Если же оставить все в одной базе, то ...
1. точно в форме списка ДляВыбора справочника Фирмы нужно делать контроль.
2. Часть интерфеса, к примеру Отчеты, обнулить, чтобы нельзя было запускать через меню отчеты. Разработать обработку-интерфес, и через него запускать. Отчеты сразу будут запускаться с одной из нужных фирм, поменять нельзя будет. Ну чтобы не лезть в код формы каждого Отчета. Пр описывать ПриОткрытии().
С другой стороны в ПриОткрытии() всегда задается БазФирма... но все равно обработка-интерфес - более гибкий вариант, значение БазФирмы временно менять что ли.
С журналами документов... нужно подумать, возможно некоторые журналы тоже убрать из интерфеса. и запускать обработкой. Но нужно подумать.
3. Справочники ... думаю не принципиально, если бухгалтер глянет Контрагента другой фирмы, товар другой фирмы.
3. Глобальный модуль будет затронут конечно. Там при запуске формировать список разрешенных фирм.
я за обработку-журнал, где можно все настроить, отобрать сразу. Прийдется заново делать стандартные кнопки(новый, удалить , отмена проведения), но это будет новый объект в конфигурации.
А можно ли по-подробнее о "Обработке-журнале", либо ссылку где в понятной форме написано на эту тему?
обработка-журнал, это обработка, которую нужно программисту самому написать, которая фактически будет выполнять функции обычных журналов, и которую использовать вместо них.
но сделайте хотя бы то, о чем вы сами уже задумались(у вас это пункт 2). Это ограничение при работе с реквизитом Фирма в отчетах и документах.
Это позволит несколько (не полностью) ограничить просмотр отчетов по неразрешенным фирмам, и не создавать новые документы по неразрешенным фирмам.
Сразу же вопрос - та фирма, которая в базе вашей базовая, кому она разрешена?
вместо изменения глобального модуля лучше все же забить списки фирм в объектах. Каких?
справочник Пользователи.
1. В конфигураторе добавляете реквизиты Фирма1, Фирма2, Фирма3 тип реквизитов справочник Фирмы. Редактирование элементов не "ВДиалоге", а в "Списке"
Права на редактирование этого справочника только у Администратора.
2.В режиме Предприятие в справочнике Пользователи Системы проставляете фирмы пользователям. Бухгалтеру, который видит все фирмы ставите все три фирмы.
3. В конфигураторе справочник Фирмы, открываете модуль формы списка ДляВыбора
В модуле пишете процедуру:
Процедура ПриВыбореСтроки()
Если (Строка(глПользователь.Фирма1)<> СокрЛП(Наименование))и (Строка(глПользователь.Фирма2)<>СокрЛП(Наименование))и
(Строка(ГлПользователь.Фирма3)<>СокрЛП(Наименование)) Тогда
СтатусВозврата(0);
КонецЕсли;
КонецПроцедуры
Домовик, спасибо больше, буду пробовать=)
что-то затерлось случайно, что только-что отвечалось .
вкратце:
эта задача мною не реализовывалась, если бы пришлось:
1. по принципу интернет-поисковиков, результат выборки не показывается весь а показывается опред страница с возможностью перехода на другую.
т.е есть выборка, и есть заполнение строк с по.
в 1С возможно имеет смысл если это таблицазначений на форме(а заполнение ее занимает время), то формировать список докуменотов весь, но заполнять только строа ки с по по требованию.
2. вывод таблицы (на печать ) работает быстрее, чем заполнение таблзнач на форме. По аналогии с типовыми отчетами журнал сделать на таблице, используя расшифровки .
лпКолСтрокНекаяТЗ = НекаяТЗ.КоличествоСтрок();
лпТекущаяСтрока = НекаяТЗ.ТекущаяСтрока();
лпДокументНач = НекаяТЗ.ПолучитьЗначение(?( лпТекСтрока-30> 1, лпТекСтрока-30, 1),"Документ");
лпДокументКон = НекаяТЗ.ПолучитьЗначение(?( лпТекСтрока+30< лпКолСтрокНекаяТЗ, лпТекСтрока+30, лпКолСтрокНекаяТЗ),"Документ");
лпДокумент = СоздатьОбъект("Документ."+ лпДокументНач.Вид());//Или если нравится лпДокументКон.Вид(), это все равно документы одного вида
лпДокумент.ВыбратьДокументы( лпДокументНач.ДатаДок, лпДокументКон.ДатаДок);
Пока лпДокумент.ПолучитьДокумент = 1 Цикл
КонецЦикла;
Процедура ПриНажатииКнопкиКлавиатуры(прКодКлавиши, прAlt, прShift, прCtrl, прСимвол, прФСО)
//Сообщить("Код клавиши: "+прКодКлавиши);
Если прКодКлавиши = 27 Тогда
гпНеЗакрывать = 1;
ИначеЕсли прКодКлавиши = 46 Тогда
ПриНажатииКнопки("кнУдалить");
ИначеЕсли прКодКлавиши = 113 Тогда
ПриНажатииКнопки("кнНовый");//кнопка insert действует до окончания процедуры заменено на F2
КонецЕсли;
гпДвижение = _GetPerformanceCounter();//переменная куда задаю последнее время нажатия клавиш
КонецПроцедуры//ПриНажатииКнопкиКлавиатуры()
//======================================================================
Процедура ПриДвиженииМыши(прКонт, прСост, прОсьХ, ПрОсьУ)
гпДвижение = _GetPerformanceCounter(); //та же самая переменная куда задаю последнее время движения мыши
КонецПроцедуры
//======================================================================
Процедура ПриДеактивацииОкна()
ВыполнитьОбработку();//Здесь вообще выключаю обработку ожидания
КонецПроцедуры // ПриДеактивацииОкна()
//======================================================================
Процедура ПриАктивацииОкна()
ВыполнитьОбработку(); //Здесь Включаю выполнение обработки ожидания
КонецПроцедуры // ПриАктивацииОкна()
//======================================================================
Функция ЕстьВозможностьПропустить() //Функция которая определит что юзер курит
лпСтатус = 0;
лпДвижение = _GetPerformanceCounter();
Если (лпДвижение-гпДвижение)/1000 > 150 Тогда
лпСтатус = 1;
КонецЕсли;
Возврат лпСтатус;
КонецФункции // ЕстьВозможностьПропустить()
//======================================================================
Процедура ЗдесьПроцедураПоОбновлению()
Если ЕстьВозможностьПропустить() = 0 Тогда //А здесь если пользователь не курит, а работает - будем обновлять журнал-обработку
//что-то там
КонецЕсли;
КонецПроцедуры
//======================================================================
Процедура ВыполнитьОбработку() Экспорт
Если гпСчСекЗапущен=0 Тогда
Форма.ОбработкаОжидания("ЗдесьПроцедураПоОбновлению",1);
гпСчСекЗапущен=1;
Иначе
Форма.ОбработкаОжидания("ЗдесьПроцедураПоОбновлению",0);
гпСчСекЗапущен=0;
КонецЕсли;
КонецПроцедуры//ВыполнитьОбработку
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua