|
v7: Ошибка Переменная не определена, как исправить | ☑ | ||
---|---|---|---|---|
0
Irina3gger
29.06.17
✎
15:39
|
Доброго времени.
Подскажите пожалуйста из за чего появляется ошибка Переменная не определена, что на нее влияет? это значит что она не прописана в таблице значений или в запросе не прописана? или может просто не правильно прописана? |
|||
1
Волшебник
модератор
29.06.17
✎
15:40
|
Нужно изучить понятие "контекст" и области видимости переменных.
|
|||
2
Остап Сулейманович
29.06.17
✎
15:47
|
(1) Нужно начать с более основных основ ))).
Например вот такая конструкция : Функция ТестВыбораИзСписка() Список = СоздатьОбъект("СписокЗначений"); Список.ДобавитьЗначение("Первое значение"); Список.ДобавитьЗначение("Второе значение"); Список.ДобавитьЗначение("Третье значение"); Если Список.ВыбратьЗначение(ВыбранноеЗначение,"Тест",,,1) = 1 Тогда Возврат ВыбранноеЗначение; КонецЕсли; Возврат 0; КонецФункции Упадет. Несмотря на то, что в 1С имеется неявное объявление переменных. Все переменные в одной области видимости. И в контексте одной функции. |
|||
3
Волшебник
модератор
29.06.17
✎
15:48
|
(2) ВыбранноеЗначение не объявлено
|
|||
4
Остап Сулейманович
29.06.17
✎
15:50
|
(3) Таки да.
|
|||
5
Irina3gger
29.06.17
✎
15:51
|
Вот начало кода
Процедура Сформировать() сз = СоздатьОбъект("СписокЗначений"); ТабЗначВсего = СоздатьОбъект("ТаблицаЗначений"); ТабЗначОбъект = СоздатьОбъект("ТаблицаЗначений"); ТабЗначИтогРайон = СоздатьОбъект("ТаблицаЗначений"); ТабОбъект = СоздатьОбъект("ТаблицаЗначений"); ТабЗначЗаказчик = СоздатьОбъект("ТаблицаЗначений"); ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТабОбъект.НоваяКолонка("с1"); ТабОбъект.НоваяКолонка("с2"); ТабОбъект.НоваяКолонка("с3"); ТабОбъект.НоваяКолонка("с4"); ТабЗначВсего.НоваяКолонка("с1","Число"); ТабЗначВсего.НоваяКолонка("с2","Число"); ТабЗначВсего.НоваяКолонка("с3","Число"); ТабЗначИтогРайон.НоваяКолонка("с1","Число"); ТабЗначИтогРайон.НоваяКолонка("с2","Число"); ТабЗначИтогРайон.НоваяКолонка("с3","Число"); ТабЗначЗаказчик.НоваяКолонка("с1","Число"); ТабЗначЗаказчик.НоваяКолонка("с2","Число"); ТабЗначЗаказчик.НоваяКолонка("с3","Число"); Таб = СоздатьОбъект("Таблица"); RS = СоздатьОбъект("ODBCRecordset"); RS.УстБД1С(); ТекстЗапроса = " |SELECT | Жур.IDDoc as [Док $Документ], | Жур.IDDocDef as Док_вид, | Спр.Code as Код, | Спр.Descr as Наименование, | $Док.Объект as [Объект $Справочник.Объект], | $Док.Сумма as Сумма, | $Док.ДолгПоОплате as ДолгПоОплате, | $Док.ПризнакПодпис as [ПризнакПодпис $Перечисление.Признак], | $Док.ВидАкта as [ВидАкта $Справочник.ВидАкт], | $Спр.Заказчик as [Заказчик $Справочник.Заказчик], | $Спр.Район as [Район $Справочник.Области], | $Спр.ИстФин as [ИстФин $Справочник.ИстФин] |FROM | _1SJourn as Жур |INNER JOIN | $Документ.АктОбъемаРабот as Док ON Док.IDDoc = Жур.IDDoc |INNER JOIN | $Справочник.Объект as Спр ON Спр.ID = $Док.Объект | |WHERE | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ | AND Жур.Closed & 1 = 1 | AND $Док.ВидАкта <> :ВидАктов | AND $Док.ДолгПоОплате <> 0 | AND $Спр.Заказчик = :ТекЗаказчик |" я как понимаю он не выполняется потому что не определяет переменную Спр.ИстФин |
|||
6
Irina3gger
29.06.17
✎
15:53
|
не могу понять почему, ведь Спр.Заказчик и Район работаю
и в Справочнике объектов есть ИстФин. До ужаса туплю, столько литературы за сегодня начитала, что уже мозги пухнут |
|||
7
Остап Сулейманович
29.06.17
✎
15:56
|
(5) Почему решила, что "не определяет переменную Спр.ИстФин"?
Текст ошибки добровольно показывать не будешь? |
|||
8
Irina3gger
29.06.17
✎
16:03
|
Отчет формируется но пишет, дословно сообщаю
Переменная не определена (Спр) Спр<<?>>.ИстФин.ТекущийЭлемент() Если я все верно понимаю, то говорит о том что в макете таблице, в колонке ИстФин, не верно указана переменная |
|||
9
Остап Сулейманович
29.06.17
✎
16:06
|
(8) Вот такой строки Спр.ИстФин.ТекущийЭлемент() в коде из (5) нет.
Вы здесь специально КВН устраиваите? |
|||
10
Irina3gger
29.06.17
✎
16:08
|
нет, играет большую роль не опытность и усталость, поэтому прошу прощение за невнимательность и отсутствие конкретики
|
|||
11
h-sp
29.06.17
✎
16:10
|
(8) вообще у вас здесь нигде нет переменной Спр.
|
|||
12
пипец
29.06.17
✎
16:14
|
(9) даже если нет ))) Спр.ИстФин.ТекущийЭлемент() две точки на объект )))
|
|||
13
Irina3gger
29.06.17
✎
16:16
|
Я пыталась сделать так чтоб в таблицу в нужную мне колонку подтягивался справочник, и делала по примерам
но в итоге ни чего не вышло и это выражение Спр.ИстФин.ТекущийЭлемент() я ставила в саму таблицу но Спр.ИстФин есть в запросе |
|||
14
пипец
29.06.17
✎
16:22
|
(13) в запросе и при обходе - разные вещи ...
ЗЫ полный текст тогда |
|||
15
Irina3gger
29.06.17
✎
16:25
|
вот полный текст
Перем Таблица; //====================================================================== Процедура Сформировать() сз = СоздатьОбъект("СписокЗначений"); ТабЗначВсего = СоздатьОбъект("ТаблицаЗначений"); ТабЗначОбъект = СоздатьОбъект("ТаблицаЗначений"); ТабЗначИтогРайон = СоздатьОбъект("ТаблицаЗначений"); ТабОбъект = СоздатьОбъект("ТаблицаЗначений"); ТабЗначЗаказчик = СоздатьОбъект("ТаблицаЗначений"); ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТабОбъект.НоваяКолонка("с1"); ТабОбъект.НоваяКолонка("с2"); ТабОбъект.НоваяКолонка("с3"); ТабОбъект.НоваяКолонка("с4"); ТабЗначВсего.НоваяКолонка("с1","Число"); ТабЗначВсего.НоваяКолонка("с2","Число"); ТабЗначВсего.НоваяКолонка("с3","Число"); ТабЗначИтогРайон.НоваяКолонка("с1","Число"); ТабЗначИтогРайон.НоваяКолонка("с2","Число"); ТабЗначИтогРайон.НоваяКолонка("с3","Число"); ТабЗначЗаказчик.НоваяКолонка("с1","Число"); ТабЗначЗаказчик.НоваяКолонка("с2","Число"); ТабЗначЗаказчик.НоваяКолонка("с3","Число"); Таб = СоздатьОбъект("Таблица"); RS = СоздатьОбъект("ODBCRecordset"); RS.УстБД1С(); ТекстЗапроса = " |SELECT | Жур.IDDoc as [Док $Документ], | Жур.IDDocDef as Док_вид, | Спр.Code as Код, | Спр.Descr as Наименование, | $Док.Объект as [Объект $Справочник.Объект], | $Док.Сумма as Сумма, | $Док.ДолгПоОплате as ДолгПоОплате, | $Док.ПризнакПодпис as [ПризнакПодпис $Перечисление.Признак], | $Док.ВидАкта as [ВидАкта $Справочник.ВидАкт], | $Спр.Заказчик as [Заказчик $Справочник.Заказчик], | $Спр.Район as [Район $Справочник.Области], | $Спр.ИстФин as [ИстФин $Справочник.ИстФин] |FROM | _1SJourn as Жур |INNER JOIN | $Документ.АктОбъемаРабот as Док ON Док.IDDoc = Жур.IDDoc |INNER JOIN | $Справочник.Объект as Спр ON Спр.ID = $Док.Объект | |WHERE | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ | AND Жур.Closed & 1 = 1 | AND $Док.ВидАкта <> :ВидАктов | AND $Док.ДолгПоОплате <> 0 | AND $Спр.Заказчик = :ТекЗаказчик |" ; Таб.ВывестиСекцию("ШапкаОсновная"); Таб.ВывестиСекцию("Шапка"); ТекЗаказчик = ""; Номер = 1; СпрРайон = СоздатьОбъект("Справочник.Области"); СпрРайон.ПорядокКодов(); СпрРайон.ВыбратьЭлементы(); Пока СпрРайон.ПолучитьЭлемент() = 1 Цикл Таб.ВывестиСекцию("Район"); СпрЗаказчик = СоздатьОбъект("Справочник.Заказчик"); СпрЗаказчик.ВыбратьЭлементы(); Пока СпрЗаказчик.ПолучитьЭлемент() = 1 Цикл Если СпрЗаказчик.Район = СпрРайон.ТекущийЭлемент() Тогда RS.УстановитьТекстовыйПараметр("НачДата", НачПер); RS.УстановитьТекстовыйПараметр("КонДата", ОконПер); RS.УстановитьТекстовыйПараметр("ОстМеньше", ОстМеньше); спрВидАкта = СоздатьОбъект("Справочник.ВидАкт"); Если спрВидАкта.НайтиПоКоду(2) = 1 Тогда RS.УстановитьТекстовыйПараметр("ВидАктов", спрВидАкта.ТекущийЭлемент()); КонецЕсли; RS.УстановитьТекстовыйПараметр("ТекЗаказчик",СпрЗаказчик.ТекущийЭлемент()); ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса); ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл СуммаНеПодпис = 0; СуммаПодпис = 0; ДолгЭкспертизы = 0; Если Число(ТЗ.ВидАкта.Код) = Число(4) Тогда ДолгЭкспертизы = ТЗ.ДолгПоОплате; Иначе Если ТЗ.ПризнакПодпис = Перечисление.Признак.Нет Тогда СуммаНеПодпис = ТЗ.ДолгПоОплате; ИначеЕсли ТЗ.ПризнакПодпис = Перечисление.Признак.Да Тогда СуммаПодпис = ТЗ.ДолгПоОплате; КонецЕсли; КонецЕсли; ТабОбъект.НоваяСтрока(); ТабОбъект.с1 = ТЗ.Объект; ТабОбъект.с2 = СуммаНеПодпис; ТабОбъект.с3 = СуммаПодпис; ТабОбъект.с4 = ДолгЭкспертизы; КонецЦикла; ТабОбъект.Свернуть("с1","с2,с3,с4"); Если (ТабОбъект.Итог("с2") > ОстМеньше) или (ТабОбъект.Итог("с3") > ОстМеньше) или (ТабОбъект.Итог("с4") > ОстМеньше) Тогда Таб.ВывестиСекцию("Заказчик"); КонецЕсли; ТабОбъект.ВыбратьСтроки(); Пока ТабОбъект.ПолучитьСтроку() = 1 Цикл Если (ТабОбъект.с2 > ОстМеньше) или (ТабОбъект.с3 > ОстМеньше) или (ТабОбъект.с4 > ОстМеньше) Тогда сз.УдалитьВсе(); сз.ДобавитьЗначение(ТабОбъект.с1.Код); СпрИстФин = СоздатьОбъект("Справочник.ИстФин"); СпрИстФин.ПорядокКодов(); СпрИстФин.ВыбратьЭлементы(); Пока СпрИстФин.ПолучитьЭлемент() = 1 Цикл КонецЦикла; Таб.ВывестиСекцию("Объект"); Номер = Номер + 1; ТабЗначЗаказчик.НоваяСтрока(); ТабЗначЗаказчик.с1 = ТабОбъект.с2; ТабЗначЗаказчик.с2 = ТабОбъект.с3; ТабЗначЗаказчик.с3 = ТабОбъект.с4; КонецЕсли; КонецЦикла; ТабОбъект.УдалитьСтроки(); Если (ТабЗначЗаказчик.Итог("с1") > ОстМеньше) или (ТабЗначЗаказчик.Итог("с2") > ОстМеньше) или (ТабЗначЗаказчик.Итог("с3") > ОстМеньше) Тогда Таб.ВывестиСекцию("Итого"); КонецЕсли; ТабЗначИтогРайон.НоваяСтрока(); ТабЗначИтогРайон.с1 = ТабЗначЗаказчик.Итог("с1"); ТабЗначИтогРайон.с2 = ТабЗначЗаказчик.Итог("с2"); ТабЗначИтогРайон.с3 = ТабЗначЗаказчик.Итог("с3"); ТабЗначЗаказчик.УдалитьСтроки(); КонецЕсли; КонецЦикла; Если (ТабЗначИтогРайон.Итог("с1") > ОстМеньше) или (ТабЗначИтогРайон.Итог("с2") > ОстМеньше) или (ТабЗначИтогРайон.Итог("с3") > ОстМеньше) Тогда Таб.ВывестиСекцию("ИтогоРайон"); КонецЕсли; ТабЗначВсего.НоваяСтрока(); ТабЗначВсего.с1 = ТабЗначИтогРайон.Итог("с1"); ТабЗначВсего.с2 = ТабЗначИтогРайон.Итог("с2"); ТабЗначВсего.с3 = ТабЗначИтогРайон.Итог("с3"); ТабЗначИтогРайон.УдалитьСтроки(); КонецЦикла; Таб.ВывестиСекцию("Всего"); Таб.Опции(0,1,9); Таб.ПараметрыСтраницы(1,,,0,0,0,10,0,10,1,0); Таб.ТолькоПросмотр(1); Таб.Показать(); КонецПроцедуры //====================================================================== Процедура ОбработкаЯчейкиТаблицы(список,фл) фл=1; тип=ТипЗначенияСтр(список); Если тип="СписокЗначений" Тогда фл=0; спрОбъект = СоздатьОбъект("Справочник.Объект"); Если спрОбъект.НайтиПоКоду(СтрЗаменить(список.ПолучитьЗначение(1),"""","_")) = 1 Тогда ОткрытьФормуМодально("Обработка.ЖурналОбъекта", спрОбъект.ТекущийЭлемент()); КонецЕсли; конецЕсли; КонецПроцедуры |
|||
16
Irina3gger
29.06.17
✎
16:31
|
Черт побери я нашла ошибку, почему переменную не определял)) но зато теперь пишет другую ошибку
Поле агрегатного объекта не обнаружено Это как я понимаю в справочнике нет этого поля? |
|||
17
Волшебник
модератор
29.06.17
✎
16:33
|
или поля, или метода
|
|||
18
h-sp
29.06.17
✎
16:39
|
(16) ну ты же пишешь
ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса); ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл значит результат запроса у тебя пишется в ТЗ вот у тебя тут поля ТЗ ТЗ.Объект, ТЗ.ДолгПоОплате и так далее Твое поле ТЗ.Инфин ты же его определила в запросе Включай уже логику. Если ты подгрузила это поле в запросе, то уже не нужны никакие справочники. |
|||
19
Irina3gger
29.06.17
✎
16:43
|
Включай уже логику. Если ты подгрузила это поле в запросе, то уже не нужны никакие справочники.
Я это и имела ввиду,я извиняюсь. за то что могу не правильно говорить терминологию, это все не опытность. У меня вопрос созрел, если в запросе все 3 СПР есть в Справочник.Объект, но именно ИстФин не подтягивается, то в чем может быть проблема? или лучше будет написать в запросе через LEFT JOIN? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |