Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: СКД отбор по текущему пользователю
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.1 (8.0)
Log1c
Вопрос:
Как организовать отбор по текущему пользователю?
&ТекущийПользователь - не получается

Что делаю:
Конфигуратор - Файл - Новый - Внешний Отчет: Открыть схему компоновки данных.
В основной схеме компоновки данных заполняю вкладки Набор данных и Ресурсы.
Перехожу на вкладку Настройка: добавляю группировку.
В Настройках перехожу на вкладку отбор и добавляю:
Левое значение Ответственный
Вид сравнения Равно
Правое значение &ТекущийПользователь

Сохраняю, выполняю и вижу что выражение Отбор берет в кавычки Ответственный = "&ТекущийПользователь"
Естественно в такой отбор не попадает никаких данных.

Дополнительный вопрос: как в отборе использовать стандартные функции 1с Прав(), Лев() и т. д.



Чем пользовался, СКД
Теория необходимо зарегистрироваться для просмотра ссылки
Практика необходимо зарегистрироваться для просмотра ссылки
Vofka
Log1c, так нельзя.

Нельзя в отбор запихнуть параметр. Отбор задавайте в режиме предприятия. Отбор в режиме конфигуратора возможен только по предопределённым элементам.
Log1c
Цитата(Vofka @ 21.05.11, 13:37) необходимо зарегистрироваться для просмотра ссылки
Log1c, так нельзя.

Нельзя в отбор запихнуть параметр. Отбор задавайте в режиме предприятия. Отбор в режиме конфигуратора возможен только по предопределённым элементам.


Понятно, тогда не знаю как тогда реализовать такую задачу:

Есть Пользователь, я ему предоставляю доступ к отчету, выше я описывал как его создаю. Но в этот отчет не должны попадать документы в которых ответственный не этот пользователь.
logist
    Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ответственный");
    Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
        Отбор.Использование = Истина;
        Отбор.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; // это что бы пользователь не видел этот отбор
        Отбор.ПравоеЗначение   = ПараметрыСеанса.ТекущийПользователь;

попробуйте, может будет работать, или по копайте в эту сторону.
Vofka
Согласен с Логистом. Вариант для вас - программно установить нужный отбор.
Log1c
Цитата(logist @ 21.05.11, 17:54) необходимо зарегистрироваться для просмотра ссылки
    Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ответственный");
    Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
        Отбор.Использование = Истина;
        Отбор.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; // это что бы пользователь не видел этот отбор
        Отбор.ПравоеЗначение   = ПараметрыСеанса.ТекущийПользователь;

попробуйте, может будет работать, или по копайте в эту сторону.


Уже копал в эту сторону, вот что получилось...

Как делал:
Взял отчет который получил с помощью СКД. Добавил этот отчет в конфигурацию в отчеты.
Открыл модуль объекта и попытался прописать там вот этот код:
Процедура ПриОткрытии()
   ПараметрСКД = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Ответственный");
   ПараметрСКД.Использование = Истина;
   ПараметрСКД.Значение  = ПараметрыСеанса.ТекущийПользователь;
КонецПроцедуры

Запустил посмотрел что событие ПриОткрытии() вообще не сработало. Я так понял оно только для форм а не для СКД.

Вопрос:
Куда писать код который я привел выше?
yuritch
Создать в сгенеренном отчете основную форму и в нее писать событие. Я так делал (именно для установки параметров) - работает.
Log1c
Цитата(yuritch @ 23.05.11, 9:31) необходимо зарегистрироваться для просмотра ссылки
Создать в сгенеренном отчете основную форму и в нее писать событие. Я так делал (именно для установки параметров) - работает.


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


Цитата(Vofka @ 21.05.11, 18:32) необходимо зарегистрироваться для просмотра ссылки
Согласен с Логистом. Вариант для вас - программно установить нужный отбор.

Делаю, придложеный вариант:
   ПараметрСКД = КомпоновщикНастроек.Настройки.ПараметрыДанных.
                                 Элементы.Найти("Ответственный")
   ПараметрСКД.Использование = Истина;
   ПараметрСКД.Значение  = Значение;

не работает в ПараметрСКД ничего не пишет и вываливается на строке ПараметрСКД.Использование = Истина; пишет Значение не является значение объектного типа (Использование)

Вариант Логиста:
       Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ответственный");
       Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
        Отбор.Использование = Истина;
        Отбор.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; // это что бы пользователь не видел этот отбор
        Отбор.ПравоеЗначение   = ПараметрыСеанса.ТекущийПользователь;

падает не проходит компиляцию пишет переменная не определена "Отбор"
Vofka
Цитата
падает не проходит компиляцию пишет переменная не определена "Отбор"

Конечно не определена. Покажите строчку, где вы её определили.

Может это поможет необходимо зарегистрироваться для просмотра ссылки
Log1c
Цитата(Vofka @ 23.05.11, 19:58) необходимо зарегистрироваться для просмотра ссылки
Конечно не определена. Покажите строчку, где вы её определили.

Может это поможет необходимо зарегистрироваться для просмотра ссылки


Отбор = КомпоновщикНастроек.Настройки.Отбор - так мне понятней.

Код рабочий, т. е. ошибки не выдает но и не отбирает =)
Скопировал код из статьи, запустил, прошелся отладчиком.

Для каждого ЭлементОтбора Из Отбор.Элементы Цикл
//...
//вот в этот цикл у меня никогда не заходит
КонецЦикла;


вопрос остался один, код предложенный в статье под 8.1 должен работать?



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