Ограничение формирования стандартных отчётов некоторым набором счетов

30.11.10

Задачи пользователя - Адаптация типовых решений

В стандартных средствах платформы 7 нет возможности ограничить доступ к отчётам только определёнными счетами, хотя вопрос этот периодически возникает.
Предложено решение, позволяющее путём небольших переделок типовой конфигурации внедрить механизм ограничения выбора счёта в стандартном отчёте и относительно легко настраивать его для новых пользователей.
В стандартных средствах платформы 7 нет возможности ограничить доступ к отчётам только определёнными счетами, хотя вопрос этот периодически возникает. Для организации такого разграничения понадобятся небольшие доработки стандартных алгоритмов. Прежде всего во все отчёты, в которых мы хотим конкретному пользователю разрешить выбирать конкретные счета, в процедуру ПриНачалеВыбораЗначения(ИдентЭлемДиалога,Флаг) добавим:
Если ИдентЭлемДиалога = "Счет" Тогда
Если
глКонтролироватьСчета = 0 Тогда
Флаг = 1;
Иначе
Флаг = 0;
Счет = глДоступныйСчет();
ПриВыбореСчета();
КонецЕсли;
КонецЕсли;
Таким образом мы в зависимости от значения переменной глКонтролироватьСчета перенаправим выбор счета в функцию глДоступныйСчет(). Теперь разберёмся с глобальным модулем. Вставим в него описание двух переменных
// Определение переменных
Перем глКонтролироватьСчета Экспорт;
Перем глСписокСчетов;
(глСписокСчетов будет списком значений, содержащих доступные счета) и функцию глДоступныйСчет()
//Функция глДоступныйСчет() - располагается в любом месте ГМ
Функция глДоступныйСчет() Экспорт
Перем
сч;
Если глСписокСчетов.РазмерСписка()>0 Тогда
глСписокСчетов.ВыбратьЗначение(сч);
Иначе
сч = ПолучитьПустоеЗначение("Счет");
КонецЕсли;
Возврат(сч) ;
Теперь определим значение глКонтролироватьСчета и заполним глСписокСчетов. Сделаем это в процедуре ПриНачалеРаботыСистемы(). Используем одну хитрость. Если мы ограничиваем пользователю формирование каких-либо отчётов, то, естественно, нам придётся создавать для него новый набор прав. (Как минимум, мы запретим ему запуск любых внешних отчётов, использование шахматки - её-то списком счетов не ограничишь, ну и скорее всего ещё урежем его в правах.) Название нового набора прав будет состоять из слова "Только" и списка счетов через запятую. Например - "Только41,60,62". Используя этот нехитрый приём, мы обеспечим работу нашей системы ограничения стандартных отчётов для любого нового пользователя (например, "Только70,68,69", "Только50.51" и т.д.).
глСписоксчетов = СоздатьОбъект("СписокЗначений");
глКонтролироватьсчета = 1;
НаборПрав = НазваниеНабораПрав(1);

Если СокрЛП(НаборПрав)="" Тогда
ИначеЕсли
Лев(СокрЛП(НаборПрав),6)="Только"
Прочитали название набора прав, если оно пустое (пользователь не авторизован) не делаем ничего, если же оно начинается со слова "Только", заполним глСписокСчетов. Для этого вычленим из названия набора прав значения кодов счетов. добавим их в список. Для счетов-групп добавим также все субсчета.
		_Состав = Сред(НаборПрав,7);
Пока СтрДлина(_Состав)>0 Цикл
_Состав = СокрЛП(_Состав);
ПозицияЗапятой = Найти(_Состав,",");
Если ПозицияЗапятой = 0 Тогда
НовоеЗначение = _Состав; _Состав = "";
ИначеЕсли ПозицияЗапятой = 1 Тогда
_Состав = Сред(_Состав,2);
Продолжить;
Иначе
НовоеЗначение = СокрЛП(Лев(_Состав,ПозицияЗапятой - 1));
Если ПозицияЗапятой<СтрДлина(_Состав) Тогда
_Состав = Сред(_Состав,ПозицияЗапятой + 1);
Иначе
_Состав = "";
КонецЕсли;
КонецЕсли;
ДобавляемыйСчет = СчетПоКоду(НовоеЗначение) ;
глСписоксчетов.ДобавитьЗначение(ДобавляемыйСчет,""+НовоеЗначение+" "+ДобавляемыйСчет.Наименование);
Если ДобавляемыйСчет.ЭтоГруппа()=1 Тогда
ЕщеСчета = СоздатьОбъект(\"Счет\");
ЕщеСчета.ИспользоватьРодителя(ДобавляемыйСчет);
ЕщеСчета.ВыбратьСчета();
Пока ЕщеСчета.ПолучитьСчет() = 1 Цикл
глСписоксчетов.ДобавитьЗначение(ЕщеСчета.ТекущийСчет(),""+ЕщеСчета.Код+" "+ЕщеСчета.Наименование);
КонецЦикла;
КонецЕсли;
КонецЦикла;
Для ситуации. когда название набора прав определено, но не начинается словом "Только" установим глКонтролироватьСчета в ноль.
Иначе
глКонтролироватьСчета = 0;
КонецЕсли;
Таким образом, для всех пользователей с набором прав "Только" у нас будут сформированы списки доступных счетов, для прочих авторизованных пользователей контроль выбора счета будет отключен, а неавторизованные пользователи не смогут использовать эти стандартные отчёты вообще (у них при включённом контроле список доступных счетов будет пустой).

См. также

Улучшенная обработка "Внешние печатные формы" для типовых конфигураций на базе 1С 7.7

Печатные формы Адаптация типовых решений Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Приятное улучшение обработки "Внешние печатные формы" для типовых конфигураций на базе 1С 7.7 для более комфортной работы с "любимой семерочкой".

1 стартмани

04.02.2022    3200    1    igor7777    0    

3

Расчет страховых взносов в 1С 7.7 "Учет и отчетность предпринимателя, ред. 1.2" с апреля 2020

Адаптация типовых решений Платформа 1С v7.7 Конфигурации 1cv7 Россия Бухгалтерский учет ФОМС, ЕФС Бесплатно (free)

В этой статье описано, какие небольшие изменения можно внести в модуль документа Начисление налогов с ФОТ, чтобы правильно рассчитывались страховые взносы с 1 апреля 2020 г.

09.04.2020    19674    Юджин58    39    

5

Дистрибьюция 7.7. Часть 1. Жизненный цикл заявки покупателя. Одна заявка покупателя, много адресов доставки.

Адаптация типовых решений Платформа 1С v7.7 1С:Комплексная 7.7 1С:Торговля и склад 7.7 Управленческий учет Бесплатно (free)

Описан способ работы с учетом расписания с приоритетными покупателями - торговыми сетями (основными покупателями) в торговой или комплексной учетной системе на 1С 7.7. Множественная заявка покупателя на несколько торговых точек.

14.10.2019    6009    ksnik    14    

3

Как в торговле 7.7 печатать код ТНВЭД в счет-фактуре

Операции по ВЭД Адаптация типовых решений Оперативный учет 7.7 1С:Торговля и склад 7.7 Россия Бухгалтерский учет НДС Бесплатно (free)

В данной статье хотел поделиться опытом, как в Торговле 7.7 ( релиз 994) сделать возможность выводить код ТНВЭД в печатную форму счета-фактуры. Сразу скажу, что нужно это только тем, кто осуществляет экспорт в страны таможенного союза. Остальные могут не волноваться.

15.11.2017    11816    AndKovalchuk    0    

1

Предельные базы взносов в ПФР, ФСС, ФФОМС 2015 в 1С: Бухгалтерия 7.7

Зарплата Адаптация типовых решений Бухгалтерский учет 7.7 1С:Бухгалтерия 7.7 Россия Бухгалтерский учет Абонемент ($m)

Реализация Постановления Правительства РФ 1316 от 04.12.14 для типовой конфигурации "Бухгалтерский учет 7.7" рел. 7.70.590

1 стартмани

31.12.2014    23928    9    Sergey1CSpb    2    

0
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. artbear 1448 24.03.08 17:58 Сейчас в теме
Странная схема, честно говоря, и очень много факторов неучтено :(
Например, есть реквизиты типа счет с именем КоррСчет и т.д.
Далее нафига в название роли засовывать названия счетов в качестве ограничения, когда можно сделать простой справочник, в котором названия привязать к счетам.
И т.д. и т.п. :(
2. artbear 1448 24.03.08 18:01 Сейчас в теме
Еще не проработан момент показа в каком-то отчете запрещенных счетов - например, для выбора в отчетах счет 70 запрещен, но его легко будет посмотреть, например, в отчетах по субконто и т.д.
3. Timesoft 271 25.03.08 11:11 Сейчас в теме
Ну, во-первых, 20 стороками кода проблему разграничения доступа не решишь, задача стояла именно ограничить выбор счёта... Насчёт КоррСчет - принято. Добавим в ПриНачалеВыбораЗначения еще КоррСчет.
А зачем делать справочник, когда можно НЕ ДЕЛАТЬ ? Кроме того, в справочник надо не забывать добавить при появлении нового. Справочник надо закрыть от тех же пользователей...
Ну и если надо закрывать выбор субконто - это уже другая задача. Можно просто выкинуть этот отчёт у конкретного пользователя.
Вообще, по большому счёту, вся система разграничения в 7-ке - это защита от дурака, для гарантированного разграничения информации от УМНЫХ пользователей надо затратить несравненно больше усилий, чем здесь предложено, которые могут пойти на смарку в несколько секунд, когда этот умный пользователь залезет в папку базы данных...
4. artbear 1448 25.03.08 11:22 Сейчас в теме
(3) Я намекал, что лучше использовать не название, а проверять тип значения элемента :)
В названии может стоять все что угодно :)
5. CheBurator 3119 25.03.08 22:34 Сейчас в теме
а что мешает в поле выбора счета вбить код счета вручную...?
9. Timesoft 271 27.03.08 11:23 Сейчас в теме
(5) Помешаем ! Ставим на поле Счет (ну и КоррСчет) флаг "Запретить редактирование", ручками вводить нельзя, а выбор из списка работает !
6. maljaev 789 26.03.08 09:25 Сейчас в теме
Мое мнение совпадает с artbear. Сталкивался с такой же проблемой, пришел к выводу что необходимо контролировать вывод каждого значения в ячейках и даже более того. Легче наверное написать стандартные отчеты с нуля, учитывая контроль прав на счета и субконто, чем лопатить существующие.
7. Слава123 26.03.08 23:47 Сейчас в теме
Достаточно жизнеспособная идея, если не разрабатывается параноидальная система защиты от утечки комерческой информации :))))
8. CheBurator 3119 27.03.08 00:24 Сейчас в теме
(7) не прокатит... достаточно изредка фоткать мобильником экраны пользователей с более широкими правами...
10. Timesoft 271 27.03.08 11:31 Сейчас в теме
(8) Мобильники отнимать на входе в здание ! ...или просматривать фотографии на выходе!
А если серьёзно - эта идея позиционируется как достаточно простое и эффективное решение в объёме "защиты от дурака".
(6) А что помешает пользователю (умному) открыть папку базы.. и через 30 секунд добавить нового пользователя с полными правами, получить какие надо отчёты и вернуть всё на место ? Или вообще просто утащить базу?
11. maljaev 789 27.03.08 17:11 Сейчас в теме
(10) "А что помешает пользователю..." - помешает администратор сети, если ему не все "по барабану".
12. Timesoft 271 28.03.08 11:22 Сейчас в теме
(11) Например ? Предложите способ сделать это при отсутствии выделенного сервера. Да и при наличии сомневаюсь я что-то...
13. maljaev 789 31.03.08 12:20 Сейчас в теме
При отсутствии сервера не предложу. При наличии терминал-сервера многое можно сделать, хотя дыры при желании всегда найдутся. Но все-таки на терминалке штатными средствами администрирования и нештатными компонентами под 1С и утилитами можно 99% дыр позакрывать. Правда потребуется много времени и фантазии. Я помню, то ли статья была, то ли ветка в форуме, где были описаны многие дыры 1С и способы как их закрыть.
Оставьте свое сообщение