1с скд вычисляемые поля синтаксическая ошибка

Вычисляемое поле в СКД — Синтаксическая ошибка ☑ 0

Klesk

20.12.22

16:02

Что не так?

Выбор когда УправлениеКонтактнойИнформацией.ЗначенияКонтактнойИнформацииОбъекта(Объект.Партнер,ПредопределенноеЗначение(«Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты»)).Количество()>0 Тогда

УправлениеКонтактнойИнформацией.ЗначенияКонтактнойИнформацииОбъекта(Объект.Партнер,ПредопределенноеЗначение(«Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты»))[0].Значение

Конец

1

Klesk

20.12.22

16:06


2

Klesk

20.12.22

16:08

    Выбор когда УправлениеКонтактнойИнформацией.ЗначенияКонтактнойИнформацииОбъекта(Объект.Партнер,ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты")).Количество()>0 Тогда

    УправлениеКонтактнойИнформацией.ЗначенияКонтактнойИнформацииОбъекта(Объект.Партнер,ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты"))[0].Значение

    Конец

3

Klesk

20.12.22

16:11

Выбор когда УправлениеКонтактнойИнформацией.ЗначенияКонтактнойИнформацииОбъекта(Партнер,ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты")).Количество()>0 Тогда

    УправлениеКонтактнойИнформацией.ЗначенияКонтактнойИнформацииОбъекта(Партнер,ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты"))[0].Значение

    Конец



убрал Объект, все равно

4

Гипервизор

20.12.22

16:29

(0) Что за ошибка-то? Этот модуль можно использовать в выражениях СКД?

5

Klesk

20.12.22

16:36

(4) Синтаксическая ошибка

{ОбщаяФорма.ФормаОтчета.Форма(1148)}:        СкомпоноватьРезультат(РежимКомпоновкиРезультата.Авто);

{ОбщаяФорма.ФормаОтчета.Форма(594)}:        СформироватьНепосредственно();

по причине:

Ошибка исполнения отчета

по причине:

Ошибка при выполнении обработчика — ‘ПриКомпоновкеРезультата’

по причине:

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

{ВнешнийОтчет.ВыручкаИСебестоимостьПродажСПочтовымиАдресами.МодульОбъекта(18)}:    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровки);

{ОбщаяФорма.ФормаОтчета.Форма(1148)}:        СкомпоноватьРезультат(РежимКомпоновкиРезультата.Авто);

по причине:

Ошибка компоновки макета

по причине:

Ошибка в выражении «(Выбор когда УправлениеКонтактнойИнформацией.ЗначенияКонтактнойИнформацииОбъекта(Партнер,ПредопределенноеЗначение(«Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты»)).Количество()>0 Тогда

    УправлениеКонтактнойИнформацией.ЗначенияКонтактнойИнформацииОбъекта(Партнер,ПредопределенноеЗначение(«Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты»))[0].Значение

    Конец)»

по причине:

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

6

Klesk

20.12.22

16:42

Общий модуль конфигурации

Сервер, Внешнее соединение, Клиент (обычное приложение)

Если оставить только УправлениеКонтактнойИнформацией.ЗначенияКонтактнойИнформацииОбъекта(Партнер,ПредопределенноеЗначение(«Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты»))

ошибки нет

7

vicof

20.12.22

16:51

УправлениеКонтактнойИнформацией.ЗначенияКонтактнойИнформацииОбъекта(Партнер,ПредопределенноеЗначение(«Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты»)) = Неопределено у каких-нибудь записей

8

Klesk

20.12.22

17:22

(7) там Возврат Запрос.Выполнить().Выгрузить();

в любом случае таблица

9

Kassern

20.12.22

17:25

(8) А зачем это делать в вычисляемом поле? Если речь идет про СКД, что мешает там получить нужную таблицу и привязать ее к основной?

10

Klesk

20.12.22

17:27

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

11

Kassern

20.12.22

17:28

(10) Потому что это корявое решение, пытаться получить таблицу в вычисляемое поле.

12

Kassern

20.12.22

17:30

Имхо все дело в синтаксисе, которые не проходит ваше выражение из-за точки.

13

Kassern

20.12.22

17:30

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

14

Klesk

20.12.22

17:30

(11) согласен, просто изначально думал это будет проще типовыми методами

15

Renium1963

20.12.22

17:31

А разве так можно «[0].Значение» ?

16

Kassern

20.12.22

17:32

(14) вы можете написать еще одну функцию, которая вернет первый элемент таблицы, либо неопределено (к примеру). И вот уже ее использовать, но все равно это корявое решение имхо))

17

vicof

20.12.22

17:37

Почта   = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(ДанныеОСотруднике.ФизическоеЛицо, Справочники.ВидыКонтактнойИнформации.EMailФизическиеЛица,            ТекущаяДата, Истина);

18

Kassern

20.12.22

17:38

(17) А если у физического лица несколько почтовых ящиков?

19

vicof

20.12.22

17:43

(18) Или свою функцию запилить, чтобы возвращали список одной строчкой. Или сделать несколько полей для контактной информации, или брать первый. Для начала можно почитать задачу, а там уже принимать решение.

20

Klesk

20.12.22

19:12

(15) да, нельзя

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

https://its.1c.ru/db/metod8dev/content/1810/hdoc

21

Klesk

20.12.22

20:23

я «победил»… всё выводится

ОбщегоНазначения.ВыгрузитьКолонку(УправлениеКонтактнойИнформацией.ЗначенияКонтактнойИнформацииОбъекта(Партнер,ПредопределенноеЗначение(«Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты»)),»Значение»)

22

Klesk

20.12.22

20:23

ОбщегоНазначения.ВыгрузитьКолонку(УправлениеКонтактнойИнформацией.ЗначенияКонтактнойИнформацииОбъекта(Партнер,ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты")),"Значение")[\1C]


23

Klesk

20.12.22

20:23

ОбщегоНазначения.ВыгрузитьКолонку(УправлениеКонтактнойИнформацией.ЗначенияКонтактнойИнформацииОбъекта(Партнер,ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты")),"Значение")[\1С]


24

Renium1963

21.12.22

10:43

(21) Ну, вот и все… а сколько бумаги исписали то на комментарии )))

1C 8 Система компоновки данных (СКД): вывод вычисляемых полей при программном формировании отчета

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

Найденные решения:

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

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

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

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

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

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

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

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

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

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

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

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

Оцените, помогло ли Вам предоставленное описание решения ошибки?




© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.

22-05-2015

Журавлев А.С.
(www.azhur-c.ru)

Всё работало хорошо, но вдруг перестало, после того, как я внес изменения в макет СКД:

При формировании отчета появлялась надпись «Синтаксическая ошибка» и всё.

Когда убрал некоторые секции, методом деструктивного исключения обнаружил, что глючит зеленая секция.

Благо, CTRL+Z сработал и вернул изменения назад (каюсь, рабочей версии отчета не было).

Вздохнул было, но потом опять ошибка возникла. И тут до меня дошло — проблема в пустых ячейках, где указан тип ячейки «Параметр», но не указано, значение какого параметра брать. Поменял тип на Текст — и все заработало.

Экие тонкости в 1С, однако!

Ошибка при вызове метода контекста (УстановитьПредставлениеВыраженияДетальныхЗаписей

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

СкриншотРедактирование пользовательского поля

Полный текст ошибки

{mngbase/dcsexpsuserfield.lf(8)}: Ошибка при вызове метода контекста (УстановитьПредставлениеВыраженияДетальныхЗаписей) Data.SetDetailRecordExpressionPresentation(DetailRecordExpressionPresentation); по причине: Синтаксическая ошибка

Причина

Наличие синтаксической ошибки в полях

  • даже лишние пробелы в поле «Выражение детальных записей»
  • неверное именование выбранного поля
  • не использование квадратных скобок для полей

Я знаю, что трачу половину денег на рекламу впустую, но не знаю, какую именно половину.

Вычисляемые поля в системе компоновки данных

Автор sn_feld, 14 апр 2015, 11:17

0 Пользователей и 1 гость просматривают эту тему.

Помогите, пожалуйста, разобраться с проблемой. Про создании схемы в системе подготовки данных пытаюсь использовать вычисляемые поля. Если я в выражении для вычисляемого поля использую только поля из запроса, то все работает правильно. Но если использую обращение к функции общего модуля (например, ОбщегоНазначения.РассчитатьВремя(), функция имеет свойство ЭКСПОРТ), то при работе появляется сообщение :Синтаксическая ошибка «ОбщегоНазначения.РассчитатьВремя». В чем дело?


приведите полностью выражение вычисляемого поля

Получил помощь — скажи СПАСИБО.
Разобрался сам — расскажи другим.


Я так и написал в выражении:  ОбщегоНазначения.РассчитатьВремя()
А в общий модуль ОбщегоНазначения добавил функцию:
Функция РассчитатьВремя() Экспорт
    Возврат 60;
КонецФункции
И даже в таком тривиальном применении получил сообщение «Синтаксическая ошибка: ОбщегоНазначения.РассчитатьВремя»


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


Функции общих модулей

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

СокращенноеНаименование(Документы.Ссылка, Документы.Дата, Документы.Номер)

В данном примере будет осуществлен вызов функции «СокращенноеНаименование» из общего модуля конфигурации.

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

Кроме того, функции общих модулей не могут быть использованы в выражениях пользовательских полей

Получил помощь — скажи СПАСИБО.
Разобрался сам — расскажи другим.


Цитата:»Отметим, что использование функций общих модулей разрешено только при указании соответствующего параметра процессора компоновки данных.»
Хорошо бы еще Вы сказали, что этим параметром должна быть ИСТИНА в значении четвертого аргумента при инициализации процессора компоновки, а именно:
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,,Истина);
В этом случае подхватываются функции из общего модуля.
Поистине велик и могуч ИНТЕРНЕТ!


«Ну вы блин даете!» (с)

а где у вас сказано, что СКД программно формируется? ;)

Получил помощь — скажи СПАСИБО.
Разобрался сам — расскажи другим.


Понравилась статья? Поделить с друзьями:

Интересное по теме:

  • 1с синхронизация ошибка доступа к файлу
  • 1с синхронизация данных ошибка формата потока
  • 1с синхронизация данных ошибка получения
  • 1с синтаксическая ошибка шаблон позначениям не существует
  • 1с синтаксическая ошибка объединить все

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии