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

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

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

Автор: Constantus 15.06.17, 14:30

Приветствую, форумчане!
"Управление торговлей 10.3", (Моби-С 5.5). "ABBYY Ukraine", 2003-2014 (2.3.20.1)

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

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


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

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


Автор: DrLivsi 15.06.17, 14:47

Constantus @ Сегодня, 15:30 * ,

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

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

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


Перед установкой нужно еще проверить не установлен ли уже отбор.

Автор: Constantus 15.06.17, 14:54

DrLivsi @ Сегодня, 17:40 * ,

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

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



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

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


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

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

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


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

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

Автор: Vidocq05 15.06.17, 15:21

Constantus @ Сегодня, 15:54 * ,
Например
На таб.поле повесить событие "ПередОкончаниемРедакимрования"
Проверять редактируемые данные (и если нужно - откуда вызывается форма) и если все сходится уходить в Отказ

Автор: Flexy 15.06.17, 15:59

Разберитесь с RLS. То, что вы сейчас пытаетесь сделать это костыли. Отбор тут не при чем.
Рулите доступность колонки вкл / выкл отбор или ловите событие ПриИзмененииФлажка в форме настроек универсального отчета.

Автор: DrLivsi 15.06.17, 16:14

Constantus @ Сегодня, 15:54 * ,

Процедура СформироватьОтчет вызывается каждый раз при нажатии на кнопку "Сформировать" и что-бы пользователь с этой галочкой не делал в отборе, она все равно станет в истину перед формированием отчета:

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

Автор: sava1 15.06.17, 16:24

УниверсальнійОтчет надо курочить - Форму настройки - передавать параметры, а в форме анализировать, запрещать отбор.

Автор: Flexy 15.06.17, 16:26

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

Если юзер в видах сравнения выставит не равно и поле склад будет пустым, то сформирует по всем складам.

Автор: Vofka 15.06.17, 16:26

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

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

Автор: Constantus 15.06.17, 16:34

DrLivsi @ Сегодня, 19:14 * ,


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

Vofka @ Сегодня, 19:26 * ,


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

Flexy @ Сегодня, 19:26 * ,


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

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

Автор: DrLivsi 15.06.17, 16:35

Flexy @ Сегодня, 16:59 * ,
Я же написал выше код, там не только галка устанавливается, а и вид сравнения и значение.
Только перед этим кодом нужно делать проверку, что-бы не задваивать.

Автор: Constantus 15.06.17, 16:39

Цитата(Flexy @ 15.06.17, 19:26) *
Если юзер в видах сравнения выставит не равно и поле склад будет пустым, то сформирует по всем складам.



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

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



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

Действительно задваиваются, как проверить?

Автор: Flexy 15.06.17, 16:39

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

Я уже писал давно решение. По моему, кстати даже для этого автора. Там решение 1 РС + 1 запрос. Все. Конечно, если есть желание переписать овер дофига форм, то вперед smile.gif

Автор: Constantus 15.06.17, 16:43

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



А есть ссылка на это решение? icon_beer17.gif

Автор: Flexy 15.06.17, 16:45

Цитата(Constantus @ 15.06.17, 16:34) *
При данном раскладе (коде) при нажатии "Сформировать" отбор становится "Равно"

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

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

Автор: Constantus 03.07.17, 11:14

Продолжаем диалог.

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

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


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

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


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