Не добавляется программно Отбор в КомпоновщикСКД
Всем привет.
Форма обработки. на Форме КомпоновщикНастроекСКД-Настройки-Отбор.
В команде, СхемаЗапроса формируется полностью программно.
В Схему добавлен программно "Отбор", и он появляется на форме в Отборе КомпоновщикаНастроекСКД
Но, поле отбора "Номенклатура" - с перечеркнутым красным крестом, и если попытаться выбрать значение Номенклатуры - дает только Тип - Строка, Число.
Что я нет так сделал с формированием Отбора в СхемеКомпоновки?
Форма обработки. на Форме КомпоновщикНастроекСКД-Настройки-Отбор.
В команде, СхемаЗапроса формируется полностью программно.
В Схему добавлен программно "Отбор", и он появляется на форме в Отборе КомпоновщикаНастроекСКД
Но, поле отбора "Номенклатура" - с перечеркнутым красным крестом, и если попытаться выбрать значение Номенклатуры - дает только Тип - Строка, Число.
Что я нет так сделал с формированием Отбора в СхемеКомпоновки?
СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных;
ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить();
ИсточникДанных.Имя = "ИсточникДанных1";
ИсточникДанных.ТипИсточникаДанных = "Local";
НаборДанныхОбъектСхемыКомпоновкиДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
НаборДанныхОбъектСхемыКомпоновкиДанных.Имя = "НаборДанных1";
НаборДанныхОбъектСхемыКомпоновкиДанных.ИсточникДанных = "ИсточникДанных1";
НаборДанныхОбъектСхемыКомпоновкиДанных.Запрос = ТекстЗапроса();
ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
ПолеНабораДанныхСхемыКомпоновкиДанных.Поле = "Номенклатура";
ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным = "Номенклатура";
ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок = "Номенклатура";
ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
ПолеНабораДанныхСхемыКомпоновкиДанных.Поле = "Склад";
ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным = "Склад";
ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок = "Склад";
Отбор = СхемаКомпоновкиДанных.НастройкиПоУмолчанию.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.Использование = Истина;
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номенклатура");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ПараметрСКД = СхемаКомпоновкиДанных.Параметры.Добавить();
ПараметрСКД.Использование = ИспользованиеПараметраКомпоновкиДанных.Авто;
ПараметрСКД.Имя = "Период";
ПараметрСКД.Заголовок = "Период";
ПараметрСКД = СхемаКомпоновкиДанных.Параметры.Добавить();
ПараметрСКД.Использование = ИспользованиеПараметраКомпоновкиДанных.Авто;
ПараметрСКД.Имя = "НачалоПериода";
ПараметрСКД.Заголовок = "Начало периода";
ПараметрСКД = СхемаКомпоновкиДанных.Параметры.Добавить();
ПараметрСКД.Использование = ИспользованиеПараметраКомпоновкиДанных.Авто;
ПараметрСКД.Имя = "КонецПериодаПериода";
ПараметрСКД.Заголовок = "Конец периода";
КомпоновщикНастроекСКД.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
ПоказатьПрикрепленные файлы:
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Это значит что компоновщик настроек считает, что его нет в доступных полях Источников данных. У полей данных кроме собственно Имени и Пути к данным и заголовков есть еще свойства по доступам и роли.
Компоновщик инициализируется в общем случае схемой СКД через промежуточный объект ИсточникДоступныхНастроекКомпоновкиДанных. Схема содержит поля и описание доступа этих полей.
Изменили схему - переинициируйте компоновщик, перезагружайте настройки.
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема));
Компоновщик инициализируется в общем случае схемой СКД через промежуточный объект ИсточникДоступныхНастроекКомпоновкиДанных. Схема содержит поля и описание доступа этих полей.
Изменили схему - переинициируйте компоновщик, перезагружайте настройки.
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема));
(2) есть еще свойства по доступам и роли.
Смотрел Схему - программно и смотрел Схему конструктором созданную.
Абсолютно одинаковые значение
Но в первом случае, не работает, а во втором работает..
ОграничениеИспользования ОграничениеИспользованияПоляСхемыКомпоновкиДанных ОграничениеИспользованияПоляСхемыКомпоновкиДанных
Группировка Ложь Булево
Поле Ложь Булево
Порядок Ложь Булево
Условие Ложь Булево
ОграничениеИспользованияРеквизитов ОграничениеИспользованияПоляСхемыКомпоновкиДанных ОграничениеИспользованияПоляСхемыКомпоновкиДанных
Группировка Ложь Булево
Поле Ложь Булево
Порядок Ложь Булево
Условие Ложь Булево
Смотрел Схему - программно и смотрел Схему конструктором созданную.
Абсолютно одинаковые значение
Но в первом случае, не работает, а во втором работает..
ОграничениеИспользования ОграничениеИспользованияПоляСхемыКомпоновкиДанных ОграничениеИспользованияПоляСхемыКомпоновкиДанных
Группировка Ложь Булево
Поле Ложь Булево
Порядок Ложь Булево
Условие Ложь Булево
ОграничениеИспользованияРеквизитов ОграничениеИспользованияПоляСхемыКомпоновкиДанных ОграничениеИспользованияПоляСхемыКомпоновкиДанных
Группировка Ложь Булево
Поле Ложь Булево
Порядок Ложь Булево
Условие Ложь Булево
(5) Сдается что информации по доступным полям компоновки данных там нет, только настройки, плёхо.
Выборка поля в тексте запроса не гарантирует его наличие в списке доступных полей компоновки данных.
Туда оно попадает в GUI конструктора СКД при установленной кнопке "автозаполнение" на форме редактора источника данных (запроса).
При этом вызывается конструктор-помощник, скорее всего базирующийся на библиотеке ПостроителяЗапроса, который получает список полей запроса и уже дальше из него делает список полей СКД этого источника на основе своих представлений о прекрасном. Этот список полей всех источников данных - пересекающиеся поля при объединении + вычисляемые поля - наложение прав полей - и есть список доступных полей для компоновщика настроек.
Вот объект "ИсточникДоступныхНастроекКомпоновщикаДанных" - на вход получает схему СКД (список полей и их настройки) и на выход для компоновщикаНастроек выдает уже доступный список полей для каждого возможного действия (условия, выбор) в GUI настроек.
Красный крест ставится на поле если оно есть в списке настроек, но нет в списке доступных для действия полей.
Информация о доступных полях в компоновщике однозначно есть - раз есть крест, но она не сериализуется, что обидно.
Можно попробовать сериализовать ИсточникНастроек глянуть. Можно посмотреть всю последовательность от СКД -> ИсточникДоступных -> КомпоновщикНастроек что бы понять где теряется поле, но походу источник не сериализуется и никаких методов и свойств у него нет, тупо сервисный объект сведения всех полей в общий список.
Выборка поля в тексте запроса не гарантирует его наличие в списке доступных полей компоновки данных.
Туда оно попадает в GUI конструктора СКД при установленной кнопке "автозаполнение" на форме редактора источника данных (запроса).
При этом вызывается конструктор-помощник, скорее всего базирующийся на библиотеке ПостроителяЗапроса, который получает список полей запроса и уже дальше из него делает список полей СКД этого источника на основе своих представлений о прекрасном. Этот список полей всех источников данных - пересекающиеся поля при объединении + вычисляемые поля - наложение прав полей - и есть список доступных полей для компоновщика настроек.
Вот объект "ИсточникДоступныхНастроекКомпоновщикаДанных" - на вход получает схему СКД (список полей и их настройки) и на выход для компоновщикаНастроек выдает уже доступный список полей для каждого возможного действия (условия, выбор) в GUI настроек.
Красный крест ставится на поле если оно есть в списке настроек, но нет в списке доступных для действия полей.
Информация о доступных полях в компоновщике однозначно есть - раз есть крест, но она не сериализуется, что обидно.
Можно попробовать сериализовать ИсточникНастроек глянуть. Можно посмотреть всю последовательность от СКД -> ИсточникДоступных -> КомпоновщикНастроек что бы понять где теряется поле, но походу источник не сериализуется и никаких методов и свойств у него нет, тупо сервисный объект сведения всех полей в общий список.
(7) все это установлено (см. картинку)
более того, я сделал простейший код:
И даже в этом простейшем коде - Поле Номенклатура - горит крестом.. и нет доступных полей для выбора.
более того, я сделал простейший код:
И даже в этом простейшем коде - Поле Номенклатура - горит крестом.. и нет доступных полей для выбора.
&НаСервере
Функция ТекстЗапроса()
Возврат
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Номенклатура
|ИЗ
| Справочник.Номенклатура КАК Номенклатура";
КонецФункции
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных;
ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить();
ИсточникДанных.Имя = "ИсточникДанных1";
ИсточникДанных.ТипИсточникаДанных = "Local";
НаборДанныхОбъектСхемыКомпоновкиДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
НаборДанныхОбъектСхемыКомпоновкиДанных.Имя = "НаборДанных1";
НаборДанныхОбъектСхемыКомпоновкиДанных.ИсточникДанных = "ИсточникДанных1";
НаборДанныхОбъектСхемыКомпоновкиДанных.Запрос = ТекстЗапроса();
//Поля константы НаборДанныхОбъектСхемыКомпоновкиДанных
ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
ПолеНабораДанныхСхемыКомпоновкиДанных.Поле = "Номенклатура";
ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным = "Номенклатура";
ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок = "Номенклатура";
Выбор = СхемаКомпоновкиДанных.НастройкиПоУмолчанию.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
Выбор.Использование = Истина;
Выбор.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");
КомпоновщикНастроекСКД.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
ГруппировкаКомпоновкиДанных1 = КомпоновщикНастроекСКД.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ГруппировкаКомпоновкиДанных1.Использование = Истина;
ПолеГруппировкиКомпоновкиДанных = ГруппировкаКомпоновкиДанных1.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеГруппировкиКомпоновкиДанных.Использование = Истина;
//ПолеГруппировкиКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");
АвтоВыбранноеПолеКомпоновкиДанных = ГруппировкаКомпоновкиДанных1.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
АвтоВыбранноеПолеКомпоновкиДанных.Использование = Истина;
ЭлементОтбораКомпоновкиДанных = КомпоновщикНастроекСКД.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораКомпоновкиДанных.Использование = Истина;
ЭлементОтбораКомпоновкиДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номенклатура");
ЭлементОтбораКомпоновкиДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
КонецПроцедуры
ПоказатьПрикрепленные файлы:
(11) вы были правы по части Инициализации, но ее делать надо было вот так
ИсточникДоступныхНастроек =
Новый ИсточникДоступныхНастроекКомпоновкиДанных(ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, УникальныйИдентификатор));
ЭтаФорма.КомпоновщикНастроекСКД.Инициализировать(ИсточникДоступныхНастроек);
ЭтаФорма.КомпоновщикНастроекСКД.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
(12) УФ да, там переопределен Конструктор у Источника.
Насколько я понимаю (а я не сильно понимаю)
ИсточникДоступныхНастроек доступен в мобильном клиенте, т.е. инициализироваться может из клиентского контекста, что в общем логично. А СКД не доступна на мобильном клиенте, только на сервере. Поэтому решили унифицировать работу конструктора Источника и переопределить его аргументы на адрес, который будет работать и на клиенте и на сервере.
Насколько я понимаю (а я не сильно понимаю)
ИсточникДоступныхНастроек доступен в мобильном клиенте, т.е. инициализироваться может из клиентского контекста, что в общем логично. А СКД не доступна на мобильном клиенте, только на сервере. Поэтому решили унифицировать работу конструктора Источника и переопределить его аргументы на адрес, который будет работать и на клиенте и на сервере.
(6) Поля компоновки данных. Это коллекция с описаниями полей.
В общем случае поле из текста запроса (окно внизу GUI) попадает в список полей компоновки (Таб поле вверху GUI) в результате действия помощника с установленной кнопкой "Автозаполнение" при каждом успешном изменении текста запроса. Нет гарантии что этот мастер отрабатывает при програмном изменении текста запроса.
Это первая гипотеза.
Вторая гипотеза что не переинициируется КомпоновщикНастроек согласно новой измененной схемы.
В общем случае поле из текста запроса (окно внизу GUI) попадает в список полей компоновки (Таб поле вверху GUI) в результате действия помощника с установленной кнопкой "Автозаполнение" при каждом успешном изменении текста запроса. Нет гарантии что этот мастер отрабатывает при програмном изменении текста запроса.
Это первая гипотеза.
Вторая гипотеза что не переинициируется КомпоновщикНастроек согласно новой измененной схемы.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот