Задать вопрос
@Dina42
Аналитик 1С

Мне надо написать произвольный код в отчете, но 1с выдает ошибку «формула для показателя содержит синтаксические ошибки», почему?

Функционал кода: при создании отчетной формы с предыдущего периода должны перетягиваться данные в новый отчет, этот отчет делают раз в неделю.
Показатели.стр001_гр02 = ПредыдущийПериод(НеделяГода(ТекущаяДата()));

Процедура ЗаполнитьПоказатели() 
    ДатаСейчас = ТекущаяДата();
    ТекущийПериод = НеделяГода(ТекущаяДата);
    
    // Получаем данные текущего периода
    ТекущиеДанные = ПолучитьДанныеПоПериоду(ТекущийПериод);
    
    // Получаем данные предыдущего периода
    ДанныеПредыдущегоПериода = ПолучитьДанныеПоПериоду(ПредыдущийПериод(ТекущийПериод));
    
    // Записываем значения в ячейки
    Показатели.стр001_гр02_Предыдущий = ДанныеПредыдущегоПериода;
КонецПроцедуры    

Функция ПредыдущийПериод(ТекущийПериод) 
    Если ТекущийПериод = 1 Тогда
        Возврат 52; // Последняя неделя предыдущего года
    Иначе
        Возврат ТекущийПериод - 1; // Возврат к предыдущей неделе 
    КонецЕсли;
КонецФункции
  • Вопрос задан
  • 108 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
@Dementor
программист, архитектор, аналитик
В листинге вижу одну процедуру ЗаполнитьПоказатели(), одну функцию ПредыдущийПериод(ТекущийПериод) и одну команду, которая использует функцию для установки Показатели.стр001_гр02

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

За что сразу цепляется глаз? В процедуре ЗаполнитьПоказатели() во второй строке используют необявленную переменную ТекущаяДата, а в функции ПредыдущийПериод() делается ошибочное предположение о 52 неделях в году - в следующем году (2026) будет 53 недели.
Ответ написан
Комментировать
Как минимум, явно должно быть так:
- ТекущийПериод = НеделяГода(ТекущаяДата);
+ ТекущийПериод = НеделяГода(ДатаСейчас);
Ответ написан
Комментировать
fosihas
@fosihas
Автоматизации учета на 1С.
А где Шкодите?...
как минимум система выдает место ошибки, а максимум проблемных код.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы