Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
30 ноя 2025, 00:39

Подскажите как исправить ошибку

Автор Сергей_2025, 22 окт 2025, 12:11

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

Сергей_2025

Добрый день, подскажите как исправить данную ошибку, как начинающий специалист- разработчик 1С, который прошел курс небольшой курс, не могу ее самостоятельно устранить:
[Отчет.КурсВалютыМакет3.ФормаОтчета.Форма(35,30)};
Переменная не определена (валюта)

Сам код:

Процедура СформироватьНаСервере()
   
   ТабДок = Новый ТабличныйДокумент;         
   
   Макет = Отчеты.ОтчетПоКурсамМакет2.ПолучитьМакет("Макет");   
   ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
   
   ДатаКонцаПредыдущегоГода =  Дата(Год(Отчет.Дата) - 1,12,31);
   ДатаКонцаДвадцатьтретьегоГода = Дата(Год(Отчет.Дата) - 2, 12, 31);
   ДатаКонцаДвадцатьвторогоГода =  Дата(Год(Отчет.Дата) - 3, 12, 31);
   
   ОбластьШапка.Параметры.Дата1 = ДатаКонцаПредыдущегоГода;
   ОбластьШапка.Параметры.Дата2 = ДатаКонцаДвадцатьтретьегоГода;
   ОбластьШапка.Параметры.Дата3 = ДатаКонцаДвадцатьвторогоГода;
   ТабДок.Вывести(ОбластьШапка);
   
   ОбластьКурсВалюты = Макет.ПолучитьОбласть("КурсВалюты");
   ОбластьКурсВалюты.Параметры.Валюта = Отчет.Валюта;   
   
   Валюты = Новый Массив;
    Валюты.Добавить(Отчет.Валюта);
     Валюты.Добавить(Отчет.Валюта2);
    Валюты.Добавить(Отчет.Валюта3);
     Валюты.Добавить(Отчет.Валюта4);
    Валюты.Добавить(Отчет.Валюта5);
     Валюты.Добавить(Отчет.Валюта6);
   
    для каждого любаявалюта из валюта цикл
      Областькурсвалюты = макет.ПолучитьОбласть("КурсВалюты");
      Областькурсвалюты.параметры.валюта = любаявалюта.Значение;
    конеццикла;
   
    Запрос = Новый Запрос;
     Запрос.Текст =   
   
      "ВЫБРАТЬ
       |КурсыВалютСрезПоследних.Курс КАК Курс
       |ИЗ
       |РегистрСведений.КурсыВалют.СрезПоследних(&Дата1, Валюта В (&Валюты)) КАК КурсыВалютСрезПоследних
       |
       |ОБЪЕДИНИТЬ ВСЕ
       |
       |ВЫБРАТЬ
       |КурсыВалютСрезПоследних.Курс
       |ИЗ
       |РегистрСведений.КурсыВалют.СрезПоследних(&Дата2, Валюта В (&Валюты)) КАК КурсыВалютСрезПоследних
       |
       |ОБЪЕДИНИТЬ ВСЕ   
      |
      |ВЫБРАТЬ
       |КурсыВалютСрезПоследних.Курс
       |ИЗ
       |РегистрСведений.КурсыВалют.СрезПоследних(&Дата3, Валюта В (&Валюты) КАК КурсыВалютСрезПоследних";
   
      
      
   Запрос.УстановитьПараметр("Валюты", Отчет.Валюты);
   Запрос.УстановитьПараметр("Дата1", ДатаКонцаПредыдущегоГода);
   Запрос.УстановитьПараметр("Дата2", ДатаКонцаДвадцатьтретьегоГода);
   Запрос.УстановитьПараметр("Дата3", ДатаКонцаДвадцатьвторогоГода);
   
   
    РезультатЗапроса = Запрос.Выполнить(); 
   МассивКурсов = Новый Массив;
   
   

   ТабДок.Вывести(ОбластьКурсВалюты);
   
КонецПроцедуры

sali

у тебя в параметрах нет такого реквизита.

Сергей_2025

sali, скорректировал реквизит, указал как в параметрах.
Пример, так верно?

для каждого любаявалюта из Отчет.Валюта цикл
      Областькурсвалюты = макет.ПолучитьОбласть("КурсВалюты");
      Областькурсвалюты.параметры.валюта = любаявалюта.Значение;
    конеццикла;

Только теперь новая ошибка:
Поле объекта не обнаружено (Дата)

sali

Цитата: Сергей_2025 от 22 окт 2025, 13:39sali,
Поле объекта не обнаружено (Дата)

если так пишет - значит у тебя нет таких объектов. почему программа должна работать с пустыми данными?

Сергей_2025

Ошибка - Поле объекта не обнаружено (Дата) указывает на следующую строчку кода, не могу понять, что здесь не так:

{Отчет.КурсВалютыМакет3.Форма.ФормаОтчета.Форма(15)}:ДатаКонцаПредыдущегоГода = Дата(Год(Отчет.Дата) - 1,12,31);
{Отчет.КурсВалютыМакет3.Форма.ФормаОтчета.Форма(4)}:СформироватьНаСервере();

[ОшибкаВоВремяВыполненияВстроенногоЯзыка, ОшибкаИспользованияВстроенногоЯзыка]

Сергей_2025


fruitella

Ты назвал реквизит ДатаОтчета вместо Дата.
Или так ДатаКонцаПредыдущегоГода = Дата(Год(Отчет.ДатаОтчета) - 1,12,31);
Или переименуй в Дата

sali

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

Сергей_2025

fruitella,
Указал в коде - ДатаОтчета
ДатаКонцаПредыдущегоГода = Дата(Год(Отчет.ДатаОтчета) - 1,12,31);

Но выходит ошибка -   Преобразование значения к типу Дата не может быть выполнено



antoneus

ДатаКонцаПредыдущегоГода = НачалоГода(Отчет.ДатаОтчета) - 1;
Когда прибавляем или вычитаем из даты число - значит, прибавляем или вычитаем секунды. Здесь мы от начала года отнимаем одну секунду - получаем конец предыдущего.

Теги:

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

Рейтинг@Mail.ru

Поиск