Вход | Регистрация
 

Отбор в динамическом списке

Отбор в динамическом списке
Я
   НоваяВолна
 
13.10.20 - 07:12
Доброго всем времени!
  База БП3, УФ. Создал внешнею обработку, которая вызывается из документа Требование-Накладная и заполняет табличную часть номенклатурой по определенному алгоритму, при этом проставляя выбранную скидку.
  Этот функционал заказчика устроил, но теперь хочет дополнения в виде отборов по номенклатуре. Т.е. если отбор не выбран, то обработка работает как есть. В случае отбора, заполнение ТЧ происходит только выбранной номенклатурой. Решение задачи вижу в том, чтобы выбранный пользователем отбор получить в ТЗ и передать ее в запрос, который заполняет ТЧ документа.
  Надо же, нарвался на простую проблему и ..... и затык. Для отбора на форме обработки создал динамический список с главной таблицей спр.Номенклатура, в списке установил отбор с условиями сравнения (Равно, не равно, в группе.... и т.д.), отбор по умолчанию отключен. Вывел все это на форму. Но при выборе отбора самого отбора не происходит. Вижу это по основной таблице, которую тоже вывел на форму для отладки.
   Гуглил и долго, нашел даже пошаговые инструкции, согласно которым я все делаю правильно.... Однако ошибка в чем то есть. Подскажите плиз
   НоваяВолна
 
1 - 13.10.20 - 07:55
где можно посмотреть реализацию?
   НоваяВолна
 
2 - 13.10.20 - 08:48
up
   Волшебник
 
3 - 13.10.20 - 08:50
Требование-накладная со скидкой, отбор отбора... Весело у вас там
   НоваяВолна
 
4 - 13.10.20 - 09:32
(3) Не отбор отбора, а замена стандартного отбора обработки на выбор пользователя
   Андроны едут
 
5 - 13.10.20 - 09:45
Вам нужно получить исполняемую схему компоновки данных с вашими отборами, к которой подцепить набор данных вашего запроса. После чего установить связи этих наборах по номенклатуре и другим ключам, а дальше по стандартной схеме - компоновщик настроек, процессор компоновки, процессор вывода...
   НоваяВолна
 
6 - 13.10.20 - 10:41
(5) да я не могу в пользовательском режиме получить отбор
   Андроны едут
 
7 - 13.10.20 - 10:51
(6) в каком пользовательском режиме? У вас же обработка. В ней и получайте.
   НоваяВолна
 
8 - 13.10.20 - 11:41
(7) Хорошо, получил отбор, вывел его в ТЗ 

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

Но структура ТЗ состоит из индексов и колонок. Мне нужны ссылки на отобранную номенклатуру, как получить?
   Андроны едут
 
9 - 13.10.20 - 12:06
(8)  как-то так:
//Получаем исполняемую схему отобранной номенклатуры

        СхемаКомпоновкиДанных = СериализаторXDTO.ПрочитатьXDTO(СериализаторXDTO.ЗаписатьXDTO(Элементы.НоменклатураОтбор.ПолучитьИсполняемуюСхемуКомпоновкиДанных()));

// добавляем набор вашего исходного запроса

    НаборДанныхЗапрос = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
    НаборДанныхЗапрос.Имя = "МойИсходныйЗапрос"; 
    НаборДанныхЗапрос.ИсточникДанных = "ИсточникДанных";
    
// устанавливаем связи

    СвязиНаборов = СхемаКомпоновкиДанных.СвязиНаборовДанных;

        Связь = СвязиНаборов.Добавить();

    Связь.НаборДанныхИсточник = "НаборДанныхНоменклатураОтбор";
    Связь.НаборДанныхПриемник = "НаборДанныхЗапрос";
    Связь.ВыражениеИсточник = "Номенклатура";
    Связь.ВыражениеПриемник = "Номенклатура";

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.