Klesk
20.12.22
✎
16:02
Что не так?
Выбор когда УправлениеКонтактнойИнформацией.ЗначенияКонтактнойИнформацииОбъекта(Объект.Партнер,ПредопределенноеЗначение(«Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты»)).Количество()>0 Тогда
УправлениеКонтактнойИнформацией.ЗначенияКонтактнойИнформацииОбъекта(Объект.Партнер,ПредопределенноеЗначение(«Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты»))[0].Значение
Конец
Klesk
20.12.22
✎
16:06
Klesk
20.12.22
✎
16:08
Выбор когда УправлениеКонтактнойИнформацией.ЗначенияКонтактнойИнформацииОбъекта(Объект.Партнер,ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты")).Количество()>0 Тогда
УправлениеКонтактнойИнформацией.ЗначенияКонтактнойИнформацииОбъекта(Объект.Партнер,ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты"))[0].Значение
Конец
Klesk
20.12.22
✎
16:11
Выбор когда УправлениеКонтактнойИнформацией.ЗначенияКонтактнойИнформацииОбъекта(Партнер,ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты")).Количество()>0 Тогда
УправлениеКонтактнойИнформацией.ЗначенияКонтактнойИнформацииОбъекта(Партнер,ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты"))[0].Значение
Конец
убрал Объект, все равно
Гипервизор
20.12.22
✎
16:29
(0) Что за ошибка-то? Этот модуль можно использовать в выражениях СКД?
Klesk
20.12.22
✎
16:36
(4) Синтаксическая ошибка
{ОбщаяФорма.ФормаОтчета.Форма(1148)}: СкомпоноватьРезультат(РежимКомпоновкиРезультата.Авто);
{ОбщаяФорма.ФормаОтчета.Форма(594)}: СформироватьНепосредственно();
по причине:
Ошибка исполнения отчета
по причине:
Ошибка при выполнении обработчика — ‘ПриКомпоновкеРезультата’
по причине:
Синтаксическая ошибка
{ВнешнийОтчет.ВыручкаИСебестоимостьПродажСПочтовымиАдресами.МодульОбъекта(18)}: МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровки);
{ОбщаяФорма.ФормаОтчета.Форма(1148)}: СкомпоноватьРезультат(РежимКомпоновкиРезультата.Авто);
по причине:
Ошибка компоновки макета
по причине:
Ошибка в выражении «(Выбор когда УправлениеКонтактнойИнформацией.ЗначенияКонтактнойИнформацииОбъекта(Партнер,ПредопределенноеЗначение(«Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты»)).Количество()>0 Тогда
УправлениеКонтактнойИнформацией.ЗначенияКонтактнойИнформацииОбъекта(Партнер,ПредопределенноеЗначение(«Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты»))[0].Значение
Конец)»
по причине:
Синтаксическая ошибка
Klesk
20.12.22
✎
16:42
Общий модуль конфигурации
Сервер, Внешнее соединение, Клиент (обычное приложение)
Если оставить только УправлениеКонтактнойИнформацией.ЗначенияКонтактнойИнформацииОбъекта(Партнер,ПредопределенноеЗначение(«Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты»))
ошибки нет
vicof
20.12.22
✎
16:51
УправлениеКонтактнойИнформацией.ЗначенияКонтактнойИнформацииОбъекта(Партнер,ПредопределенноеЗначение(«Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты»)) = Неопределено у каких-нибудь записей
Klesk
20.12.22
✎
17:22
(7) там Возврат Запрос.Выполнить().Выгрузить();
в любом случае таблица
Kassern
20.12.22
✎
17:25
(8) А зачем это делать в вычисляемом поле? Если речь идет про СКД, что мешает там получить нужную таблицу и привязать ее к основной?
Klesk
20.12.22
✎
17:27
(9) нет, я могу и функцию запилить в общем модуле, просто интересно, почему так не получается
Kassern
20.12.22
✎
17:28
(10) Потому что это корявое решение, пытаться получить таблицу в вычисляемое поле.
Kassern
20.12.22
✎
17:30
Имхо все дело в синтаксисе, которые не проходит ваше выражение из-за точки.
Kassern
20.12.22
✎
17:30
К функции вы можете обратиться, а вот через точку получить результат — вряд ли.
Klesk
20.12.22
✎
17:30
(11) согласен, просто изначально думал это будет проще типовыми методами
Renium1963
20.12.22
✎
17:31
А разве так можно «[0].Значение» ?
Kassern
20.12.22
✎
17:32
(14) вы можете написать еще одну функцию, которая вернет первый элемент таблицы, либо неопределено (к примеру). И вот уже ее использовать, но все равно это корявое решение имхо))
vicof
20.12.22
✎
17:37
Почта = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(ДанныеОСотруднике.ФизическоеЛицо, Справочники.ВидыКонтактнойИнформации.EMailФизическиеЛица, ТекущаяДата, Истина);
Kassern
20.12.22
✎
17:38
(17) А если у физического лица несколько почтовых ящиков?
vicof
20.12.22
✎
17:43
(18) Или свою функцию запилить, чтобы возвращали список одной строчкой. Или сделать несколько полей для контактной информации, или брать первый. Для начала можно почитать задачу, а там уже принимать решение.
Klesk
20.12.22
✎
19:12
(15) да, нельзя
Выражение вычисляемого поля описывается на языке выражений компоновки данных. В выражениях вычисляемого поля есть ограничение — в нем нельзя использовать вычисляемые поля.
https://its.1c.ru/db/metod8dev/content/1810/hdoc
Klesk
20.12.22
✎
20:23
я «победил»… всё выводится
ОбщегоНазначения.ВыгрузитьКолонку(УправлениеКонтактнойИнформацией.ЗначенияКонтактнойИнформацииОбъекта(Партнер,ПредопределенноеЗначение(«Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты»)),»Значение»)
Klesk
20.12.22
✎
20:23
ОбщегоНазначения.ВыгрузитьКолонку(УправлениеКонтактнойИнформацией.ЗначенияКонтактнойИнформацииОбъекта(Партнер,ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты")),"Значение")[\1C]
Klesk
20.12.22
✎
20:23
ОбщегоНазначения.ВыгрузитьКолонку(УправлениеКонтактнойИнформацией.ЗначенияКонтактнойИнформацииОбъекта(Партнер,ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты")),"Значение")[\1С]
Renium1963
21.12.22
✎
10:43
(21) Ну, вот и все… а сколько бумаги исписали то на комментарии )))
1C 8 Система компоновки данных (СКД): вывод вычисляемых полей при программном формировании отчета
Описание ошибки:
Отчет на СКД формируется программно. При этом используется одно вычисляемое поле, в выражении которого указана экспортная функция глобального модуля. При формировании отчета возникает ошибка:
{Форма.ФормаОтчета.Форма(137)}: Ошибка при вызове метода контекста (Следующий)
ЭлементРезультата = ПроцессорКомпановки.Следующий();
по причине:
Ошибка компоновки данных
по причине:
Ошибка получения данных
по причине:
Ошибка в выражении
по причине:
Синтаксическая ошибка «УчетДрагМеталловГлобальный.ОтчетКоличествоМеталла»
Найденные решения:
Подробное изучение методической информации дало понять, что при программном выводе отчета в коде было отключено использование внешних функций. См. текст из синтаксис-помощника метода Инициализировать() процессора компоновки данных (ПроцессорКомпоновкиДанных):
Инициализировать(<Макет>, <ВнешниеНаборыДанных>, <ДанныеРасшифровки>, <ВозможностьИспользованияВнешнихФункций>),
где <ВозможностьИспользованияВнешнихФункций> (необязательный)
Тип: Булево.
Указывает возможность использования функции общих модулей конфигурации в выражениях компоновки данных.
Значение по умолчанию: Ложь
Поэтому в код программного вывода отчета было добавлено отсутствующее условие (выделено жирным):
ПроцессорКомпановки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпановки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
Но после этого СКД отказалсь вывести отчет, рапортуя ошибку:
{Форма.ФормаОтчета.Форма(137)}: Ошибка при вызове метода контекста (Следующий)
ЭлементРезультата = ПроцессорКомпановки.Следующий();
по причине:
Ошибка компоновки данных
по причине:
Ошибка получения данных
по причине:
Функция не найдена «УчетДрагМеталловГлобальный.ОтчетКоличествоМеталла»
При этом функция по всем правилам была экспортной и к этому моменту проверок размещена в глобальном модуле. Поэтому название модуля было исключено из значения выражения вычисляемого поля системы компоновки данных и отчет вывелся.
А для случая, если функция для расчета выражения вычисляемого поля скд, размещена не в глобальном модуле, то необходимо указать и имя самого модуля, содержащего используемую функцию (пример рис. 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, удивляться нечему — синтаксис, язык СКД и встроенный язык модулей конфигурации не одно и то же.
Функции общих модулей
Выражение механизма компоновки данных может содержать вызовы функций глобальных общих модулей конфигурации и неглобальных общих модулей, с установленным свойством Клиент. Никакого дополнительно синтаксиса для вызова таких функций не требуется. Пример:
СокращенноеНаименование(Документы.Ссылка, Документы.Дата, Документы.Номер)
В данном примере будет осуществлен вызов функции «СокращенноеНаименование» из общего модуля конфигурации.
Отметим, что использование функций общих модулей разрешено только при указании соответствующего параметра процессора компоновки данных.
Кроме того, функции общих модулей не могут быть использованы в выражениях пользовательских полей
Получил помощь — скажи СПАСИБО.
Разобрался сам — расскажи другим.
Цитата:»Отметим, что использование функций общих модулей разрешено только при указании соответствующего параметра процессора компоновки данных.»
Хорошо бы еще Вы сказали, что этим параметром должна быть ИСТИНА в значении четвертого аргумента при инициализации процессора компоновки, а именно:
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,,Истина);
В этом случае подхватываются функции из общего модуля.
Поистине велик и могуч ИНТЕРНЕТ!
«Ну вы блин даете!» (с)
а где у вас сказано, что СКД программно формируется?
Получил помощь — скажи СПАСИБО.
Разобрался сам — расскажи другим.