Версия для печати темы (https://pro1c.org.ua/index.php?s=c0e5e400128a09a37a7498fd876d530f&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. То, что вы сейчас пытаетесь сделать это костыли. Отбор тут не при чем.
Начинается
.
Конечно, нужно разобраться с RLS, переписать кучу мест, решая задачу "надо сделать так, чтобы Вася в этом отчете мог смотреть товары только по этому складу". Или в УТП изначально есть ограничения по складам? Если есть, то подскажите, как настроить.
Автор: 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 запрос. Все. Конечно, если есть желание переписать овер дофига форм, то вперед
Автор: Constantus 15.06.17, 16:43
Цитата(Flexy @ 15.06.17, 19:39)
Я уже писал давно решение. По моему, кстати даже для этого автора. Там решение 1 РС + 1 запрос. Все. Конечно, если есть желание переписать овер дофига форм, то вперед
А есть ссылка на это решение?
Автор: 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
https://pro1c.org.ua