Безопасность 1с 7.7

Тема в разделе "1C и всё что с ней связано", создана пользователем IvanS, 12 янв 2009.

  1. IvanS

    IvanS Гость

    У меня 2 вопроса.
    Можно сделать, что бы во всех журналах у конкретного пользователя показывались документы только по 3 определенным складам и н-ному количеству касс (тоже определенных).
    Мне сказали сделать разделение ( визуальное) по группам складов и что бы 1 группа видела документы только относящиеся к ней.
    Может кто уже сталкивался с такой проблемой, подскажите как лучше сделать?

    И второе, есть ли в нете ( гуглил не нашел) надстройки для 1с, пускай даже платные для того что бы можно было запретить доступ к документам не просто опр вида, а по принципу того же склада. Т.е. пользователь из 1 группы с складом№1 не мог получить доступ к документам склада;2 относящегося ко второй группе или хотя бы мог только смотреть, но не изменить.
     
  2. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Что-то типа

    Код (Text):
    Процедура ПриОткрытии()
    Юзер=СокрЛП(Пользователь.Код);
    Если Юзер<>"Администратор" Тогда
    Если Юзер<>"Ирина" Тогда
    Если Юзер<>"Людмила" Тогда
    УстановитьОтбор("Менеджер",Юзер);
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры

    Процедура ПриПовторномОткрытии()
    ПриОткрытии();
    КонецПроцедуры
    С доступом - то-же при открытии, только с выкидыванием, ежли пользователь не в той группе.
     
  3. IvanS

    IvanS Гость

    Ух ты, спасибо. А где почитать поподробнее?
    Как я понял нужно будет это прописывать в глобальном модуле при открытии. И можно ли как-то привязаться не к имени пользователя а к набору его прав, которые устанавливаются в конфигураторе ?
     
  4. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Почитать в синтаксис-помошнике. Там просто установитьОтбор в документах живет - там внутри подграфа про списки журналов.
    В глобальный это можно просто вынести, а жить должно в модулях формы журналов.
    К набору прав можно привязаться через НазваниеНабораПрав(0)
     
  5. IvanS

    IvanS Гость

    Т.е. обойтись только правкой глобального модуля не получится? Там просто слишком много журналов, замучаюсь потом обновлять.

    А набор прав так получать :

    Юзер=СокрЛП(Пользователь.НазваниеНабораПрав)
     
  6. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    а что глобальник? его к каждой форме не пришьешь.Надо в каждой форме журнала прописывать. Проще всего записать процедуру в глобальник, и прописать её вызов приоткрытии() журналов.
    а пользовательские права получить проще
    Юзер= СокрЛП(НазваниеНабораПрав(0));

    у меня просто все пользователи в отдельный справочник забиты и при начале работы системы элемент справочника соответствующий пользователю, записывается в глобальную переменную пользователь.
    Поэтому Пользователь.Код работает .
    Так как скорее всего этого у тебя нет то проще как я написал выше.
     
  7. IvanS

    IvanS Гость

    У меня есть родной справочник 1с. Если бы там можно было джелать группы было бы замечательно еще проще, чем делать 10 однотипных прав пользователей ( просто название прав хотябы неизменно) а вот имена пользователй часто меняются.

    И еще он мне не дает установить отбор. В модуле журнала при открытии прописал:

    Код (Text):
    Процедура ПриОткрытии()

    ПриОткрытииИЛИПереоткрытииЖурнала("Открытие");

    // будем отслеживать только реальные изменения этих реквизитов
    Форма.ВидОтбора.ВыполнятьФормулуТолькоПриИзменении(1);

    Юзер = НазваниеНабораПрав (0);
    Если Юзер<>"Постовалова" Тогда
    ПолучитьЗначение (ПолСправочник.Склады.Наименование)
    УстановитьОтбор(Склад,"Постовалова 8");
    Иначе  Если Юзер<>"Труда" Тогда
    УстановитьОтбор(Склад,"Труда 5а");
    КонецЕсли;
    КонецЕсли;

    КонецПроцедуры // ПриОткрытии()
    При открытии пишет УстановитьОтбор(Склад,"Труда 5а") - значение неопределено

    В ЖКК написано надо еще и прописать все виды документов. Даже при такой форме :

    Код (Text):
    Процедура ПриОткрытии()

    ПриОткрытииИЛИПереоткрытииЖурнала("Открытие");

    // будем отслеживать только реальные изменения этих реквизитов
    Форма.ВидОтбора.ВыполнятьФормулуТолькоПриИзменении(1);

    Юзер = НазваниеНабораПрав (0);
    Если Юзер<>"Постовалова" Тогда
    ПолучитьЗначение (ПолСправочник.Склады.Наименование)
    УстановитьОтбор(Склад,"Постовалова 8");
    Иначе  Если Юзер<>"Труда" Тогда
    УстановитьОтбор(ПеремещениеТМЦ);
    УстановитьОтбор(Склад,"Труда 5а");
    КонецЕсли;
    КонецЕсли;

    КонецПроцедуры // ПриОткрытии()
    все тоже самое
    пытаюсь сделать общий журнал для начала, т.к. он самый используемый ими.
    конфа комплексная 7.7 почти типовая :ph34r:
     
  8. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    При открытии пишет УстановитьОтбор(Склад,"Труда 5а") - значение неопределено
    конечно неопределено - первым должно идти строчное наименование реквизита( или тупо название отбора), а потом значение
    СкладПостовалова = СоздатьОбъект("Справочник.Склады");
    СкладПостовалова.НайтиПоНаименованию("Постовалова 8",0);

    УстановитьОтбор("Склад",СкладПостовалова.ТекущийЭлемент());

    Виды документов прописывать не надо - если у них всех есть общий реквизит склад.
    Касательно справочника пользователей - добавь реквизит склад, в который будет проставляться с каким складом тот работает. Тогда будет выглядеть как

    УстановитьОтбор("Склад",Пользователь.Склад);
    А если склад пустой - то и отбора нету. То бишь для админа.
    разумеется переменная пользователь(глобальная) должна заполняться в ПриНачалеРаботыСистемы() значением справочника пользователи.
     
  9. IvanS

    IvanS Гость


    Ааааа.
    А можно будет сделать не 1 а 5 условий отбора на один и тот же реквизит, и как он поведет себя если такого реквизита в документе не будет ( например в расх кассовом ордере нет склада)


    Может правильнее будет создать какой-то доп справочник ( или добавить группу в справочник пользователей) и в ней дать возможность задавать необходимые реквизиты. ( мне нужны Склад, касса, Фирма, р/с)
    И в глобальном модуле получать эти значения.
     
  10. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Что значит на один и тот-же реквизит? Ты имеешь ввиду что тип значение реквизита неопределен? энто я не знаю.
    несколько отборов одновременно не пашут - только один, так что отобрать по пяти разным показателям энто мечта. Может с 1с++ и можно, я пока этим не занимался. Если реквизита нет выдаст сообщение об ошибке. Это тоже можно обойти использовав
    попытка
    исключение
    конецпопытки;

    Доп справочник не нужен - проще либо добавить группы, в них групповыми реквизитами прописать Склад, касса, Фирма, р/с, либо групп не делать,просто добавить эти реквизиты, и выходить на них типа Пользователь.Склад
     
  11. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    как он поведет себя если такого реквизита в документе не будет ( например в расх кассовом ордере нет склада)
    Ну уж в этом-то проблемы нет - можно для каждого документа проверять наличие реквизита
    типа такой функции
    Function AttrExist(AttrName,DocKind)
    var Attr;
    if (EmptyValue(DocKind) = 1) OR (EmptyValue(AttrName) = 1) then
    Return 0;
    endif;
    Attr = 0; InHead = "";
    for i = 1 to MetaData.Document(DocKind).HeadAttribute() do
    if TrimAll(MetaData.Document(DocKind).HeadAttribute(i).Identifier) = AttrName then
    Attr = i; InHead = "InHead";
    Break;
    endif;
    enddo;
    if Attr = 0 then
    for i = 1 to MetaData.Document(DocKind).TableAttribute() do
    if TrimAll(MetaData.Document(DocKind).TableAttribute(i).Identifier) = AttrName then
    Attr = i; InHead = "InTable";
    Break;
    endif;
    enddo
    endif;
    Return Attr
    EndFunction //Есть Реквизит в табличной части или в шапке
    //*******************************************
     
  12. IvanS

    IvanS Гость

    Видимо придется везде в документах вводить доп реквизит и п нему отбирать. Т.к. мне надо что бы отбирались реквизиты не по 1 складу а по 3-ем. и по н-ому коичеству касс :)


    эээээ, а откуда в 1с ангийские слова :( Это 1с++ что ли?
    Если да, то что надо что бы и у меня такое чудо заработало?
     
  13. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Это чудо надо скопировать и вставить без изменений в нужное место - само заработает - 1С среда двуязычная, это меня только здесь все поливают за английские тексты
     
  14. IvanS

    IvanS Гость

    Прикольно. А на каком языке тогда писать предпочтительнее? или без разницы?
     
  15. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Тогда проще плюнуть на журналы - сделать обработку с ТЗ на форме в которую будут выгружаться нужные тебе документы по запросу. А на тз прописать всякие открытия документов, ввод новых, показ проведенных/непроведенных/помеченых на удаление/после ТА. Тогда УстановитьОтбор тебе нафиг не нужен - нужны запросы.
     
  16. IvanS

    IvanS Гость


    Я уже думал об этом, но моих знанию вряд ли хватит на такое.
    ТЗ что такое? Я хотел сделать отчет по виду напоминающий журнал, но в котором при открытии можно будет установить определенную группировку.

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

    p.s. Уже башка начинает пухнуть, ну и задачку дали :) Я ж блин не программер, а на программера у них денег нету :(

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

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    ТЗ - это таблица значений. А насчет фирм - это не состыкуется с одновременным отбором по нескольким параметрам. Группировка по справочникам фирм может сработать.
     
  18. IvanS

    IvanS Гость

    ТЗ ? хм, посмотрю сегодня в ЖКК. Просто установкой кучи фирм я как раз избавлюсь от необходимости множественного отбора. Только по фирме отбирать и все.
    Группировка вроде сработала, вопрос не приведет ли это к каким-нибудь непредсказуемым последствиям?......
     
  19. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    выкати свои данные в ТЗ и поставь кнопки, которые обеспечат любые сортировки и группировки, а на таблицу значений - процедурку типа
    Procedure WhenClick()
    // DocT - таблица значений, в которой есть колонка "Document"
    if DocT.CurrentLine() = 0 then
    Return;
    endif;
    if DocT.CurrentColumn() = "Document" then
    OpenForm(DocT.Document)
    endif
    EndProcedure
    //**********************************************************
    и будет работать примерно как журнал
    PS. А писать можно на обоих языках, даже такая конструкция сработает
    if ...
    КонецЕсли
    и т.п.
     
  20. dimetra2008

    dimetra2008 Member

    Регистрация:
    3 дек 2011
    Сообщения:
    6
    Симпатии:
    0
Загрузка...

Поделиться этой страницей