Использование методов глобального контекста в системе компоновки данных или недокументированные возможности СКД

27.02.19

Разработка - СКД

Прочитал на форуме, что СтрРазделить() и ТекущаяДата() работают в языке выражений системы компоновки данных. Почитал справку, там ничего не нашёл, поэтому не поверил. Посмотрел на практике – и правда работает… В данной статье попытался привести весь перечень методов, работающих в СКД, но не описанных в документации.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Проверка недокументированных возможностей в СКД
.erf 9,93Kb
29
29 Скачать (1 SM) Купить за 1 850 руб.

На ИТС нашёл упоминание, что ТекущаяДата() работает в СКД (в справке про это ни слова),  про другие методы описанные в статье ничего не нашёл.

Как собиралась информация: открыл в СП раздел «Глобальный контекст» и все методы проверял в СКД. Функции, которые помнил, что есть в СКД пропускал как заведомо рабочие. Также пропускал методы заведомо не рабочие, например ПоказатьВопрос. Прошёлся методом перебора по порядку по разделам «Функции работы со значениями типа Строка», «Функции работы со значениями типа Число», «Функции работы со значениями типа Дата» и т.д. до «Процедуры и функции сохранения значений».

Следующие за ним разделы решил не проверять, т.к. они явно не для работы из чистого СКД (например «Процедуры и функции работы с операционной системой», «Процедуры и функции работы с внешними компонентами» и т.д.).

 

Проверял в СКД на данных полученные запросом:

ВЫБРАТЬ
	"111,ааа" КАК Строка,
	ДАТАВРЕМЯ(2016, 1, 20, 12, 24, 59) КАК Дата,
	1.5 КАК Число

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"ааа2фыава,пролджэ",
	ДАТАВРЕМЯ(2012, 2, 22, 2, 22, 52),
	2.49

 

Перечень методов глобального контекста работающих в СКД на платформе «8.3.8.1652» «8.3.7.1845», «8.3.6.2390» и «8.2.19.130» в управляемом приложении клиенте:

  1. СтрНайти (не работает на 8.3.7.1845, 8.3.6.2390 и 8.2.19.130). Найти на 8.2.19.130 тоже не работает.
  2. СтрСравнить (не работает на 8.3.7.1845, 8.3.6.2390 и 8.2.19.130)
  3. СтрНачинаетсяС (не работает на 8.3.7.1845, 8.3.6.2390 и 8.2.19.130)
  4. СтрЗаканчиваетсяНа (не работает на 8.3.7.1845, 8.3.6.2390 и 8.2.19.130)
  5. СтрРазделить (не работает на 8.3.7.1845, 8.3.6.2390 и 8.2.19.130)
  6. СтрСоединить (не работает на 8.3.7.1845, 8.3.6.2390 и 8.2.19.130)
  7. ТекущаяДата()
  8. СтрШаблон (не работает на 8.3.7.1845, 8.3.6.2390 и 8.2.19.130)
  9. ЧислоПрописью
  10. НСтр
  11. ПредставлениеПериода
  12. ПолучитьОбщийМакет
  13. ПредопределенноеЗначение
  14. ПолучитьПолноеИмяПредопределенногоЗначения
  15. ПолучитьСкоростьКлиентскогоСоединения()
  16. ИмяКомпьютера()
  17. ИмяПользователя()
  18. ПолноеИмяПользователя()
  19. КаталогПрограммы()
  20. КаталогВременныхФайлов()
  21. ПравоДоступа – тут надо разбираться как передать ОбъектМетаданных в параметр
  22. РольДоступна
  23. ТекущийЯзык()
  24. ТекущийКодЛокализации()
  25. СтрокаСоединенияИнформационнойБазы()
  26. ПараметрыДоступа – тут надо разбираться как передать ОбъектМетаданных в параметр
  27. ПредставлениеПриложения
  28. ТекущийЯзыкСистемы()
  29. ТекущийРежимЗапуска()
  30. ЧасовойПоясСеанса()
  31. ТекущаяДатаСеанса()
  32. ПредставлениеПрава
  33. ПолучитьИнформациюЭкрановКлиента() (не работает на 8.2.19.130)
  34. ТекущийВариантОсновногоШрифтаКлиентскогоПриложения() (не работает на 8.2.19.130)
  35. ТекущийВариантИнтерфейсаКлиентскогоПриложения() (не работает на 8.2.19.130)
  36. ЗначениеВСтрокуВнутр
  37. ЗначениеИзСтрокиВнутр
  38. ПолучитьИмяВременногоФайла()
  39. ЗначениеЗаполнено (зачеркнул, т.к. есть в справке)
  40. ТекущаяУниверсальнаяДатаВМиллисекундах()

 

Среди этих методов есть абсолютно бесполезные, например «ПолучитьИнформациюЭкрановКлиента()» (даже представить не могу где это можно применить в чистом СКД), но есть и очень даже полезные, например «ЧислоПрописью». К сожалению, СокрЛП до сих пор не работает…

Получается использовать данные выражения можно только на свой страх и риск, т.к. в справке о них ни слова, значит работоспособность не гарантируется.

Ответ от разработчиков: 
В выражениях компоновки данных можно использовать функции общих модулей и функции глобального контекста.

В отчете нет ничего нового относительно данной статьи, но к сожалению, написать бесплатную статью с файлом нельзя по правилам Инфостарта. В отчете все 40 методов тестируются на «чистом» СКД через вычисляемые поля. Результат работы отчета приведен в скриншоте к статье. Если проверять на базе где нет «Перечисление.ВидыИмущества.ОсобенностиОтсутствуют» то методы ПредопределенноеЗначение и ПолучитьПолноеИмяПредопределенногоЗначения работать не будут, поэтому требуется ручная замена на что-нибудь подходящее.

Недокументированные возможности СКД Система компоновки данных СтрРазделить()

См. также

SALE! 15%

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    160352    887    399    

866

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

Часто при разработке отчетов в СКД возникает ситуация, когда не совсем понятно, почему отчет выводит не те данные, которые нужны, либо не выводит вовсе. Возникает потребность увидеть конечный запрос, который формирует СКД. Как это сделать, рассмотрим в этой статье.

15.05.2024    8863    implecs_team    6    

47

Инструментарий разработчика СКД Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

По выбранной схеме компоновки данных генерирует программный код, который генерирует СКД, аналогичную исходной схеме. Есть дополнительные инструменты для просмотра дерева схемы, сравнение исходной схемы и полученной по коду, а также сравнение изменений в сгенерированном коде для исходной схемы и для измененной.

3 стартмани

05.02.2024    7108    56    obmailok    21    

79

Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    3173    5    Yashazz    1    

34

СКД WEB-интеграция Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Долгое время поддерживаю web-портал, в котором появилась необходимость создавать отчеты. Просмотрев различные фреймворки на js, я решил сделать свое решение, которое позволяло бы быстро разрабатывать и добавлять новые отчеты на web-портал.

2 стартмани

11.12.2023    10887    24    John_d    25    

124

СКД Программист Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

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

05.12.2023    8124    PROSTO-1C    15    

68
Вознаграждение за ответ
Показать полностью
Отзывы
28. Aphanas 92 02.09.16 23:16 Сейчас в теме
Также работает метод глобального контекста "XMLСтрока". С помощью него можно быстро получить представление уникального идентификатора любой ссылки: XMLСтрока(Ссылка). Возвращает что-то типа "6a09f20a-8de6-11e1-b3e1-001617ec3f2a". Многие ищут и не находят как получить уникальный идентификатор в запросе. Это способ получения уникального идентификатора в СКД.
primara; Necytij; AllexSoft; Maxanamoon; Andreeei; Aleskey_K; TreeDogNight; Rusel; Drivingblind; Luisor; Kinestetik; user666919_budulau; temsan; kulak1974; Lena272; Pigzilla; ekomova; igormiro; IrinaKostroma; hame1e00n; Gang031; DrAku1a; ifilll; Somebody1; &rew; Saint13; user747571; le0nid; acsent; trumanl; kotenko.viktor; mi1man; ISP; kolya_tlt; Goleff74; Anchoret; chanzer; purgin; Lebowski; tarassov; LexSeIch; JohnyDeath; raystlin; philya; stsasha87; awk; ll13; karpik666; echo77; klinval; zarucheisky; olbu; Synoecium; +53 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. aka Любитель XML 05.08.16 11:53 Сейчас в теме
Спасибо, хорошая статья
2. tindir 05.08.16 17:56 Сейчас в теме
ага. опять какой-то разраб написать написал, а документацию не догнали. кстати, как там в спавке по поводу ВычислитьВыражение(Выражение, Группировка, ТипРасчета, Начало, Конец, Сортировка, ИерархическаяСортировка, ОбработкаОдинаковыхЗначенийПорядка)? в последнем релизе нет. Мне 1с по качеству и обьемному наполнению справки все чаще начинает напоминать оупень-сорсь, но платный. и если у тебя в node нет мануала к модулю, то всегда можно почитать исходник, а как быть с http в 1с, если тебе нужно что-то сложнее халовордия....
24. tiniji 164 11.08.16 15:12 Сейчас в теме
(2) tindir, Эта информация есть в режиме 1С Предприятие. В конфигураторе такого нет про СКД.
3. Yashazz 4794 07.08.16 12:59 Сейчас в теме
Автор, на каком релизе проверял? Сдаётся мне, это фича из новых, или нестабильно работающих, как всё недокументированное.
4. klinval 343 07.08.16 18:24 Сейчас в теме
(3) Yashazz,
Автор, на каком релизе проверял? Сдаётся мне, это фича из новых, или нестабильно работающих, как всё недокументированное.

В статье специально написал:
на платформе «8.3.8.1652» в тонком клиенте

На форуме люди писали, что на 8.3.8.1784 работает. Будет 1С-ка под рукой - опробую ещё на каком-нибудь релизе, статью дополню по результатам. Если уже кто-то уже опробовал: просьба отписываться в комментах!

Ещё отправил в ТП письмо, они уже переслали разработчикам. Пока ответа нет... Будет ответ - дополню статью, чтобы понимать что это: недоработка документации или функции работающие в тестовом режиме.
5. karpik666 3856 07.08.16 19:14 Сейчас в теме
хм, может конечно я что-то путаю, но данный функционал был доступен всегда, еще по бесплатным курсам Гилева говорилось, что в скд в параметр или вычисляемых полях можно использовать функции 1с, а также функции общих модулей, исполняемых на сервере, однако делать это не рекомендуется так как по сути выполняется код в цикле, и если это будет обращение к базе данных, то это сильно замедляет работу.
Lena272; Gang031; antoha.o; ayuplotnikov; Сурикат; +5 Ответить
6. klinval 343 08.08.16 09:48 Сейчас в теме
(5) karpik666,
еще по бесплатным курсам Гилева говорилось, что в скд в параметр или вычисляемых полях можно использовать функции 1с

Какие именно функции? Какого раздела справки? Я проверял только методы глобального контекста и они работают далеко не все.

Если эти методы уже давно работали то тогда есть ряд вопросов:
1. Какого года курсы Гилева, и какая тогда платформа была? Если тогда ещё всё работало, то почему сейчас не работает "СокрЛП"?
2. Если ещё тогда всё работало, почему в справке ни слова за эти годы не появилось?
3. Опять таки почему такие ненужные в СКД вещи как ПолучитьИнформациюЭкрановКлиента() работают, а нужные, типа СокрЛП не работают?

Как по мне больше вероятности что функции заработали в СКД случайно: может некоторые методы "причесали" под какой-нибудь общий формат, благодаря чему они стали доступны сразу в 2 местах: из кода и из СКД. А иначе как объяснить то, что действительно нужные методы не работают, а ненужные работают? Если бы это была системная работа, то логичней сначала заставить работать СокрЛП в СКД.

Чтобы не гадать подождём что разработчики скажут...
8. karpik666 3856 08.08.16 13:03 Сейчас в теме
(6) вот про эти курсы говорил http://www.spec8.ru/kurs-po-skd-besplatno
там в 21 кажется уроке описывает про "выражение представления" поля и описывается, что в них можно использовать данный функционал. Курс уже очень старый.
А вот, что нашел про использование функций "ТекущаяДата()" и "значениеЗаполнено()", они вообще доступны с релиза 8.2.14 http://1cskd.ru/2011/07/novye-funkcii-skd-8-2-14/
9. klinval 343 08.08.16 13:57 Сейчас в теме
(8) karpik666,
вот про эти курсы говорил http://www.spec8.ru/kurs-po-skd-besplatno
там в 21 кажется уроке описывает про "выражение представления" поля и описывается, что в них можно использовать данный функционал.

Потом качну/посмотрю. А точно 21 урок? Я вроде по порядку подсчитал: 21 это "Возможности упорядочивания в отчетах". Вы наверное имели ввиду "Вычисляемые поля"?
А вот, что нашел про использование функций "ТекущаяДата()" и "значениеЗаполнено()", они вообще доступны с релиза 8.2.14 http://1cskd.ru/2011/07/novye-funkcii-skd-8-2-14/

Про текущую дату уже писал в статье, что про неё есть упоминания в ИТС, но нет в справке. Посмотрел про "ЗначениеЗаполнено" - оказывается есть в справке. Статью поправил, ЗначениеЗаполнено зачеркнул. Так что не удивительно, что они уже давно работают: один я не заметил в справке, другой есть в доках на ИТСе.

Я не спорю: вполне возможно всё это работает уже давно, просто когда-то кто-то забыл внести это в справку. Т.е. методы уже годами работают, только никто об этом не знает... Может они не внесены в справку, т.к. официально находятся в тестовом режиме. Мы можем только гадать. Будет ответ от ТП - отпишусь.
10. karpik666 3856 08.08.16 17:51 Сейчас в теме
(9) точно 21, но там описывается именно про "Выражение упорядочивания" в параметрах, и как в них использовать общие модули.
13. klinval 343 10.08.16 09:29 Сейчас в теме
(10) karpik666, посмотрел 21/22 "Возможности упорядочивания в отчетах" , 20/21 Представление полей компоновки в отчете"и 24/25 "Вычисляемые поля" - там этого нет... Зато есть в 15/16 "Функции выражений компоновки данных" про текущую дату и значение заполнено.
Но оба этих метода объяснимы: ЗначениеЗаполнено - я не заметил, что оно уже есть в справке, а то что ТекущаяДата() работает на СКД - есть упоминание на ИТСе.

Попробую проверить на 8.2 что ещё работает. Отпишусь как проверю

//10.08.16 9:38
Проверил: естественно не заработали методы которых физически не было в на той платформы типа "СтрНайти" (и даже "найти" не заработало), "ТекущийВариантИнтерфейсаКлиентскогоПриложения" и т.д. А остальные заработали.
//9:43
По результатам проверки обновил статью.
7. klinval 343 08.08.16 10:03 Сейчас в теме
Проверил на «8.3.7.1845» и «8.3.6.2390» в файловом режиме. Статью обновил.
11. Synoecium 786 10.08.16 07:42 Сейчас в теме
Сделал в глобальном модуле такую функцию:
Функция глВыполнитьПроизвольныйКод(Арг, ТекстКода,Результат=0) Экспорт
Выполнить(ТекстКода);Возврат Результат;
КонецФункции

и теперь можно вызывать любую функцию или кусок кода на языке 1с из СКД. В том числе СокрЛП()
12. karpik666 3856 10.08.16 07:49 Сейчас в теме
(11) Synoecium, Например такой?
	Для Каждого лРегистр Из Метаданные.РегистрыНакопления Цикл	
		Запрос = Новый Запрос;
		Запрос.Текст = 
		"ВЫБРАТЬ Различные
		|	Регистр.Регистратор
		|ИЗ
		|	РегистрНакопления." + лРегистр.Имя + " КАК Регистр";
		лВыборка = Запрос.Выполнить().Выбрать();
		лНаборЗаписей = РегистрыНакопления[лРегистр.Имя].СоздатьНаборЗаписей();
		Пока лВыборка.Следующий() Цикл
			лНаборЗаписей.Отбор.Регистратор.Установить(лВыборка.Регистратор);
			лНаборЗаписей.Записать(); 
		КонецЦикла; 
	КонецЦикла; 
Показать
15. Synoecium 786 10.08.16 10:44 Сейчас в теме
(12) karpik666, практически любой, но если получать метаданные и вертеть запросы для каждой записи СКД, то будет очень тормозить (если их много конечно)
18. karpik666 3856 10.08.16 11:18 Сейчас в теме
(15) Synoecium, это был сарказм, оставлять метод "ВыполнитьПроизвольныйКод", да и еще и экспортный это огромная уязвимость. такой простенький код как мой может просто уничтожить данные в базе, наверное вишенкой такого метода можно еще выполнять передаваемый код в привилегированном режиме. Если уж хотите выполнять какой-то код из модуля, то лучше передавать наименование метода, и параметры к нему, и обрабатывать его уже в коде. А от вашего способа лучше воздержаться.
21. klinval 343 10.08.16 12:26 Сейчас в теме
(18) karpik666, согласен, что
"ВыполнитьПроизвольныйКод", да и еще и экспортный это огромная уязвимость

Единственное, что хотел добавить: СКД на некоторый код пишет ошибку <Установлен безопасный режим. Выполнение операции запрещено> даже если встроить отчет в БД или добавить во внешние обработки с БезопаснымРежимом=Ложь. Соответственно код в привилегированном режиме из СКД работать не будет, т.к. видимо любой код в вычисляемых выражениях принудительно работает в безопасном режиме и это не отменить.

Естественно ВыполнитьПроизвольныйКод с вызовом из СКД и удалением в привилегированном режиме из ограниченного пользователя я на практике не проверял, т.к. сам таким методом не пользуюсь. Но глобальный экспортный метод ведь не только из СКД можно вызвать...
22. Synoecium 786 10.08.16 12:30 Сейчас в теме
(18) karpik666, в 1с столько дыр в безопасности, что глобальный экспортный метод это такая малость, что даже смешно обсуждать.
19. vec435 17 10.08.16 11:22 Сейчас в теме
(12) karpik666, а можно передать в эту функцию значение поля конкретной записи как какой-нить параметр?
14. klinval 343 10.08.16 09:53 Сейчас в теме
(11) Synoecium, да это понятно. Функции общих модулей уже давно можно было использовать! Вот только что делать если нужно, например "ЧислоПрописью", а база на поддержке? Или пишешь что-нибудь универсальное для публикации на ИС (или для продажи): в инструкции писать, что базу обязательно надо снять с поддержки и внедрить такой-то модуль с таким-то текстом?
А если база своя то можно где-то обойтись и функциями общих модулей - тут согласен. Правда не всегда это будет оптимально в плане производительности.
23. Synoecium 786 10.08.16 12:47 Сейчас в теме
(14) вообще да, согласен. Глобальные методы из коробки - хорошее подспорье для внешних отчетов например. Так что плюс)
16. starik-2005 3088 10.08.16 10:47 Сейчас в теме
Даже экспортные функции и даже на 8.2 работают. Так что не понимаю, в чем новизна статьи.
17. klinval 343 10.08.16 11:03 Сейчас в теме
(16) starik-2005,
Даже экспортные функции и даже на 8.2 работают

Уже который раз пишу: да уже давно работают функции общих модулей. Я это нигде не отрицал и не представлял как своё открытие.
Так что не понимаю, в чем новизна статьи.

Покажите мне место в документации или на ИТС, где написано, что, например, ЧислоПрописью работает в СКД? Нигде этого нет, хотя метод работает ещё с 8.2.

В этом и суть статьи: показать программисту 1С, что некоторые методы, не описанные в документации, вполне себе работают на чистом СКД. Да, эти же методы можно было бы применять через функции общих модулей, но есть минусы, описанные выше в (14).
20. progr-2008 118 10.08.16 11:23 Сейчас в теме
Интересно как дополнение к курсам.
25. klinval 343 29.08.16 09:12 Сейчас в теме
Пришёл ответ от разработчиков (далее цитирую):
Ответ от разработчиков:
В выражениях компоновки данных можно использовать функции общих модулей и функции глобального контекста.
26. herfis 513 29.08.16 09:42 Сейчас в теме
В выражениях компоновки данных можно использовать функции общих модулей и функции глобального контекста.

Может, они имеют в виду - при включенном режиме использования функций общих модулей? Потому что иначе это противоречит твоим исследованиям. Глобальный контекст доступен очень ограниченно.
Результаты сабжевого исследования очень похожи на непреднамеренное "просачивание" контекста в связи с какими-то доработками СКД. Поэтому я почти уверен, что разработчики сами достоверно не знают чего там нового доступно стало в конексте выражений СКД, так как это побочный эффект а не целенаправленный.
27. klinval 343 29.08.16 10:04 Сейчас в теме
(26) herfis, ну да, тот же СокрЛП не работает, хотя тоже функция глобального контекста. Т.е. их ответ явно не полный.
Результаты сабжевого исследования очень похожи на непреднамеренное "просачивание" контекста в связи с какими-то доработками СКД. Поэтому я почти уверен, что разработчики сами достоверно не знают чего там нового доступно стало в конексте выражений СКД, так как это побочный эффект а не целенаправленный.

У меня это тоже основная версия, но никто кроме разработчиков платформы её подтвердить или опровергнуть не может...
28. Aphanas 92 02.09.16 23:16 Сейчас в теме
Также работает метод глобального контекста "XMLСтрока". С помощью него можно быстро получить представление уникального идентификатора любой ссылки: XMLСтрока(Ссылка). Возвращает что-то типа "6a09f20a-8de6-11e1-b3e1-001617ec3f2a". Многие ищут и не находят как получить уникальный идентификатор в запросе. Это способ получения уникального идентификатора в СКД.
primara; Necytij; AllexSoft; Maxanamoon; Andreeei; Aleskey_K; TreeDogNight; Rusel; Drivingblind; Luisor; Kinestetik; user666919_budulau; temsan; kulak1974; Lena272; Pigzilla; ekomova; igormiro; IrinaKostroma; hame1e00n; Gang031; DrAku1a; ifilll; Somebody1; &rew; Saint13; user747571; le0nid; acsent; trumanl; kotenko.viktor; mi1man; ISP; kolya_tlt; Goleff74; Anchoret; chanzer; purgin; Lebowski; tarassov; LexSeIch; JohnyDeath; raystlin; philya; stsasha87; awk; ll13; karpik666; echo77; klinval; zarucheisky; olbu; Synoecium; +53 Ответить
32. kasper076 110 25.08.17 14:16 Сейчас в теме
(28) 1С:Предприятие 8.3 (8.3.10.2466) Синтаксическая ошибка "XMLСтрока". Что я делаю не так?
33. kasper076 110 25.08.17 15:22 Сейчас в теме
(32) (28) В консоли СКД не работает. А если встроить в базу, то работает. Мож конечно консоль кривая.
34. Aphanas 92 30.08.17 12:16 Сейчас в теме
(33) У меня здесь работает во внешнем отчете
https://infostart.ru/public/548198/
35. kasper076 110 31.08.17 09:20 Сейчас в теме
(34)Вот схема:
<?xml version="1.0" encoding="UTF-8"?>
<DataCompositionSchema xmlns="http://v8.1c.ru/8.1/data-composition-system/schema" xmlns:dcscom="http://v8.1c.ru/8.1/data-composition-system/common" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<dataSource>
		<name>ИсточникДанных1</name>
		<dataSourceType>Local</dataSourceType>
	</dataSource>
	<dataSet xsi:type="DataSetQuery">
		<name>НаборДанных1</name>
		<field xsi:type="DataSetFieldField">
			<dataPath>Ссылка</dataPath>
			<field>Ссылка</field>
			<appearance/>
			<inputParameters/>
		</field>
		<dataSource>ИсточникДанных1</dataSource>
		<query>ВЫБРАТЬ
	Организации.Ссылка
ИЗ
	Справочник.Организации КАК Организации</query>
	</dataSet>
	<calculatedField>
		<dataPath>Поле1</dataPath>
		<expression>XMLСтрока(Ссылка)</expression>
		<title xsi:type="v8:LocalStringType">
			<v8:item>
				<v8:lang>ru</v8:lang>
				<v8:content>Поле1</v8:content>
			</v8:item>
		</title>
		<appearance/>
		<inputParameters/>
	</calculatedField>
	<settingsVariant>
		<dcsset:name>Основной</dcsset:name>
		<dcsset:presentation xsi:type="xs:string">Основной</dcsset:presentation>
		<dcsset:settings xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows">
			<dcsset:selection>
				<dcsset:item xsi:type="dcsset:SelectedItemField">
					<dcsset:field>Поле1</dcsset:field>
				</dcsset:item>
			</dcsset:selection>
			<dcsset:outputParameters/>
			<dcsset:item xsi:type="dcsset:StructureItemGroup">
				<dcsset:order>
					<dcsset:item xsi:type="dcsset:OrderItemAuto"/>
				</dcsset:order>
				<dcsset:selection>
					<dcsset:item xsi:type="dcsset:SelectedItemAuto"/>
				</dcsset:selection>
				<dcsset:outputParameters/>
			</dcsset:item>
		</dcsset:settings>
	</settingsVariant>
</DataCompositionSchema>
Показать

Вот код:
&НаСервере
Процедура Команда1НаСервере()
	Перем ДанныеРасшифровкиОбъект;
	
	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(ТекстСхемы);
	СхемаКомпоновкиДанных = СериализаторXDTO.ПрочитатьXML(ЧтениеXML, Тип("СхемаКомпоновкиДанных"));
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, СхемаКомпоновкиДанных.НастройкиПоУмолчанию, ДанныеРасшифровкиОбъект);
	ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных, , ДанныеРасшифровкиОбъект, Ложь);
	ПроцессорВыводаРезультатаОтчета = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВыводаРезультатаОтчета.УстановитьДокумент(РезультатТабличныйДокумент);
	ПроцессорВыводаРезультатаОтчета.НачатьВывод();
	ПроцессорВыводаРезультатаОтчета.Вывести(ПроцессорКомпоновкиДанных);
	ПроцессорВыводаРезультатаОтчета.ЗакончитьВывод();
КонецПроцедуры

&НаКлиенте
Процедура Команда1(Команда)
	Команда1НаСервере();
КонецПроцедуры
Показать

На строке
ПроцессорВыводаРезультатаОтчета.Вывести(ПроцессорКомпоновкиДанных);
выдает ошибку
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(15)}: Ошибка при вызове метода контекста (Вывести)
ПроцессорВыводаРезультатаОтчета.Вывести(ПроцессорКомпоновкиДанных);
по причине:
Ошибка вывода результата
Синтаксическая ошибка "XMLСтрока"

Если же эту схему вставить в макет отчета (даже внешнего) с типом "Схема компоновки данных", то отчет будет формироваться нормально.
36. Aphanas 92 31.08.17 09:52 Сейчас в теме
(35) В строке
"ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных, , ДанныеРасшифровкиОбъект, Ложь);"
процедуры "Команда1НаСервере", вместо "Ложь" нужно поставить "Истина".

ПроцессорКомпоновкиДанных (DataCompositionProcessor)
Инициализировать (Initialize)
Синтаксис:

Инициализировать(<Макет>, <ВнешниеНаборыДанных>, <ДанныеРасшифровки>, <ВозможностьИспользованияВнешнихФункций>)
Параметры:

<Макет> (обязательный)
Тип: МакетКомпоновкиДанных.
Макет, для которого будет выполняться компоновка.

<ВнешниеНаборыДанных> (необязательный)
Тип: Структура.
Ключ структуры соответствует имени внешнего набора данных. Значение структуры - внешнему набору данных.

<ДанныеРасшифровки> (необязательный)
Тип: ДанныеРасшифровкиКомпоновкиДанных.
Объект, в котором нужно заполнить данные расшифровки. Если не указан, то расшифровка заполняться не будет.

<ВозможностьИспользованияВнешнихФункций> (необязательный)
Тип: Булево.
УКАЗЫВАЕТ ВОЗМОЖНОСТЬ ИСПОЛЬЗОВАНИЯ ФУНКЦИИ ОБЩИХ МОДУЛЕЙ КОНФИГУРАЦИИ В ВЫРАЖЕНИЯХ КОМПОНОВКИ ДАННЫХ.
Значение по умолчанию: Ложь.
Merkalov; Aleskey_K; 1C82; CratosX; triviumfan; karachev_og; Kinestetik; user625969_Skreg2016; IrinaKostroma; +9 Ответить
37. kasper076 110 31.08.17 11:03 Сейчас в теме
(36) огромное спасибо. Все оказывается документировано, просто нужно не лениться читать. Еще раз спасибо.
38. Aphanas 92 31.08.17 11:14 Сейчас в теме
40. triviumfan 97 11.06.20 12:45 Сейчас в теме
(36)
УКАЗЫВАЕТ ВОЗМОЖНОСТЬ ИСПОЛЬЗОВАНИЯ ФУНКЦИИ ОБЩИХ МОДУЛЕЙ КОНФИГУРАЦИИ В ВЫРАЖЕНИЯХ КОМПОНОВКИ ДАННЫХ

Спасибо тебе, добрый человек)
39. KAV2 157 15.11.17 12:12 Сейчас в теме
(28)Но только этот способ получения уникального идентификатора не явуляется способом получения в запросе :-)
29. German_Tagil 43 06.12.16 20:49 Сейчас в теме
30. kasper076 110 31.01.17 08:04 Сейчас в теме
Мин(), Макс() тож не робят.
31. echo77 1906 11.03.17 13:28 Сейчас в теме
(30) Оно и не надо, вместо них есть агрегатные функции Минимум() и Максимум()
41. Merkalov 11 22.09.21 02:06 Сейчас в теме
Долго копался, в общем, если у вас выскакивает синтаксическая ошибка при использовании глобальных методов, то вероятно всего вы используете программный способ формирования отчета и в таком случае необходимо выставить параметр для использования глобальных методов (любых, а не только из ваших общий модулей!)

Четвертый параметр в истину:
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);


Особенность в том, что если отчет формируется стандартно, без кода - то все работает, т.е по умолчанию там ИСТИНА, но при программном формировании по умолчанию там ЛОЖЬ.

Хотя мне следовало прочитать комментарии выше, где уже был дан такой же ответ :c
Прикрепленные файлы:
KamranV21; vld_trade; +2 Ответить
Оставьте свое сообщение