1с скд синтаксическая ошибка

Обновлено: 04.07.2024

Здравствуйте, уважаемый форум.Очень прошу помощи.В типовом отчете "Расчетные листки" меняю макет, при этом заполняя параметры группировок и изменяя в варианте вывода отчета группировки.Но при запуске отчета получаю ошибку Код <ВнешнийОтчет.РасчетныеЛистки.МодульОбъекта>: Ошибка при вызове метода контекста (Выполнить) МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); по причине: Ошибка компоновки макета по причине: Ошибка в выражении по причине: Синтаксическая ошибка Заранее благодарна за любые советы,идеи, мысли

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

выгрузи схему после изменений и попробуй запихнуть ее в консоль скд

"Рисунок" заливаю на а сюда ссылку на него. В профиль вставь фотку. Только так можно ожидать помощи. :)

Ваше внимание к моей персоне,несомненно, мне приятно.Но если можно,пожалуйста, давайте вернемся к теме. Фото обещаю выложить

И на ничего не понятно. Хоть бы обвела куда смотреть.

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

Все параметры перенесла? в других макетах все так же осталось? Уверена?

да, уверена. параметров пустых ни в одной группировке нет. других макетов нет

У меня в 2.5.66 не открывается. Предыдущие релизы ставить лень

В других макетах в том же отчете. Имею ввиду макеты других группировок и полей, которые уже описаны в станадртном отчете

УПП поди для Украины. sweety-twetty 10 - 10.12.12 - 18:16 Клятвенно обещаю фотографию

Но вообще, они как две капли воды похожи были с год назад

я в теме писала - у меня УПП. в других группировках все заполнено

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

Описание ошибки:
Отчет на СКД формируется программно. При этом используется одно вычисляемое поле, в выражении которого указана экспортная функция глобального модуля. При формировании отчета возникает ошибка: : Ошибка при вызове метода контекста (Следующий) ЭлементРезультата = ПроцессорКомпановки.Следующий(); по причине: Ошибка компоновки данных по причине: Ошибка получения данных по причине: Ошибка в выражении по причине: Синтаксическая ошибка "УчетДрагМеталловГлобальный.ОтчетКоличествоМеталла"

1с 8 скд вывод вычисляемого поля с выражением при программном выводе

1с 8 ошибка при выводе вычисляемого поля с выражением отчета на СКД при программном выводе

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

Инициализировать(<Макет>, <ВнешниеНаборыДанных>, <ДанныеРасшифровки>, <ВозможностьИспользованияВнешнихФункций>),
где <ВозможностьИспользованияВнешнихФункций> (необязательный)
Тип: Булево.
Указывает возможность использования функции общих модулей конфигурации в выражениях компоновки данных.
Значение по умолчанию: Ложь

Поэтому в код программного вывода отчета было добавлено отсутствующее условие (выделено жирным):

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

Но после этого СКД отказалсь вывести отчет, рапортуя ошибку:

1с 8 скд ошибка вывода вычисляемого поля отчета на СКД использующего выражение с функцией при программном выводе

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

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

1с 8 скд использование функции в выражении вычисляемого поля программно выводимого отчета

А для случая, если функция для расчета выражения вычисляемого поля скд, размещена не в глобальном модуле, то необходимо указать и имя самого модуля, содержащего используемую функцию (пример рис. 01).

Ок, лезем на любой ресурс, коих полно, копируем код, правим под свои нужды и вуаля! Отчет работает, только при попытке расшифровать выскакивает какое то окошко с цифрами :( Что делать?

Решение

На самом деле в этом окошке нам сообщается идентификатор расшифровки компоновки данных. Имея этот идентификато и данные расшифровки, мы можем сделать все, что душе угодно.

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

Обработка расшифровки открывает значение, но вы можете прописать любое действие.

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

(1) Да, сорри этот код можно выполнить в толстом клиенте упр. приложения. Я когда выкладывал статью делал пример как раз на базе. которая переходит на тонкие формы и там был период когда режим работы обычное приложение, а форма управляемая.
Тут самое главное смысл получения расшифровки по идентификатору.

На УФ надо положить "Данные расшифровки" во временное хранилище. Далее:

Если ТипЗнч(Структура.Расшифровка) = Тип("ИдентификаторРасшифровкиКомпоновкиДанных") тогда
ЭлементРасшифровки = Данные.Элементы[Структура.Расшифровка];
Если ТипЗнч(ЭлементРасшифровки) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
Для каждого Поле Из ЭлементРасшифровки.ПолучитьПоля() Цикл
Возврат Поле.Значение;
КонецЦикла;
КонецЕсли;
КонецЕсли;

На форму добавить реквизит "ДанныеРасшифровки" с типом "Строка"

&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)

&НаСервере
Процедура КонтрагентПриИзмененииНаСервере()

Если Контрагент.Ссылка.Пустая() Тогда
Возврат;
КонецЕсли;

// Создаем СКД. Устанавливаем параметры
СхемаКД = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");

ПараметрКД = Настройки.ПараметрыДанных.Элементы.Найти("Контрагент");
ПараметрКД.Значение = Контрагент;

// Создаем Макет КД
КомпоновщикМакетаКД = Новый КомпоновщикМакетаКомпоновкиДанных;
ДанныеРасшифровкиКомпоновкиДанных = Новый ДанныеРасшифровкиКомпоновкиДанных;
МакетКД = КомпоновщикМакетаКД.Выполнить(СхемаКД, Настройки, ДанныеРасшифровкиКомпоновкиДанных);

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

// Выводим
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ТабДок);
ПроцессорВывода.НачатьВывод();
ПроцессорВывода.Вывести(ПроцессорКД);
ДанныеРасшифровки = ПоместитьВоВременноеХранилище(ДанныеРасшифровкиКомпоновкиДанных);

&НаКлиенте
Процедура ТабДокОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;
Данные = Сервер(Расшифровка);
ОткрытьЗначение(Данные);

&НаСервере
Функция Сервер(Расшифровка)

Если ТипЗнч(Расшифровка) = Тип("ИдентификаторРасшифровкиКомпоновкиДанных") тогда
ЭлементРасшифровки = Данные.Элементы[Расшифровка];
Если ТипЗнч(ЭлементРасшифровки) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
Для каждого Поле Из ЭлементРасшифровки.ПолучитьПоля() Цикл
Возврат Поле.Значение;
КонецЦикла;
КонецЕсли;
КонецЕсли;

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

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


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

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

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

Читайте также: