|
|
|
Вопрос Мидл+ (Программное использование СКД) Maestro2020, craxx, Garykom, Guk, lubitelxml, alexxx961503, Valdis2007, Prog_man, d18, laeg, Мультук, M0rr0, Крэкпэк, crasler, pavel_p2007, segn, Fedor-1971, Amra, dmt, John D, ангел, Franchiser, Greeen, Timon1405, Лодырь, lxndr, МаленькийВопросик, obs191, p-soft
| ☑ | ||
|---|---|---|---|---|
|
0
Maestro2020
24.10.25
✎
16:38
|
Добрый день.
Пытаюсь по аналогии с типовыми решениями сделать программную выборку данных с помощью механизма СКД. Получаю пустую выборку на простом примере: ТекстЗапроса=" |ВЫБРАТЬ |* |ИЗ | Документ.РеализацияТоваровУслуг КАК ПсевдонимЗаданнойТаблицы"; СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных; ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить(); ИсточникДанных.Имя = "ИсточникДанных1"; ИсточникДанных.ТипИсточникаДанных = "local"; НаборДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); НаборДанных.ИсточникДанных = "ИсточникДанных1"; НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина; НаборДанных.Запрос = ТекстЗапроса; НаборДанных.Имя = "НаборДанных1"; КомпоновщикНастроекКомпоновкиДанных = Новый КомпоновщикНастроекКомпоновкиДанных; АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, УникальныйИдентификатор); КомпоновщикНастроекКомпоновкиДанных.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы)); Результат = Новый ДеревоЗначений; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроекКомпоновкиДанных.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; ПроцессорВывода.УстановитьОбъект(Результат); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); Сообщить(Результат.Строки.Количество()); Подскажите, пожалуйста, что я делаю не так? |
|||
|
1
craxx
24.10.25
✎
16:43
|
(0) а где структура? варианты (как минимум Основной)?что ему выводить?
|
|||
|
2
Maestro2020
24.10.25
✎
16:43
|
(1) Как добавить структуру? (Детальные записи)
|
|||
|
3
craxx
24.10.25
✎
16:47
|
(2) Тут https://infostart.ru/1c/articles/1185890/
есть пример, про структуру тоже. |
|||
|
4
Garykom
гуру
24.10.25
✎
16:47
|
(0) Нафуя тут СКД?
|
|||
|
5
Garykom
гуру
24.10.25
✎
16:49
|
Вывод через СКД в ТЗ/ДЗ обычно требуется когда надо применять пользовательские отборы и прочие извраты
А если просто данные отобрать то просто используй запрос и все |
|||
|
6
Maestro2020
24.10.25
✎
16:52
|
(5) Вот именно. Задача сделать пользовательский отбор на любом типе документов. Пример выше я упростил. Запрос без условий. И нифуя. )
|
|||
|
7
Maestro2020
24.10.25
✎
16:54
|
(3) Спасибо, попробую добавить. Но в типовых это не используется...
Очень понравился абзац: Что же касается Фиксированных настроек, описание на этот счет никакого нет. Опыты показывают, что группировки добавленные в фиксированные настройки никак не влияют на результирующую структуру. На этом все, спасибо за внимание. Успехов Вам в программной работе с СКД! |
|||
|
8
Homer
24.10.25
✎
16:54
|
||||
|
9
d4rkmesa
24.10.25
✎
16:54
|
(0) Насколько я помню, нужно добавить поля и хотя бы элемент детальных записей. По текущим настройкам сейчас это как отчет СКД без структуры и каких-либо выбранных полей.
|
|||
|
10
Garykom
гуру
24.10.25
✎
16:56
|
Вроде не хватает установки настроек по умолчанию или как то так
|
|||
|
11
Maestro2020
24.10.25
✎
17:01
|
(8) Таких примеров много. Но везде схема компоновки в макете!
|
|||
|
12
Maestro2020
24.10.25
✎
16:58
|
(9) НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина;
|
|||
|
13
Maestro2020
24.10.25
✎
16:58
|
(10) Не влияет. Пробовал.
|
|||
|
14
Timon1405
24.10.25
✎
17:06
|
||||
|
15
Мультук
гуру
24.10.25
✎
17:08
|
(0)
Что мешает сделать всё это сначала в обычном отчёте -- запрос -- настроить поля -- сформировать отчёт "кнопочкой" -- программно сформировать отчёт в "ПриКомпановке.." Там же в "ПриКомпановке.." посмотреть что и как и где лежит ? |
|||
|
16
Garykom
гуру
24.10.25
✎
17:10
|
(11) Я делал и полностью программно все
Но помню долго провозился, целый день любился Попробуй найти пример где все программно, без макета и без настроек на форме Вроде вот но не уверен https://www.koderline.ru/expert/narabotki/article-programmnoe-sozdanie-skd-shpargalka/ |
|||
|
17
Maestro2020
24.10.25
✎
17:16
|
(14) Спасибо. Но устарело для текущих версий платформы. Попробовал. Сплошные ошибки.
|
|||
|
18
Maestro2020
24.10.25
✎
17:17
|
(15) Что это мне даст? Где можно посмотреть пример добавления/установки параметров схемы компоновки программно?
|
|||
|
19
Maestro2020
24.10.25
✎
17:24
|
(16) Спасибо. Попробую. Этот материал видел. Но **ка в типовых текст в моем примере. Просто где-то недокументированная "галочка"...
|
|||
|
20
Timon1405
24.10.25
✎
17:24
|
(17) возможно надо доработать, но плохим обработкам там 300 плюсов не ставят...
а что поменялось в СКД в текущих версиях платформы? |
|||
|
21
Маленький Вопросик
24.10.25
✎
17:26
|
(0) вот эту посмотри... по-моему ты спросил об этом https://infostart.ru/1c/tools/2147140/
|
|||
|
22
Maestro2020
24.10.25
✎
17:32
|
(20) Для детальных записей не проходит:
НастройкиПоУмолчанию=СхемаКомпоновкиДанных.НастройкиПоУмолчанию; Группировка=НастройкиПоУмолчанию.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"")); Ошибка - Несоответствие типов Все меняется. Там есть свежие комментарии. |
|||
|
23
Maestro2020
24.10.25
✎
17:31
|
(21) Совсем не читаем вопрос? Мне надо без макета - схемы компоновки.
|
|||
|
24
Timon1405
24.10.25
✎
17:33
|
(22)
так у вас кавычка лишняя. вот так должно работать Группировка = НастройкиПоУмолчанию.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); Группировка.Использование = Истина; АвтоПоле = Группировка.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); АвтоПоле.Использование = Истина; |
|||
|
25
craxx
24.10.25
✎
17:33
|
(7) Зачем тебе фиксированные настройки? у тебя схема пустая
|
|||
|
26
Maestro2020
24.10.25
✎
17:36
|
(24) Извините. Написал с экрана рабочего ПК. Ваш синтаксис правильный. Уходит в ошибку - выше...
|
|||
|
27
Maestro2020
24.10.25
✎
17:37
|
(25) Просто для примера привел выдержку статьи. В типовых никаких структур нет!
|
|||
|
28
Timon1405
24.10.25
✎
17:43
|
(26) возможно слово Группировка стало системным, и надо переименовать в
МояГруппировка = НастройкиПоУмолчанию.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); |
|||
|
29
Maestro2020
24.10.25
✎
17:48
|
(28) Вы правы. Группировка стало системным. Ошибки ушли. Результат тот же. Пусто.
|
|||
|
30
Garykom
гуру
24.10.25
✎
18:07
|
Надеюсь нет ошибки с копированием настроек отбора?
Их надо пересоздавать в цикле, причем не забывая про группы (рекурсия) В смысле без пользовательских отборов данные то есть? |
|||
|
31
lEvGl
гуру
24.10.25
✎
18:15
|
а точно мидл+?
такое делали в бородатых годах, на заре скд, правда надо (16) но на просторах 100500 примеров |
|||
|
32
Maestro2020
24.10.25
✎
18:17
|
(31) Приведите рабочий пример без схемы компоновки в макете.
|
|||
|
33
Maestro2020
24.10.25
✎
18:19
|
(30) Какой смысл пересоздавать настройки отбора, если он пустой? Я пробовал присваивать отбор по умолчанию и отбор, размещенный на форме. Итог тот же.
|
|||
|
34
lEvGl
гуру
24.10.25
✎
18:21
|
(32) что в вашем понимании "рабочий"?
https://infostart.ru/1c/articles/1179039/ но придется переписать под себя, может у вас таких регистров нет, как там используют |
|||
|
35
Maestro2020
24.10.25
✎
18:21
|
(34) Скопирую в форму чистой обработки и посмотрю результат.
|
|||
|
36
lEvGl
гуру
24.10.25
✎
18:24
|
(35) это и проблема, вы хотите скопировать и получить результат. Пока, к счастью, до такого не дошли, иногда и самому подумать надо
|
|||
|
37
Maestro2020
24.10.25
✎
19:01
|
(36) Мой личный программный текст в сообщении (0). Наставлять на путь истинный словами, что надо подумать и будет просветление, и я могу.
Я сюда обратился, когда исчерпал все варианты подсказок из инета. |
|||
|
38
lEvGl
гуру
24.10.25
✎
18:36
|
в вашем коде нет ни одной группировки или поля, он не выведет ничего, в (1) же сказали
зы. а что, собеседуетесь? |
|||
|
39
Maestro2020
24.10.25
✎
18:40
|
(38) Нет. Просто есть задача - сделать на форме универсальный отбор по любому типу документов. И неожиданно для себя словил "затык"... Уже неделю.
Добавление группировок и автополей не помогает. (В типовых этого нет) |
|||
|
40
Timon1405
24.10.25
✎
18:43
|
(39) может быть тогда посмотреть как работает отчет "УниверсальныйОтчет" в ERP? там по произвольному выбранному объекту схема строится.
|
|||
|
41
lEvGl
гуру
24.10.25
✎
18:51
|
(39) если так, то кажется, что надо начать с выбора типа на форме, денамический запрос под него, детальные записи, то есть перестройка схемы "налету", чтобы отборы этого типа появились, инициализация и должен подхватить и вывести. то есть - не в один сеанс выполнения кода
|
|||
|
42
Maestro2020
24.10.25
✎
18:52
|
(40) Спасибо. Видимо придется лезть совсем в "дебри"...
|
|||
|
43
Maestro2020
24.10.25
✎
18:55
|
(41) Есть типовая обработка "Групповое изменение реквизитов". Там два режима включается. 1 - как Вы написали динамический запрос на "лету", 2 - подсчет количества выбранных объектов.
Я пытаюсь сделать 2 вариант. И ничего. Уже упростил до невозможности. В (0) текст в пустой внешней обработке. Как получить список документов без условий с помощью СКД? |
|||
|
44
lEvGl
гуру
24.10.25
✎
19:16
|
Как получить список документов без условий с помощью СКД?
реквизит составного типа, скд тут не нужно |
|||
|
45
Maestro2020
24.10.25
✎
19:21
|
(44) Еще раз, я для Senior упростил задачу, которая у меня не получается, получить список документов без условий с помощью программного механизма СКД.
|
|||
|
46
lEvGl
гуру
24.10.25
✎
19:37
|
(45) хз о чем ты
про почесать свой турнепс? |
|||
|
47
d4rkmesa
24.10.25
✎
19:41
|
(12) Это не то, АвтоЗаполнениеДоступныхПолей - это "галочка" Автозаполнение на "закладке" НаборыДанных. Я про ВыбранныеПоля и настройки. Впрочем, в (24) написали.
|
|||
|
48
Maestro2020
24.10.25
✎
20:02
|
(47) Материал (24) попробовал. Не помогает. В типовой этого нет..
|
|||
|
49
Maestro2020
24.10.25
✎
20:03
|
(46) Понятно с Вами. Спасибо.
|
|||
|
50
craxx
25.10.25
✎
11:12
|
(31) вот и я тоже засомневался, что мидл+
Больше на джун+ (и то, плюс такой, неявный). |
|||
|
51
Garykom
гуру
25.10.25
✎
13:28
|
Довели, заставили вспомнить, точнее заново повторить
Пример вывода на СКД полностью программно&НаСервере
Процедура ПримерСКДНаСервере()
ТекстЗапроса =
"ВЫБРАТЬ
| Контрагенты.Ссылка КАК Ссылка,
| Контрагенты.Наименование КАК Наименование,
| Контрагенты.ИНН КАК ИНН,
| Контрагенты.КПП КАК КПП
|ИЗ
| Справочник.Контрагенты КАК Контрагенты";
ТаблицаЗначений = Новый ТаблицаЗначений;
СКД = Новый СхемаКомпоновкиДанных();
Источник = СКД.ИсточникиДанных.Добавить();
Источник.Имя = "ИсточникДанных";
Источник.ТипИсточникаДанных = "Local";
НаборДанных = СКД.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
НаборДанных.Имя = "НаборДанных1";
НаборДанных.Запрос = ТекстЗапроса;
НаборДанных.ИсточникДанных = "ИсточникДанных";
НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина;
НастройкиПоУмолчанию = СКД.НастройкиПоУмолчанию;
НоваяГруппировка = НастройкиПоУмолчанию.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
НоваяГруппировка.Использование = Истина;
АвтоПоле = НоваяГруппировка.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
АвтоПоле.Использование = Истина;
КоллекцияКолонок = Новый ТаблицаЗначений;
КоллекцияКолонок.Колонки.Добавить("Имя");
КоллекцияКолонок.Колонки.Добавить("ТипЗначения");
КоллекцияКолонок.Колонки.Добавить("Заголовок");
ПостроительЗапроса = Новый ПостроительЗапроса;
ПостроительЗапроса.Текст = ТекстЗапроса;
ПостроительЗапроса.ЗаполнитьНастройки();
Для Каждого ПолеОтбора Из ПостроительЗапроса.ВыбранныеПоля Цикл
НоваяКолонка = КоллекцияКолонок.Добавить();
НоваяКолонка.Имя = ПолеОтбора.Имя;
НоваяКолонка.ТипЗначения = ПостроительЗапроса.ДоступныеПоля[ПолеОтбора.ПутьКДанным].ТипЗначения;
НоваяКолонка.Заголовок = ПолеОтбора.Представление
КонецЦикла;
Для Каждого НоваяКолонка Из КоллекцияКолонок Цикл
ПолеНабора = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
ПолеНабора.Заголовок = СокрЛП(НоваяКолонка.Заголовок);
ПолеНабора.Поле = СокрЛП(НоваяКолонка.Имя);
ПолеНабора.ПутьКДанным = СокрЛП(НоваяКолонка.Имя);
// Удалим Неопределено и NULL
Массив = Новый Массив;
Для Каждого ТекущийТип Из НоваяКолонка.ТипЗначения.Типы() Цикл
Если ТекущийТип = Тип("Неопределено") ИЛИ ТекущийТип = Тип("NULL") ИЛИ
ТекущийТип = Неопределено ИЛИ ТекущийТип = Null Тогда
Продолжить;
КонецЕсли;
Массив.Добавить(ТекущийТип);
КонецЦикла;
ПолеНабора.ТипЗначения = Новый ОписаниеТипов(Массив, НоваяКолонка.ТипЗначения.КвалификаторыЧисла,
НоваяКолонка.ТипЗначения.КвалификаторыСтроки,
НоваяКолонка.ТипЗначения.КвалификаторыДаты);
ВыбранноеПолеКомпоновкиДанных = НастройкиПоУмолчанию.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных(ПолеНабора.ПутьКДанным);
ВыбранноеПолеКомпоновкиДанных.Использование = Истина;
КонецЦикла;
ТипГенератора = Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений");
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, НастройкиПоУмолчанию, , , ТипГенератора);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(ТаблицаЗначений);
ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);
КонецПроцедуры
Сваяно на основе https://infostart.ru/1c/articles/575659/ из (14) У меня все выводит прекрасно для ТЗ, для ДЗ уже сами |
|||
|
52
Garykom
гуру
25.10.25
✎
13:26
|
(51)+ И да ТС явный джун, даже комменты в (14) не смог прочитать сам
|
|||
|
53
craxx
25.10.25
✎
14:25
|
(52) Содержание вопросов тут не соответствует уровню мидла. Нормальный крепкий мидл идет в отладку, смотрит какие у компоновщика свойства, потом идет в СП и смотрит какие у свойств методы и как они работать должны. А еще лучше читает книжку по СКД до дырок. После либо сам уже пишет либо ищет примеры рабочие с этим свойствами и методами и сам уже пишет. Тут просто выньте да положите готовое. Ну и вопрос из (2) это явно не мидл, и уж тем более не плюс.
|
|||
|
54
Maestro2020
25.10.25
✎
15:41
|
(50) Вы о чем? В названии темы "Вопрос Мидл+" - это вопрос для спецов уровня Мидл+
|
|||
|
55
Maestro2020
25.10.25
✎
15:53
|
(51) Спасибо за пример. Реально работает.
|
|||
|
56
Maestro2020
25.10.25
✎
16:02
|
Всем спасибо, в т.ч. за критику. Первый раз столкнулся с задачей формирования данных на полном программном использовании механизма СКД.
|
|||
|
57
Valdis2007
25.10.25
✎
16:11
|
(53) а что делает "крекий" сейнер тогда?))
|
|||
|
58
Maestro2020
25.10.25
✎
16:39
|
Как "вишенка на торте" для решения вопроса в (0) требовалось добавить:
ГруппировкаКомпоновкиДанных = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); ГруппировкаКомпоновкиДанных.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); ГруппировкаКомпоновкиДанных.Использование = Истина; ПолеГруппировки = ГруппировкаКомпоновкиДанных.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("Ссылка"); ПолеГруппировки.Использование = Истина; ПолеВыбора = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); ПолеВыбора.Поле = Новый ПолеКомпоновкиДанных("Ссылка"); ПолеВыбора.Использование = Истина; |
|||
|
59
Maestro2020
25.10.25
✎
16:46
|
(53) Как оказалось решение простое, но уровень отписавшихся в данной теме (кроме нескольких человек) по вашей оценке даже не тянет на джун+.))
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |