Как наложить отбор по дате поверх пользовательского отбора?
Всем доброго времени суток! Есть Журнал документов (УТ 10.3, Кассовые документы). Нужно установить отбор по дате, при этом не нарушая работу пользовательского отбора. Т.е. пользователь может задавать любой период, но отображаться должны только документы не старше определённой даты. Я так понимаю, мне нужно в процедуре ЖурналДокументовСписокПриПолученииДанных как-то получить новый список доступных документов из того, на который уже наложен пользовательский отбор и подсунуть его вместо изначального? Только не соображу, как это сделать.
Подскажите, пожалуйста, как подменить список. Или может есть более правильный/простой способ решения этой задачи?
Процедура ЖурналДокументовСписокПриПолученииДанных(Элемент, ОформленияСтрок)
Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
Если ОформлениеСтроки.Дата >= Дата(2026, 7, 15) Тогда
// Тут что должно быть?
КонецЕсли;
КонецЦикла;
КонецПроцедуры
ПоказатьПодскажите, пожалуйста, как подменить список. Или может есть более правильный/простой способ решения этой задачи?
Найденные решения
Перем
ОбновлятьОтбор;
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
// Привязываем процедуру ОбновитьОтборПоСсылкам к измерению отбора
ПодключитьОбработчикИзмененияДанных("ДокументСписок.Отбор", "ОбновитьОтборПоСсылкам", Истина);
ОбновлятьОтбор = Истина;
ОбновитьОтборПоСсылкам();
КонецПроцедуры
Процедура ОбновитьОтборПоСсылкам(ИмяДанных = "")
Если Не ОбновлятьОтбор Тогда
Возврат;
КонецЕсли;
// Временно отключаем обновление чтобы не вызвать зацикливание при программном изменении отбора
ОбновлятьОтбор = Ложь;
ОтборСсылка = ДокументСписок.Отбор.Ссылка;
ОтборСсылка.Использование = Ложь;
ОтборДата = ДокументСписок.Отбор.Дата;
// Сохраняем пользовательский отбор по дате
ПараметрыОтбора = Новый Структура("ВидСравнения,Значение,ЗначениеПо,ЗначениеС,Использование");
ЗаполнитьЗначенияСвойств(ПараметрыОтбора, ОтборДата);
// Временно устанавливаем наш отбор по дате
ОтборДата.Использование = Истина;
ОтборДата.ВидСравнения = ВидСравнения.БольшеИлиРавно;
ОтборДата.Значение = '20260101';
// Получаем ссылки соответствующие всем отбора + наш отбор по Дате
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ДокументСписок);
МассивСсылок = Построитель.Результат.Выгрузить().ВыгрузитьКолонку("Ссылка");
// Восстанавливаем пользовательский отбор по дате
ЗаполнитьЗначенияСвойств(ОтборДата, ПараметрыОтбора);
ОтборСсылка.Использование = Истина;
ОтборСсылка.ВидСравнения = ВидСравнения.ВСписке;
ОтборСсылка.Значение.ЗагрузитьЗначения(МассивСсылок);
ОбновлятьОтбор = Истина;
КонецПроцедуры ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Процедура ПриОткрытии()
// Устанавливаем фиксированный отбор по дате
ЭлементыФормы.Список.Отбор.Дата.ВидСравнения = ВидСравнения.Равно;
ЭлементыФормы.Список.Отбор.Дата.Значение = НачалоДня(ТекущаяДата());
ЭлементыФормы.Список.Отбор.Дата.Использование = Истина;
ЭлементыФормы.Список.Отбор.Дата.Доступность = Ложь;
КонецПроцедуры Показать
(2) Это как? Покажите, пожалуйста, пример, если можно.
(3) Работает ровно до того момента, пока пользователь не изменит период отбора. Запрещать изменять период нельзя, т.к. пользователь должен иметь возможность задавать период, например, в один день, и этот день может попасть в доступный ему период. Так что не вариант, к сожалению.
(3) Работает ровно до того момента, пока пользователь не изменит период отбора. Запрещать изменять период нельзя, т.к. пользователь должен иметь возможность задавать период, например, в один день, и этот день может попасть в доступный ему период. Так что не вариант, к сожалению.
(4)
Что-то типа такого
Это как?
Что-то типа такого
ОтборСсылка = ДокументСписок.Отбор.Найти("Ссылка");
ОтборСсылка.Использование = Истина;
ОтборСсылка.ВидСравнения = ВидСравнения.ВСписке;
ОтборСсылка.Значение = ПолучитьНужныеДокументы();Перем
ОбновлятьОтбор;
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
// Привязываем процедуру ОбновитьОтборПоСсылкам к измерению отбора
ПодключитьОбработчикИзмененияДанных("ДокументСписок.Отбор", "ОбновитьОтборПоСсылкам", Истина);
ОбновлятьОтбор = Истина;
ОбновитьОтборПоСсылкам();
КонецПроцедуры
Процедура ОбновитьОтборПоСсылкам(ИмяДанных = "")
Если Не ОбновлятьОтбор Тогда
Возврат;
КонецЕсли;
// Временно отключаем обновление чтобы не вызвать зацикливание при программном изменении отбора
ОбновлятьОтбор = Ложь;
ОтборСсылка = ДокументСписок.Отбор.Ссылка;
ОтборСсылка.Использование = Ложь;
ОтборДата = ДокументСписок.Отбор.Дата;
// Сохраняем пользовательский отбор по дате
ПараметрыОтбора = Новый Структура("ВидСравнения,Значение,ЗначениеПо,ЗначениеС,Использование");
ЗаполнитьЗначенияСвойств(ПараметрыОтбора, ОтборДата);
// Временно устанавливаем наш отбор по дате
ОтборДата.Использование = Истина;
ОтборДата.ВидСравнения = ВидСравнения.БольшеИлиРавно;
ОтборДата.Значение = '20260101';
// Получаем ссылки соответствующие всем отбора + наш отбор по Дате
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ДокументСписок);
МассивСсылок = Построитель.Результат.Выгрузить().ВыгрузитьКолонку("Ссылка");
// Восстанавливаем пользовательский отбор по дате
ЗаполнитьЗначенияСвойств(ОтборДата, ПараметрыОтбора);
ОтборСсылка.Использование = Истина;
ОтборСсылка.ВидСравнения = ВидСравнения.ВСписке;
ОтборСсылка.Значение.ЗагрузитьЗначения(МассивСсылок);
ОбновлятьОтбор = Истина;
КонецПроцедуры Показать
Блин. Поторопилась радоваться. Теперь при добавлении документа через журнал выдаёт сообщение "Введённые данные не отображены в списке, так как не соответствуют отбору". Даже если перенести вызоа процедуры ОбновитьОтборПоСсылкам(); из ПередОткрытием() в ОбновлениеОтображения()
:(
:(
А, не, вроде можно!
В общем модуле:
В форме журнала:
Ещё раз всем спасибо!!!
В общем модуле:
Процедура УстановитьОграничениеПоДате(ДокументСписок, ДатаОграничения, ИмяПоляДата = "Дата", ИмяПоляСсылка = "Ссылка") Экспорт
ОтборСсылка = ДокументСписок.Отбор[ИмяПоляСсылка];
ОтборДата = ДокументСписок.Отбор[ИмяПоляДата];
// Отключаем наш технический отбор,
// чтобы он не участвовал в повторном построении списка.
ОтборСсылка.Использование = Ложь;
// Сохраняем пользовательский отбор по дате.
ПараметрыОтбора = Новый Структура("ВидСравнения,Значение,ЗначениеПо,ЗначениеС,Использование");
ЗаполнитьЗначенияСвойств(ПараметрыОтбора, ОтборДата);
Попытка
// Временно ставим системное ограничение.
ОтборДата.Использование = Истина;
ОтборДата.ВидСравнения = ВидСравнения.БольшеИлиРавно;
ОтборДата.Значение = ДатаОграничения;
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ДокументСписок);
МассивСсылок = Построитель.Результат.Выгрузить().ВыгрузитьКолонку(ИмяПоляСсылка);
Исключение
// Обязательно вернуть пользовательский отбор.
ЗаполнитьЗначенияСвойств(ОтборДата, ПараметрыОтбора);
ВызватьИсключение;
КонецПопытки;
// Восстанавливаем отбор пользователя.
ЗаполнитьЗначенияСвойств(ОтборДата, ПараметрыОтбора);
// Накладываем техническое ограничение по ссылкам.
ОтборСсылка.Использование = Истина;
ОтборСсылка.ВидСравнения = ВидСравнения.ВСписке;
ОтборСсылка.Значение.ЗагрузитьЗначения(МассивСсылок);
КонецПроцедуры
ПоказатьВ форме журнала:
Перем ОбновлятьОтбор;
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
// Вставить содержимое обработчика.
Если РольДоступна("ОграничениеПоДатеКассовыхДокументов") Тогда
// Привязываем процедуру ОбновитьОтборПоСсылкам к измерению отбора
ПодключитьОбработчикИзмененияДанных("ЖурналДокументовСписок.Отбор", "ОбновитьОтборПоСсылкам", Истина);
ОбновлятьОтбор = Истина;
ОбновитьОтборПоСсылкам();
КонецЕсли;
КонецПроцедуры
Процедура ОбновитьОтборПоСсылкам(ИмяДанных = "")
Если Не ОбновлятьОтбор Тогда
Возврат;
КонецЕсли;
ОбновлятьОтбор = Ложь;
Попытка
МодульДополнительныхФункцийИПроцедур.УстановитьОграничениеПоДате(ЖурналДокументовСписок, НачалоДня(Дата(2026,6,1)));
Исключение
ОбновлятьОтбор = Истина;
ВызватьИсключение;
КонецПопытки;
ОбновлятьОтбор = Истина;
КонецПроцедуры
Процедура ОбновлениеОтображения()
Если РольДоступна("ОграничениеПоДатеКассовыхДокументов") Тогда
ОбновитьОтборПоСсылкам();
КонецЕсли;
КонецПроцедуры
Процедура ЖурналДокументовСписокОбработкаЗаписиНовогоОбъекта(Элемент, Объект, СтандартнаяОбработка)
Если РольДоступна("ОграничениеПоДатеКассовыхДокументов") Тогда
ОбновитьОтборПоСсылкам();
КонецЕсли;
КонецПроцедуры
ПоказатьЕщё раз всем спасибо!!!
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот