Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Отчет по товарам на складах: заблокировать возможность изменения отбора по складам
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
Constantus
Приветствую, форумчане!
"Управление торговлей 10.3", (Моби-С 5.5). "ABBYY Ukraine", 2003-2014 (2.3.20.1)

Имеется ведомость по товарам на складах. Отчет сформирован на база универсального отчета. В первоначальных настройках стоит:

УниверсальныйОтчет.ДобавитьОтбор("Склад",Истина);


В результате на форме отчета проявляется возможность отбора по складам. Также стоит в начале галочка, которая регулирует применение по отбору.
В случае отсутствия нажатия галочки, отбор проходит по всем складам...

Как можно заморозить эту галочку, чтобы Пользователь не мог изменять эту галочку, чтобы она всегда была активна?

DrLivsi
Constantus @ Сегодня, 15:30 необходимо зарегистрироваться для просмотра ссылки ,

Я делаю в процедуре СформироватьОтчет()

Процедура СформироватьОтчет(ТабличныйДокумент) Экспорт
    
    УниверсальныйОтчет.ПостроительОтчета.Отбор.Добавить("Склад", "Склад", "Склад");
    УниверсальныйОтчет.ПостроительОтчета.Отбор.Склад.Использование = Истина;
    УниверсальныйОтчет.ПостроительОтчета.Отбор.Склад.Видсравнения = ВидСравнения.Равно;
    УниверсальныйОтчет.ПостроительОтчета.Отбор.Склад.Значение      = Склад;

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


Перед установкой нужно еще проверить не установлен ли уже отбор.
Constantus
DrLivsi @ Сегодня, 17:40 необходимо зарегистрироваться для просмотра ссылки ,
Цитата(DrLivsi @ 15.06.17, 17:40) необходимо зарегистрироваться для просмотра ссылки
Процедура СформироватьОтчет(ТабличныйДокумент) Экспорт
    
    УниверсальныйОтчет.ПостроительОтчета.Отбор.Добавить("Склад", "Склад", "Склад");
    УниверсальныйОтчет.ПостроительОтчета.Отбор.Склад.Использование = Истина;
    УниверсальныйОтчет.ПостроительОтчета.Отбор.Склад.Видсравнения = ВидСравнения.Равно;
    УниверсальныйОтчет.ПостроительОтчета.Отбор.Склад.Значение      = Склад;

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



Возможно я не правильно объяснил.
УниверсальныйОтчет.ПостроительОтчета.Отбор.Склад.Использование = Истина;

Активирует галочку применения отбора по данному параметру.
Достаточно применить
УниверсальныйОтчет.ДобавитьОтбор("Склад",Истина);


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

Типа как я делал на отбор на список справочника:

    ЭтаФорма.Отбор.Наименование.Использование=Истина;
    ЭлементыФормы.СправочникСписок.Значение.Отбор.Наименование.ВидСравнения = ВидСравнения.ВСписке;
    ЭлементыФормы.СправочникСписок.НастройкаОтбора.Наименование.Доступность = Ложь;
    ЭтаФорма.Отбор.Наименование.Значение = СписокДокументов;


Т.е. пользователь мог наслаждаться только "предопределенным" списком и не мог отменить применения фильтра по Наименованию...

Вот и спрашивается, как можно заблокировать доступность к изменению этой галки?
Vidocq05
Constantus @ Сегодня, 15:54 необходимо зарегистрироваться для просмотра ссылки ,
Например
На таб.поле повесить событие "ПередОкончаниемРедакимрования"
Проверять редактируемые данные (и если нужно - откуда вызывается форма) и если все сходится уходить в Отказ
Flexy
Разберитесь с RLS. То, что вы сейчас пытаетесь сделать это костыли. Отбор тут не при чем.
Рулите доступность колонки вкл / выкл отбор или ловите событие ПриИзмененииФлажка в форме настроек универсального отчета.
DrLivsi
Constantus @ Сегодня, 15:54 необходимо зарегистрироваться для просмотра ссылки ,

Процедура СформироватьОтчет вызывается каждый раз при нажатии на кнопку "Сформировать" и что-бы пользователь с этой галочкой не делал в отборе, она все равно станет в истину перед формированием отчета:
УниверсальныйОтчет.ПостроительОтчета.Отбор.Склад.Использование = Истина;
sava1
УниверсальнійОтчет надо курочить - Форму настройки - передавать параметры, а в форме анализировать, запрещать отбор.
Flexy
Цитата(DrLivsi @ 15.06.17, 16:14) необходимо зарегистрироваться для просмотра ссылки
Процедура СформироватьОтчет вызывается каждый раз при нажатии на кнопку "Сформировать" и что-бы пользователь с этой галочкой не делал в отборе, она все равно станет в истину перед формированием отчета:
УниверсальныйОтчет.ПостроительОтчета.Отбор.Склад.Использование = Истина;

Если юзер в видах сравнения выставит не равно и поле склад будет пустым, то сформирует по всем складам.
Vofka
Цитата(Flexy @ 15.06.17, 16:59) необходимо зарегистрироваться для просмотра ссылки
Разберитесь с RLS. То, что вы сейчас пытаетесь сделать это костыли. Отбор тут не при чем.

Начинается faceoff.gif .
Конечно, нужно разобраться с RLS, переписать кучу мест, решая задачу "надо сделать так, чтобы Вася в этом отчете мог смотреть товары только по этому складу". Или в УТП изначально есть ограничения по складам? Если есть, то подскажите, как настроить.
Constantus
DrLivsi @ Сегодня, 19:14 необходимо зарегистрироваться для просмотра ссылки ,


Благодарю... не правильно первоначально использовал подсказку... Вроде сработало...

Vofka @ Сегодня, 19:26 необходимо зарегистрироваться для просмотра ссылки ,


Да уж... РЛС та еще штука... У меня есть по умолчанию только Организация и Контрагенты... В УТ для Казахстана есть побольше настроек, там в РЛС стоят и склады и кассы... Но моя попытка настроить роли под новые ограничения чуть катастрофой не обернулась...

Flexy @ Сегодня, 19:26 необходимо зарегистрироваться для просмотра ссылки ,


При данном раскладе (коде) при нажатии "Сформировать" отбор становится "Равно"

ЭлементыФормы.СправочникСписок.Значение.Отбор.Наименование.ВидСравнения = ВидСравнения.ВСписке;
DrLivsi
Flexy @ Сегодня, 16:59 необходимо зарегистрироваться для просмотра ссылки ,
Я же написал выше код, там не только галка устанавливается, а и вид сравнения и значение.
Только перед этим кодом нужно делать проверку, что-бы не задваивать.
Constantus
Цитата(Flexy @ 15.06.17, 19:26) необходимо зарегистрироваться для просмотра ссылки
Если юзер в видах сравнения выставит не равно и поле склад будет пустым, то сформирует по всем складам.



Да... Вы правы...

Цитата(DrLivsi @ 15.06.17, 19:35) необходимо зарегистрироваться для просмотра ссылки
Я же написал выше код, там не только галка устанавливается, а и вид сравнения и значение.
Только перед этим кодом нужно делать проверку, что-бы не задваивать.



Если отказаться от вида сравнения, что правильно в идеале, то офшоры открываются...

Действительно задваиваются, как проверить?
Flexy
Цитата(Vofka @ 15.06.17, 16:26) необходимо зарегистрироваться для просмотра ссылки
Или в УТП изначально есть ограничения по складам?

Я уже писал давно решение. По моему, кстати даже для этого автора. Там решение 1 РС + 1 запрос. Все. Конечно, если есть желание переписать овер дофига форм, то вперед smile.gif
Constantus
Цитата(Flexy @ 15.06.17, 19:39) необходимо зарегистрироваться для просмотра ссылки
Я уже писал давно решение. По моему, кстати даже для этого автора. Там решение 1 РС + 1 запрос. Все. Конечно, если есть желание переписать овер дофига форм, то вперед



А есть ссылка на это решение? icon_beer17.gif
Flexy
Цитата(Constantus @ 15.06.17, 16:34) необходимо зарегистрироваться для просмотра ссылки
При данном раскладе (коде) при нажатии "Сформировать" отбор становится "Равно"

ЭлементыФормы.СправочникСписок.Значение.Отбор.Наименование.ВидСравнения = ВидСравнения.ВСписке;

Это не решает задачу. Т.к. юзер должен сам выбирать только доступные ему склады. Ваш метод перетрет все, что юзер навыбирал.
Или чистить список перед формированием отчета с проверкой на доступные склады и оставлять только доступные склады? Можно...но имхо такой велосипед.
Constantus
Продолжаем диалог.

В универсальном отчете вставил код

Процедура ТабличноеПолеОтбор1ВидСравненияНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
    // Вставить содержимое обработчика.
    
        Элемент.СписокВыбора.Очистить();
    
    СписокВыбора  = Элемент.СписокВыбора;
    СписокВыбора.Добавить(ВидСравнения.Равно);
    СписокВыбора.Добавить(ВидСравнения.ВСписке);
    СписокВыбора.Добавить(ВидСравнения.ВСпискеПоИерархии);
    
КонецПроцедуры


Действительно, при открытии формы настройки Вид сравнения установился согласно указанному в коде списка. Т.е. проблема "Не" как бы решилась. Но...
Когда я в отбор добавил другое поле отбора по кол-ву, стоимости или другим именно числовым значениям, то список соответственно остался "моим", т.е. там нету отборов вида сравнения, характерных для числовых значений (Больше, меньше, больше или равно, по периоду и т.д.). Значит этот список "ВидСравнения" формируется где-то еще и меняется в зависимости от типа поля отбора.

Кто-нить знает где найти формирование списка "ВидаСравнения" при открытии формы настроек универсального значения? Или может есть смысл проверить тип поля отбора и в зависимости от типа выводить нужный список? Если да, то как?

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.