Версия для печати темы (https://pro1c.org.ua/index.php?s=4d7050bcf57337517cca21921c3e3a62&showtopic=16407)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Разделение прав пользователям

Автор: GoDammeD 29.01.14, 14:42

Добрый день!
Возникла необходимость разделить права пользователям на просмотр/изменение документов по фирмам учета.
Например:
Дано:
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 Тогда
            НашаФ=СпрФ.ТекущийЭлемент();    
        КонецЕсли;
    КонецЦикла;                              
    глСохранитьЗначение(,"глНашаФирма",НашаФ);
    УстановитьОтбор("ФирмаРасхода",НашаФ);
КонецПроцедуры


Какие способы решения данной задачи вижу я:
1. Установить вкладки для разделения документов по фирмам учета во всех журналах документов, и скрывать вкладки с фирмами, которые недоступны пользователю.
2. Блокировать доступ к определенным записям справочника "Фирмы". Затем формировать список вкладок для разделения документов по фирмам учета.
Подскажите пожалуйста каким образом возможно это все реализовать. Либо же предложите свои варианты реализации.
Заранее спасибо=)
Платформа: 1С Предприятие 7.7
Конфигурация: "Бухгалтерский учёт" для Украины (7.70.282)

Автор: Ardi 29.01.14, 14:48

Процедура ПриОткрытии()
Если Фирма=ЧужаяФирма Тогда
СтатусВозврата(0);
Возврат;
КонецЕсли;


Это вставить в модуль формы документа.

Автор: GoDammeD 29.01.14, 14:53

Цитата(Ardi @ 29.01.14, 15:48) *
Процедура ПриОткрытии()
Если Фирма=ЧужаяФирма Тогда
СтатусВозврата(0);
Возврат;
КонецЕсли;


Это вставить в модуль формы документа.


На сколько я понимаю это позволит запретить создание документа, если у пользователя нету для этого прав?
Но как тогда сделать, чтобы пользователь просто не видел документы той фирмы, к которой у него нету доступа?

Автор: Домовик 29.01.14, 15:14

Вам принципово, щоб всі фірми були в одній базі?

Автор: GoDammeD 29.01.14, 15:48

Цитата(Домовик @ 29.01.14, 16:14) *
Вам принципово, щоб всі фірми були в одній базі?

Бажано, тому що так не доведеться вести декілька баз, також так зручніше бухгалтерам, та до того ж ці всі 3 фірми вже працюють в одній базі, тож буде проблематично розділити її на окремі бази.

Автор: Домовик 29.01.14, 17:22


Цитата(GoDammeD @ 29.01.14, 11:48) *
Бажано, тому що так не доведеться вести декілька баз, також так зручніше бухгалтерам, та до того ж ці всі 3 фірми вже працюють в одній базі, тож буде проблематично розділити її на окремі бази.


Доробки, які збираєтесь робити в загальній базі будуть стосуватись і звітів, і документів, і довідників, і журналів операцій. Треба подумать зважити . Адже це конфігурація Бухгалтерський облік, яка весь час оновлюється.

А чим зручніше бухгалтерам. Вони зводять загальні дані?


Питання розділу на окремі бази не таке важке. Створити копії, повидаляти документи по іншим фірмам, почиститити довідники.







Автор: Vofka 29.01.14, 17:56

Цитата(Домовик @ 29.01.14, 17:22) *
Адже це конфігурація Бухгалтерський облік, яка весь час оновлюється.

В смысле обновляется? 7.7 уже давно не обновляется. smile.gif

Автор: Ardi 30.01.14, 0:36

Лично у меня после того как В ТЕЧЕНИИ ЦЕЛОГО ГОДА раз в 3 недели приходилось ОБЪЕЗЖАТЬ ВСЕХ и обновлять им налоговую накладную (в основном в 7.7) случилась жестокая 7.7-обновляльческая депрессия.


И 7.7 будут обновлять ещё оочень долгооо.

Автор: mister-x 30.01.14, 14:24

не думаю, як тільки вийде Бух. 8.3(2) на керованих формах (планують в кінці першого кварталу цього року тестову версію), 7.7 піде в анали історії. ІМХО

Автор: Vofka 30.01.14, 20:41

Да уж, накаркал я про обновление 7.7.

Цитата(Борис Нуралиев)
28.01.2014 14:03 вышло обновление 1С:Зарплата+Кадры для Украины Типовая конфигуpация 7.70.043 релиз
29.01.2014 15:18 вышло обновление 1С:Предприятие 7.7 для Украины Комплексная Типовая конфигурация для Украины 7.70.054 релиз
29.01.2014 15:19 вышло обновление 1С:Предприятие 7.7 для Украины Производство+Услуги+Бухгалтерия для Украины 7.70.050 релиз

http://pro1c.org.ua/index.php?s=&showtopic=2855&view=findpost&p=80986

Автор: Домовик 31.01.14, 8:02

С разделением на три базы тоже свои приколы. Любые доработки потом нужно будет обязательно копировать.



Если же оставить все в одной базе, то ...
1. точно в форме списка ДляВыбора справочника Фирмы нужно делать контроль.

2. Часть интерфеса, к примеру Отчеты, обнулить, чтобы нельзя было запускать через меню отчеты. Разработать обработку-интерфес, и через него запускать. Отчеты сразу будут запускаться с одной из нужных фирм, поменять нельзя будет. Ну чтобы не лезть в код формы каждого Отчета. Пр описывать ПриОткрытии().
С другой стороны в ПриОткрытии() всегда задается БазФирма... но все равно обработка-интерфес - более гибкий вариант, значение БазФирмы временно менять что ли.

С журналами документов... нужно подумать, возможно некоторые журналы тоже убрать из интерфеса. и запускать обработкой. Но нужно подумать.


3. Справочники ... думаю не принципиально, если бухгалтер глянет Контрагента другой фирмы, товар другой фирмы.

3. Глобальный модуль будет затронут конечно. Там при запуске формировать список разрешенных фирм.

Автор: alex040269 31.01.14, 8:38

Цитата(Домовик @ 31.01.14, 8:02) *
С журналами документов... нужно подумать, возможно некоторые журналы тоже убрать из интерфеса. и запускать обработкой. Но нужно подумать.

В журнале, я так понимаю, отбор получится сделать только в общем журнале. Т.к. в ЖД в 7.7 возможен отбор только по одному критерию и этот отбор во всех остальных журналах уже есть.

Получится разве что "скрыть" строки.

Автор: Домовик 31.01.14, 9:58

я за обработку-журнал, где можно все настроить, отобрать сразу. Прийдется заново делать стандартные кнопки(новый, удалить , отмена проведения), но это будет новый объект в конфигурации.

Автор: Sharzem 01.02.14, 20:40

Цитата(Домовик @ 31.01.14, 9:58) *
я за обработку-журнал, где можно все настроить, отобрать сразу. Прийдется заново делать стандартные кнопки(новый, удалить , отмена проведения), но это будет новый объект в конфигурации.

Автор: GoDammeD 03.02.14, 9:54

А можно ли по-подробнее о "Обработке-журнале", либо ссылку где в понятной форме написано на эту тему?

Автор: Домовик 03.02.14, 14:25

обработка-журнал, это обработка, которую нужно программисту самому написать, которая фактически будет выполнять функции обычных журналов, и которую использовать вместо них.

но сделайте хотя бы то, о чем вы сами уже задумались(у вас это пункт 2). Это ограничение при работе с реквизитом Фирма в отчетах и документах.
Это позволит несколько (не полностью) ограничить просмотр отчетов по неразрешенным фирмам, и не создавать новые документы по неразрешенным фирмам.
Сразу же вопрос - та фирма, которая в базе вашей базовая, кому она разрешена?


вместо изменения глобального модуля лучше все же забить списки фирм в объектах. Каких?

справочник Пользователи.
1. В конфигураторе добавляете реквизиты Фирма1, Фирма2, Фирма3 тип реквизитов справочник Фирмы. Редактирование элементов не "ВДиалоге", а в "Списке"
Права на редактирование этого справочника только у Администратора.

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

3. В конфигураторе справочник Фирмы, открываете модуль формы списка ДляВыбора

В модуле пишете процедуру:

   Процедура ПриВыбореСтроки()                                                                                                                                                 
        
Если (Строка(глПользователь.Фирма1)<> СокрЛП(Наименование))и (Строка(глПользователь.Фирма2)<>СокрЛП(Наименование))и
(Строка(ГлПользователь.Фирма3)<>СокрЛП(Наименование)) Тогда
            СтатусВозврата(0);
КонецЕсли;
    КонецПроцедуры


такое решение не всегда корректно, но фирм только три, и будет три.

Автор: GoDammeD 03.02.14, 15:29

Домовик, спасибо больше, буду пробовать=)

Автор: Sharzem 28.06.14, 18:00

Цитата(Домовик @ 31.01.14, 10:58) *
я за обработку-журнал, где можно все настроить, отобрать сразу. Прийдется заново делать стандартные кнопки(новый, удалить , отмена проведения), но это будет новый объект в конфигурации.


Хоть теме уже Бог знает сколько, но данная идея довольно-таки привлекательна friends.gif . Здесь больше вопрос к автору идеи (поскольку такое уже почти реализовано и есть вопросик), подскажите плиз (если Вы такое уже реализовывали), а как оперативно обновить данные в обработке при создании новых и редактировании имеющихся документов (я как-то этот момент выпустил с головы и пошел цыклом, результат - нагрузка проца haha.gif ) ?

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



Автор: Домовик 30.06.14, 21:43

что-то затерлось случайно, что только-что отвечалось .

вкратце:

эта задача мною не реализовывалась, если бы пришлось:

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

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

Автор: Sharzem 01.07.14, 15:14

Цитата(Домовик @ 30.06.14, 22:43) *
т.е есть выборка, и есть заполнение строк с по.
в 1С возможно имеет смысл если это таблицазначений на форме(а заполнение ее занимает время), то формировать список докуменотов весь, но заполнять только строа ки с по по требованию.


Оно !!! Поскольку, как правило, курсор установлен на документе имеющим определенную дату вышло что нужно:

лпКолСтрокНекаяТЗ = НекаяТЗ.КоличествоСтрок();
лпТекущаяСтрока = НекаяТЗ.ТекущаяСтрока();
лпДокументНач = НекаяТЗ.ПолучитьЗначение(?( лпТекСтрока-30> 1, лпТекСтрока-30, 1),"Документ");
лпДокументКон = НекаяТЗ.ПолучитьЗначение(?( лпТекСтрока+30< лпКолСтрокНекаяТЗ, лпТекСтрока+30, лпКолСтрокНекаяТЗ),"Документ");
лпДокумент = СоздатьОбъект("Документ."+ лпДокументНач.Вид());//Или если нравится  лпДокументКон.Вид(), это все равно документы одного вида
лпДокумент.ВыбратьДокументы( лпДокументНач.ДатаДок, лпДокументКон.ДатаДок);
Пока лпДокумент.ПолучитьДокумент = 1 Цикл

КонецЦикла;


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


Процедура ПриНажатииКнопкиКлавиатуры(прКодКлавиши, прAlt, прShift, прCtrl, прСимвол, прФСО)
    //Сообщить("Код клавиши: "+прКодКлавиши);
    Если прКодКлавиши = 27 Тогда
        гпНеЗакрывать = 1;
    ИначеЕсли прКодКлавиши = 46 Тогда
        ПриНажатииКнопки("кнУдалить");
    ИначеЕсли прКодКлавиши = 113 Тогда
        ПриНажатииКнопки("кнНовый");//кнопка insert действует до окончания процедуры заменено на F2
    КонецЕсли;
гпДвижение = _GetPerformanceCounter();//переменная куда задаю последнее время нажатия клавиш
КонецПроцедуры//ПриНажатииКнопкиКлавиатуры()
//======================================================================
Процедура ПриДвиженииМыши(прКонт, прСост, прОсьХ, ПрОсьУ)
    гпДвижение = _GetPerformanceCounter(); //та же самая переменная куда задаю последнее время движения мыши
КонецПроцедуры
//======================================================================
Процедура ПриДеактивацииОкна()
ВыполнитьОбработку();//Здесь вообще выключаю обработку ожидания
КонецПроцедуры // ПриДеактивацииОкна()
//======================================================================
Процедура ПриАктивацииОкна()
    ВыполнитьОбработку(); //Здесь Включаю выполнение обработки ожидания
КонецПроцедуры // ПриАктивацииОкна()

//======================================================================

Функция ЕстьВозможностьПропустить() //Функция которая определит что юзер курит
    лпСтатус = 0;
    лпДвижение = _GetPerformanceCounter();
    Если (лпДвижение-гпДвижение)/1000 > 150 Тогда
        лпСтатус = 1;
    КонецЕсли;
    Возврат лпСтатус;
КонецФункции // ЕстьВозможностьПропустить()

//======================================================================

Процедура ЗдесьПроцедураПоОбновлению()

Если ЕстьВозможностьПропустить() = 0 Тогда //А здесь если пользователь не курит, а работает - будем обновлять журнал-обработку
        //что-то там
        КонецЕсли;

КонецПроцедуры

//======================================================================

Процедура ВыполнитьОбработку() Экспорт
    Если гпСчСекЗапущен=0 Тогда
Форма.ОбработкаОжидания("ЗдесьПроцедураПоОбновлению",1);
        гпСчСекЗапущен=1;
    Иначе              
        Форма.ОбработкаОжидания("ЗдесьПроцедураПоОбновлению",0);
        гпСчСекЗапущен=0;
    КонецЕсли;
КонецПроцедуры//ВыполнитьОбработку


Итак, итог: С помощью идей Домовик удалось заменить 1 С-кий журнал документов на ОПТИМИЗИРОВАННУЮ 1 С-кую "Журнал-обработку" с кучей дополнительных прибабахов заменяющую его без изменения конфигурации (последняя не изменялась вообще).

Спасибо, Домовик, время потрачено не даром ):


Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua