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

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

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

Автор: kostya77 21.06.23, 6:45

Добрый день. Подскажите, как организовать в обычном журнале документов отбор по автору документа? Нужно, чтобы пользователь, вошедший в систему, видел только свои документы и не имел доступа к чужим документам

Автор: denis84 21.06.23, 7:23

kostya77 @ Сегодня, 7:45 * ,
Добрый день! Я делал по другому. Создавал общий журнал например "ПриходныеНакладныеСОтбором", куда включены все виды документов. А потом прописывал отбор по автору или контрагенту. При открытии журнала сразу устанавливаем значение отбора по автору с запретом изменения этого значения.

Автор: kostya77 21.06.23, 7:43

denis84 @ Сегодня, 8:23 * ,
А как сделать, так. чтобы в журнал попали документы одного вида?

Автор: denis84 21.06.23, 8:16

kostya77 @ Сегодня, 8:43 * ,

// Описание переменных 
Перем СписокДействий;  // Список действий по документу  
Перем ИмяФормы;
Перем КонтрагентДляОтбора,ФирмаДляОтбора,ВидДокументаДляОтбора,АвторДляОтбора,ТипДляОтбора;
Перем ЗначениеВВидеСтроки;

//******************************************************************************
Процедура ПриВыбореКонтрагента()  
    
    Если КонтрагентДляОтбора.Выбран()>0 Тогда
        УстановитьОтбор("КонтрагентПН", КонтрагентДляОтбора);
        КонтрагентДляОтбора = КонтрагентДляОтбора.ТекущийЭлемент();  
    Иначе
        УстановитьОтбор("");
        УстановитьОтбор("ПриходнаяНакладная");
    КонецЕсли;
    
КонецПроцедуры

//******************************************************************************
Процедура ПриВыбореАвтора()  
    
    Если АвторДляОтбора.Выбран()>0 Тогда
        УстановитьОтбор("АвторПН", АвторДляОтбора);
        АвторДляОтбора = АвторДляОтбора.ТекущийЭлемент();
    Иначе
        УстановитьОтбор("");
        УстановитьОтбор("ПриходнаяНакладная");
    КонецЕсли;
    
КонецПроцедуры

//******************************************************************************
Процедура ПриВыбореФирмы()  
    
    Если ФирмаДляОтбора.Выбран()>0 Тогда
        УстановитьОтбор("ФирмаПН", ФирмаДляОтбора);
        ФирмаДляОтбора = ФирмаДляОтбора.ТекущийЭлемент();
    Иначе
        УстановитьОтбор("");
        УстановитьОтбор("ПриходнаяНакладная");
    КонецЕсли;
    
КонецПроцедуры

//******************************************************************************
//
Процедура ПриУстановкеБыстрогоОтбора()
    Перем ТекущДок;                          
    
    ТекущДок = ТекущийДокумент;
    
    Если ВидОтбора.ТекущаяСтрока() = 5 Тогда    // нет быстрого отбора
            
        ЗначениеВВидеСтроки = "";
        
        Форма.кнЗначение.Доступность(0);
        УстановитьОтбор("");
        УстановитьОтбор("ПриходнаяНакладная");
        ВидыОтбора("*");

    Иначе        // есть быстрый отбор
        
        Форма.кнЗначение.Доступность(1);
        
        Если ВидОтбора.ТекущаяСтрока() = 1 Тогда
            ПриВыбореКонтрагента();
            ЗначениеВВидеСтроки=Строка(КонтрагентДляОтбора);
            
        ИначеЕсли ВидОтбора.ТекущаяСтрока() = 2 Тогда
            ПриВыбореАвтора();                          
            ЗначениеВВидеСтроки=Строка(АвторДляОтбора);
            
        ИначеЕсли ВидОтбора.ТекущаяСтрока() = 3 Тогда
            ПриВыбореФирмы();
            ЗначениеВВидеСтроки=Строка(ФирмаДляОтбора);
        Иначе
            ЗначениеВВидеСтроки = "";
            УстановитьОтбор("");
            УстановитьОтбор("ПриходнаяНакладная");
        КонецЕсли;
        
        ВидыОтбора("");
        
    КонецЕсли;
    
    Попытка
        АктивизироватьОбъект(ТекущДок);
    Исключение    
    КонецПопытки;    
        
КонецПроцедуры // ПриУстановкеБыстрогоОтбора


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

    ИначеЕсли ВидОтбора.ТекущаяСтрока() = 2 Тогда
        СтароеЗначение=АвторДляОтбора;
        ВыбЗначение = СоздатьОбъект("Справочник.Пользователи");
        Если ВыбЗначение.Выбрать("Выбор автора","Форма списка")=1 Тогда
            АвторДляОтбора = ВыбЗначение;
            Если ВыбЗначение<>СтароеЗначение Тогда
                ЗначениеИзменилось=1;    
            КонецЕсли;    
        КонецЕсли;    
    
    ИначеЕсли ВидОтбора.ТекущаяСтрока() = 3 Тогда
        СтароеЗначение=ФирмаДляОтбора;
        ВыбЗначение = СоздатьОбъект("Справочник.Фирмы");
        Если ВыбЗначение.Выбрать("Выбор фирмы","Форма списка")=1 Тогда
            ФирмаДляОтбора = ВыбЗначение;
            Если ВыбЗначение<>СтароеЗначение Тогда
                ЗначениеИзменилось=1;    
            КонецЕсли;    
        КонецЕсли;    
        
    КонецЕсли;
            
    Если ЗначениеИзменилось=1 Тогда
        ПриУстановкеБыстрогоОтбора();
    КонецЕсли;    

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

//******************************************************************************
Процедура ПриОбычномОткрытииЖурнала()
    
    // определение контрагента для отбора
    КонтрагентДляОтбора = глВосстановитьЗначение(ИмяФормы, "КонтрагентОтбораЖурнала", ПолучитьПустоеЗначение("Справочник.Контрагенты"));
    // определение фирмы для отбора
    ФирмаДляОтбора = глВосстановитьЗначение(ИмяФормы, "ФирмаОтбораЖурнала", ПолучитьПустоеЗначение("Справочник.Фирмы"));
    // определение автора документа для отбора
    АвторДляОтбора = глВосстановитьЗначение(ИмяФормы, "АвторДляОтбораЖурнала", ПолучитьПустоеЗначение("Справочник.Пользователи"));
КонецПроцедуры
//******************************************************************************
Процедура ПриОткрытии()
    УстановитьОтбор("ПриходнаяНакладная");
    // Определение был ли быстрый отбор
    ТекСтр = глВосстановитьЗначение(ИмяФормы, "ВидОтбораЖурнала", 1);
    ВидОтбора.ТекущаяСтрока(ТекСтр);
    // будем отслеживать только реальные изменения этих реквизитов
    Форма.ВидОтбора.ВыполнятьФормулуТолькоПриИзменении(1);
КонецПроцедуры

//******************************************************************************
Процедура ПриЗакрытии() // Предопределенная процедура
    глСохранитьЗначение(ИмяФормы,"КонтрагентОтбораЖурнала",КонтрагентДляОтбора);
    глСохранитьЗначение(ИмяФормы,"ФирмаОтбораЖурнала",ФирмаДляОтбора);
    глСохранитьЗначение(ИмяФормы,"АвторДляОтбораЖурнала",АвторДляОтбора);
    глСохранитьЗначение(ИмяФормы,"ТипДляОтбораЖурнала",ТипДляОтбора);          
КонецПроцедуры // ПриЗакрытии

//*****************************************************************************
//Инициализирум список действий по кнопке "Действия"
СписокДействий = глПолучитьСписокДействий("
    |СтруктураПодчиненности,
    |ДвиженияДокумента,
    |ВводНалоговых,
    |ВводНаОсновании,
    |Подчиненные");
ВидОтбора.ДобавитьЗначение("по контрагенту");
ВидОтбора.ДобавитьЗначение("по автору");
ВидОтбора.ДобавитьЗначение("по фирме");
ВидОтбора.ДобавитьЗначение("отсутствует");

КонтрагентДляОтбора = СоздатьОбъект("Справочник.Контрагенты");  
ФирмаДляОтбора = СоздатьОбъект("Справочник.Фирмы");
АвторДляОтбора = СоздатьОбъект("Справочник.Пользователи");

ЗначениеВВидеСтроки = "";

ИмяФормы = "Журнал.ПриходныеНакладные.Форма.ФормаСписка";

Автор: kostya77 21.06.23, 8:23

denis84 @ Сегодня, 9:16 * ,
Это получается нужно для каждого докумена создавать графу отбора?

Автор: denis84 21.06.23, 8:27

kostya77 @ Сегодня, 9:23 * ,
я делал для каждого вида документа свой журнал с отбором. Это было моё решение, а так вам самим решать как реализовать.

Автор: kostya77 21.06.23, 8:37

denis84 @ Сегодня, 9:27 * ,
я понял. Спасибо

Автор: denis84 21.06.23, 14:57

kostya77 @ Сегодня, 9:37 * ,
для "спасибо", есть специальная кнопка

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