Меню

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

{Обработка.Lax.МодульОбъекта(271)}: Ошибка при вызове метода контекста (Инициализировать)

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

по причине:

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

по причине:

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

по причине:

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

по причине:

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

Не могу понять при чем здесь ТекущаяДатаСеанса

перед выполнением команды инициализировать проверяю ТекущаяДатаСеанса()  — дата есть, в макете ее нет и не нужна она там

в модуле объекта обработки код

Функция Отчет() Экспорт

    
    СхемаКомпоновкиДанных = Отчеты.ОстаткиИДоступностьТоваров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 минута

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

Обновлено: 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 драйвер не работает

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

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

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

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

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

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

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

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • 1с скд синтаксическая ошибка найтипокоду
  • 1с скд синтаксическая ошибка как найти