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

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

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

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

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

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

Экие тонкости в 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) Ну, вот и все… а сколько бумаги исписали то на комментарии )))

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

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

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

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

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

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

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

Я

  

Klesk

20.12.22 — 16:02

Что не так?

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

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

Конец

  

Klesk

1 — 20.12.22 — 16:06

[1C]

  

Klesk

2 — 20.12.22 — 16:08

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

    Конец

  

Klesk

3 — 20.12.22 — 16:11

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

    Конец

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

  

Гипервизор

4 — 20.12.22 — 16:29

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

  

Klesk

5 — 20.12.22 — 16:36

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

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

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

по причине:

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

по причине:

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

по причине:

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

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

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

по причине:

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

по причине:

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

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

    Конец)»

по причине:

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

  

Klesk

6 — 20.12.22 — 16:42

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

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

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

ошибки нет

  

vicof

7 — 20.12.22 — 16:51

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

  

Klesk

8 — 20.12.22 — 17:22

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

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

  

Kassern

9 — 20.12.22 — 17:25

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

  

Klesk

10 — 20.12.22 — 17:27

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

  

Kassern

11 — 20.12.22 — 17:28

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

  

Kassern

12 — 20.12.22 — 17:30

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

  

Kassern

13 — 20.12.22 — 17:30

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

  

Klesk

14 — 20.12.22 — 17:30

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

  

Renium1963

15 — 20.12.22 — 17:31

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

  

Kassern

16 — 20.12.22 — 17:32

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

  

vicof

17 — 20.12.22 — 17:37

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

  

Kassern

18 — 20.12.22 — 17:38

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

  

vicof

19 — 20.12.22 — 17:43

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

  

Klesk

20 — 20.12.22 — 19:12

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

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

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

  

Klesk

21 — 20.12.22 — 20:23

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

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

  

Klesk

22 — 20.12.22 — 20:23

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

  

Klesk

23 — 20.12.22 — 20:23

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

  

Renium1963

24 — 21.12.22 — 10:43

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

Синтаксическая ошибка в запросе СКД

Автор Лесной Лес, 28 апр 2015, 16:17

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

Не могу понять в чем ошибка синтаксиса при использовании функции Разностьдат

ВЫБРАТЬ
   Номенклатура.НаименованиеПолное,
   Номенклатура.Сертификат.ДатаОкон,
   Номенклатура.Сертификат.СрокДейст
   РАЗНОСТЬДАТ(Номенклатура.Сертификат.ДатаОкон, Номенклатура.Сертификат.СрокДейст, День)

      ИЗ
   Справочник.Номенклатура КАК Номенклатура
ГДЕ
       (Номенклатура.Сертификат.СрокДейст < ДОБАВИТЬКДАТЕ(&ТекущаяДата, ДЕНЬ, &Дни)
         ИЛИ Номенклатура.Сертификат.ДатаОкон < ДОБАВИТЬКДАТЕ(&ТекущаяДата, ДЕНЬ, &Дни))

Параметры вроде все указал



Может дата пустая, поэтому и возникает ошибка.


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


Теги:

  • Форум База

  • Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4

  • Конфигурирование, программирование в 1С Предприятие 8

  • Синтаксическая ошибка в запросе СКД

Похожие темы (5)

Рейтинг@Mail.ru

Rambler's Top100

Поиск

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

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

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

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

20 лет ребенку… не занимайтесь педофилией :)

Какая педофилия после 18-ти?))) Уже можно во все тяжкие))

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

Все так говорят… А вот ты выложи сначала :)

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

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

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

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

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

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

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

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

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

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

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

bless18
22.11.2012 11:08 Прочитано: 3997

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

Yandex
Возможно, вас также заинтересует

Реклама на портале

E_Migachev
22.11.2012 12:09 Ответ № 1

(0) bless18, так этот функционал по умолчанию сам настроен. Правк клавишей мыши, новый элемент.

bless18
22.11.2012 12:29 Ответ № 2

В режме предприятие доступны сейчас варианты ВывестиСписок и НастройкаСписка..
а в режиме конфигуратор да — правой кнопкой, НовыйЭлемент..

E_Migachev
22.11.2012 13:03 Ответ № 3

(2) bless18, на форме это табличное поле, какой его тип?

bless18
22.11.2012 13:19 Ответ № 4

На форме это ПанельОтбора

bless18
22.11.2012 13:20 Ответ № 5

С табличной частью, тип которой КомпоновщикНастроек.Настройки.Отбор

bless18
22.11.2012 13:21 Ответ № 6

Это данные )
а тип: ОтборКомпоновкиДанных

E_Migachev
22.11.2012 14:14 Ответ № 7

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

bless18
22.11.2012 14:20 Ответ № 8

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

E_Migachev
22.11.2012 15:23 Ответ № 9

(8) bless18, воттт.. что-то не так *09
попробуй удалить таб поле с формы добавить по новой

bless18
22.11.2012 15:38 Ответ № 10

Спасибо за совет.
Заработало! )

bless18
22.11.2012 15:50 Ответ № 11

а при формировании отчета выдается ошибка:

Ошибка компоновки макета
по причине:
Ошибка в выражении
по причине:
Синтаксическая ошибка

E_Migachev
22.11.2012 16:23 Ответ № 12

(11) bless18, зайди в конструктор запроса в СКД, там увидишь чего за ошибка

Подсказка: Для быстрого перемещения к последнему ответу или к вопросу используйте или .

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)

Добрый день. Озадачили меня хитрым заданием — требуется создать обработку, на форме которой будут отображаться результаты различных складских отчетов.

Что я сделал:

1. Добавил реквизит формы — РезультатОтчета(тип табличный документ)

2. Следующий код:

        Отчет = Отчеты.ВедомостьПоТоварамНаСкладах.ПолучитьМакет(«ОсновнаяСхемаКомпоновкиДанных»);

    НастройкиОтчета = Отчет.НастройкиПоУмолчанию;

    
    КомпоновщикМакетаОтчета = Новый КомпоновщикМакетаКомпоновкиДанных;

    

    Макет = КомпоновщикМакетаОтчета.Выполнить(Отчет, НастройкиОтчета);

    ПроцессорКомпоновкиОтчета = Новый ПроцессорКомпоновкиДанных;

    ПроцессорКомпоновкиОтчета.Инициализировать(Макет);

    РезультатОтчета.Очистить();

    ПроцессорКомпоновкиОтчета = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

    ПроцессорКомпоновкиОтчета.УстановитьДокумент(РезультатОтчета);

    ПроцессорКомпоновкиОтчета.Вывести(ПроцессорКомпоновкиОтчета);

При выполнении, на строке «ПроцессорКомпоновкиОтчета.Инициализировать(Макет);» возникает ошибка:

«по причине:

Ошибка компоновки данных

по причине:

Ошибка инициализации

по причине:

Ошибка в выражении

по причине:

Синтаксическая ошибка «ТекущаяДатаСеанса»»

Макет, что передаю в параметры — не пустой. Наверное, что-то упустил…

Заранее спасибо!

Обновлено: 27.01.2023

Доброго всем дня.
В СКД в запросе использую параметр ТекДата, на вкладке Параметры в поле Выражение пишу ТекущаяДата(). Отчёт даже не открывается, пишет «значение не является значением объектного типа (ДоступныеЗначения)». Что это? 1С сломала выражения для параметров СКД на управляемых формах?

Всем спасибо, выяснилось, что я когда копировал отчёт, не посмотрел что там в форме ПриОткрытии написано обращение к одному из параметров, которых в новом отчёте нет. Блин, плохо когда ошибка такая неинформативная, непонятно, на какое поле ругается.

какая версия платформы ?
у меня на 8.3.14.1694 работает

«значение не является значением объектного типа ( ДоступныеЗначения )»

(4) Я умею читать. Только в этом поле ничего нет. Поэтому и спрашиваю.

(6) Ну, так ругается на «Доступные значения», поле которых есть не только на вкладке «Параметры», но и на первой вкладке, «Наборы данных», если параметр используется как поле.
Из-за того, что не было предоставлено ни скринов, ни самого отчета, непонятно, что в отчете заполнено правильно, а что нет.
Еще возможно, сломались настройки сохраненного варианта, можно попробовать сбросить на по умолчанию.
Как заметили в (2) указанное выражение работает, в том числе и на 8.3.16.1296 (проверено мной).
Для самостоятельной проверки повторения проблемы достаточно создать пустой отчет с единственным параметром, и проверить его (отчета) открытием.

(3) Я вроде русским языком написал — «пишу в поле Выражение»

ТекущаяДатаСеанса() не подойдёт?
И еще момент — может ДоступныеЗначения поломались? Список с пустыми или битыми значениями, например.

Всем спасибо, выяснилось, что я когда копировал отчёт, не посмотрел что там в форме ПриОткрытии написано обращение к одному из параметров, которых в новом отчёте нет. Блин, плохо когда ошибка такая неинформативная, непонятно, на какое поле ругается.

(9) Если ошибка возникала в обработчике события ПриОткрытии(), то все там должно быть информативно. Нужно было всего лишь, нажать кнопку «Подробно» и скопировать весь текст от туда сюда в тему при составлении своего вопроса. Там должен был быть и кусок кода, и название модуля, и номер стоки в нем.
А так это ваш вопрос абсолютно не информативен: ни полного текста ошибки, ни скринов, ни отчета.

Преподаватель 1С
Санкт-Петербург
зарплата от 100 000 руб. до 120 000 руб.
Временный (на проект)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Как задать вопрос аудитору в 1с итс
  • Oc android что это за программа и нужна ли она
  • 1с ерп коммерческое предложение как
  • Драйвера 5850 не обновляются
  • Ch340 драйвер не работает

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

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

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

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

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

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

Описание проблемы, ошибки, которую надо диагностировать

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

Неправильно

ДатаПоследнегоОповещения = ТекущаяДатаСеанса();
ДатаСледующегоОповещения = РассчитатьДату() + ТекущаяДатаСеанса();

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

ДатаПоследнегоОповещения = ТекущаяДатаСеанса();
ДатаСледующегоОповещения = РассчитатьДату() + ДатаПоследнегоОповещения;

связанные ишузы по методам ТекущаяДата, ТекущаяДатаСеанса

  • [NEW] Запрет на использование метода ТекущаяДата() #924
  • Работа в разных часовых поясах #222

Ссылка на источник, подтверждающее нарушение либо обоснование наличия проблемы

https://its.1c.ru/db/v8std/content/643/hdoc

Параметры диагностики

Тип Статья на русском

  • 🐜 Ошибка
  • 👮 Уязвимость
  • 💂‍♂️ Потенциальная уязвимость
  • 💩 Качество кода
  • :trollface: Другое

Важность Статья на русском

  • 💔 Блокирующая / Blocker
  • ❤️ Критическая / Critical
  • 💛 Важная / Major
  • 💙 Незначительная / Minor
  • 💚 Информационная / Info
  • 💞 Другое

Тэги Статья на русском

  • STANDARD — «Нарушение стандартов 1С»
  • LOCKINOS — «Не будет работать в другой ОС»
  • SQL — «Проблема с запросом»
  • PERFORMANCE — «Проблема производительности»
  • BRAINOVERLOAD — «Непонятный код»
  • BADPRACTICE — «Плохая практика программирования»
  • CLUMSY — «Излишние действия»
  • DESIGN — «Ошибка в проектировании»
  • SUSPICIOUS — «Подозрительный код»
  • UNPREDICTABLE — «Непредсказуемо работающий код»
  • DEPRECATED — «Устаревшая функциональность»
  • ERROR — «Ошибочная конструкция»
  • LOCALIZE — «Проблемы локализации»

Время на исправление (минут)

1 минута

Дополнительная информация

Студворк — интернет-сервис помощи студентам

Доброго времени суток!
Сделал отчет при помощи СКД, который отлично работал. Теперь понадобилось сделать пост обработку отчета. Пишу так:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки);
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    
КонецПроцедуры // ПриКомпоновкеРезультата

Получаю ошибку выполнения: Синтаксическая ошибка «ПредставлениеПериода». Как это можно побороть?
Заранее благодарен.

Добавлено через 5 минут
Разобрался! Нужно было в «ПроцессорКомпоновки.Инициализировать» в 4-м параметре указать Истина.
Всем спасибо за помощь!

Понравилась статья? Поделить с друзьями:
  • Синтаксическая норма это ошибка
  • Синоним человеческой ошибки
  • Синтаксическая ошибка 1с запрос
  • Синонимайзер проверка на ошибки
  • Синоним слову исправить ошибки