|
Значение не является значением объектного типа (ЭтоГруппа) | ☑ | ||
---|---|---|---|---|
0
pnamik
11.08.16
✎
21:57
|
Добрый вечер.
1С8.2, самописная отчет по остаткам при формировании дает ошибку {Форма.Форма.Форма(228)}: Значение не является значением объектного типа (ЭтоГруппа) Если Стр.Наименование.ЭтоГруппа = Истина Тогда Отладчик показывает, что {(1,1)}: Переменная не определена (Наименование). Как устранить ошибку не знаю. Дайте, пожалуйста, подсказку или решение Спасибо заранее |
|||
1
pnamik
11.08.16
✎
22:01
|
Вычисление выражения: Наименование.ЭтоГруппа = {(1,1)}: Переменная не определена (Наименование)
|
|||
2
hhhh
11.08.16
✎
22:01
|
запрос давай. Похоже наименование путаешь со ссылкой.
|
|||
3
pnamik
11.08.16
✎
22:03
|
вот функция "сформировать отчет"
Функция СформироватьОтчет() ТекстЗапроса = ПолучитьТекстЗапроса(); ЕстьУсловиеТ = Ложь; ЕстьУсловиеОст = Ложь; Если Фильтр <> Перечисления.ВидыФильтровОтчетов.ПоВсемТоварам Тогда //LKP++ 2015/10/11 //Всё это лишнее, т.к. запрос идентичен с т.з. окончания и нужного фильтра //Если ТипЦен = Перечисления.ТипыЦенДокументов.Розничная Тогда // //ТекстЗапроса = ТекстЗапроса + " ГДЕ ОстаткиТМЦОстатки.Номенклатура В (&Список) И РозничныеЦеныСрезПоследних.Номенклатура В (&Список)"; // ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ОБЪЕДИНИТЬ", // " ГДЕ ОстаткиТМЦОстатки.Номенклатура В (&Список) И РозничныеЦеныСрезПоследних.Номенклатура В (&Список) // | ОБЪЕДИНИТЬ"); // ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "СГРУППИРОВАТЬ ПО", // " ГДЕ ОстаткиТМЦОстатки.Номенклатура В (&Список) И РозничныеЦеныСрезПоследних.Номенклатура В (&Список) // | СГРУППИРОВАТЬ ПО"); //Иначе //LKP-- 2015/10/11 ТекстЗапроса = ТекстЗапроса + " ГДЕ ОстаткиТМЦОстатки.Номенклатура В (&Список)"; //LKP++ 2015/10/11 //КонецЕсли; //LKP-- 2015/10/11 Если МинОстаток+МаксОстаток <> 0 Тогда ТекстЗапроса = ТекстЗапроса + " И ОстаткиТМЦОстатки.КоличествоОстаток МЕЖДУ &МинОстаток И &МаксОстаток"; ЕстьУсловиеОст = Истина; КонецЕсли; ЕстьУсловиеТ = Истина; Иначе Если МинОстаток+МаксОстаток <> 0 Тогда ТекстЗапроса = ТекстЗапроса + " ГДЕ ОстаткиТМЦОстатки.КоличествоОстаток МЕЖДУ &МинОстаток И &МаксОстаток"; ЕстьУсловиеТ = Истина; ЕстьУсловиеОст = Истина; КонецЕсли; КонецЕсли; //LKP++ 2015/10/11 Если толькоВПериоде Тогда ТекстЗапроса = ТекстЗапроса + ?(ЕстьУсловиеТ ИЛИ ЕстьУсловиеОст," И "," ГДЕ ")+" вт_приходы.ЕстьПриходВПериоде "; КонецЕсли; //LKP-- 2015/10/11 Если ТипЦен = Перечисления.ТипыЦенДокументов.Розничная Тогда ТекстЗапроса = ТекстЗапроса + " ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ОстаткиТМЦ.Остатки, РегистрСведений.РозничныеЦены.СрезПоследних ИТОГИ СУММА(Сумма), СУММА(Остаток) ПО Наименование ТОЛЬКО ИЕРАРХИЯ АВТОУПОРЯДОЧИВАНИЕ"; Иначе ТекстЗапроса = ТекстЗапроса + " ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ОстаткиТМЦ.Остатки, РегистрНакопления.ДвиженияПоПартиям.Остатки ИТОГИ СУММА(Сумма), СУММА(Остаток) ПО Наименование ТОЛЬКО ИЕРАРХИЯ АВТОУПОРЯДОЧИВАНИЕ"; КонецЕсли; Список = ПолучитьСписокТоваров(); Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("ГраницаОстатков",КонецДня(Дата)); Запрос.УстановитьПараметр("ТекСклад",Склад); //LKP++ 2015/10/11 Запрос.УстановитьПараметр("ПериодПриходаС",ПриходС); Запрос.УстановитьПараметр("ПериодПриходаПо",?(ПриходПо=Дата(1,1,1),ПриходПо,КонецДня(ПриходПо))); //LKP-- 2015/10/11 Если ЕстьУсловиеТ = Истина Тогда Запрос.УстановитьПараметр("Список",Список); КонецЕсли; Если ЕстьУсловиеОст = Истина Тогда Запрос.УстановитьПараметр("МинОстаток",МинОстаток); Запрос.УстановитьПараметр("МаксОстаток",МаксОстаток); КонецЕсли; Результат = Запрос.Выполнить(); Возврат Результат; КонецФункции |
|||
4
pnamik
11.08.16
✎
22:04
|
еще одна функция
Функция ПолучитьТекстЗапроса() //LKP++ 2015/10/11 ТекстЗапросаПериода= "ВЫБРАТЬ | ОстаткиТМЦОстаткиИОбороты.Номенклатура, | Истина КАК ЕстьПриходВПериоде |ПОМЕСТИТЬ вт_приходы |ИЗ | РегистрНакопления.ОстаткиТМЦ.ОстаткиИОбороты(&ПериодПриходаС, &ПериодПриходаПо, , , Склад = &ТекСклад) КАК ОстаткиТМЦОстаткиИОбороты |ГДЕ | ОстаткиТМЦОстаткиИОбороты.КоличествоПриход > 0;"; //LKP-- 2015/10/11 Если ТипЦен = Перечисления.ТипыЦенДокументов.Розничная Тогда ТекстЗапроса = "ВЫБРАТЬ | ОстаткиТМЦОстатки.Номенклатура КАК Наименование, //LKP++ 2015/10/11 | ЕстьNULL(вт_приходы.ЕстьПриходВПериоде,Ложь) КАК ЕстьПриходВПериоде, //LKP-- 2015/10/11 | РозничныеЦеныСрезПоследних.РозничнаяЦена КАК Цена, | РозничныеЦеныСрезПоследних.РозничнаяЦена * ОстаткиТМЦОстатки.КоличествоОстаток КАК Сумма, | ОстаткиТМЦОстатки.КоличествоОстаток КАК Остаток |ИЗ | РегистрНакопления.ОстаткиТМЦ.Остатки(&ГраницаОстатков, Склад = &ТекСклад) КАК ОстаткиТМЦОстатки //LKP++ 2015/10/11 | ЛЕВОЕ СОЕДИНЕНИЕ вт_приходы КАК вт_приходы | ПО вт_приходы.Номенклатура = ОстаткиТМЦОстатки.Номенклатура //LKP-- 2015/10/11 | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РозничныеЦены.СрезПоследних(&ГраницаОстатков, Склад = &ТекСклад) КАК РозничныеЦеныСрезПоследних | ПО РозничныеЦеныСрезПоследних.Номенклатура = ОстаткиТМЦОстатки.Номенклатура | И РозничныеЦеныСрезПоследних.Склад = ОстаткиТМЦОстатки.Склад //LKP++ 2015/10/11 //группировка не нужна. система компоновки сама всё соберет как надо |"; //| //|СГРУППИРОВАТЬ ПО //| РозничныеЦеныСрезПоследних.Номенклатура, //| ОстаткиТМЦОстатки.Номенклатура, //| РозничныеЦеныСрезПоследних.РозничнаяЦена, //| ОстаткиТМЦОстатки.КоличествоОстаток"; //LKP-- 2015/10/11 Иначе ТекстЗапроса = "ВЫБРАТЬ | ОстаткиТМЦОстатки.Номенклатура КАК Наименование, //LKP++ 2015/10/11 | ЕстьNULL(вт_приходы.ЕстьПриходВПериоде,Ложь) КАК ЕстьПриходВПериоде, //LKP-- 2015/10/11 | ВЫБОР | КОГДА ОстаткиТМЦОстатки.КоличествоОстаток <> 0 | ТОГДА ДвиженияПоПартиямОстатки.СуммаОстаток / ОстаткиТМЦОстатки.КоличествоОстаток | ИНАЧЕ 0 | КОНЕЦ КАК Цена, | ДвиженияПоПартиямОстатки.СуммаОстаток КАК Сумма, | ОстаткиТМЦОстатки.КоличествоОстаток КАК Остаток |ИЗ | РегистрНакопления.ОстаткиТМЦ.Остатки(&ГраницаОстатков, Склад = &ТекСклад) КАК ОстаткиТМЦОстатки //LKP++ 2015/10/11 | ЛЕВОЕ СОЕДИНЕНИЕ вт_приходы КАК вт_приходы | ПО вт_приходы.Номенклатура = ОстаткиТМЦОстатки.Номенклатура //LKP-- 2015/10/11 | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ДвиженияПоПартиям.Остатки(&ГраницаОстатков, Склад = &ТекСклад) КАК ДвиженияПоПартиямОстатки | ПО ДвиженияПоПартиямОстатки.Номенклатура = ОстаткиТМЦОстатки.Номенклатура | И ДвиженияПоПартиямОстатки.Склад = ОстаткиТМЦОстатки.Склад"; КонецЕсли; //LKP++ 2015/10/11 ТекстЗапроса=ТекстЗапросаПериода+Символы.ПС+ТекстЗапроса; //LKP-- 2015/10/11 Возврат ТекстЗапроса; КонецФункции |
|||
5
pnamik
11.08.16
✎
22:06
|
а эта часть кода процедуры Процедура ПоказатьПодчиненные(СтрокаДерева,Уровень=0)
Для Каждого Стр Из СтрокаДерева.Строки Цикл Если Стр.Наименование.ЭтоГруппа = Истина Тогда Область = Макет.ПолучитьОбласть("УровеньГр"+Строка(Уровень+1)); Иначе Область = Макет.ПолучитьОбласть("УровеньСт"+Строка(Уровень+1)); Область.Параметры.Единица = Стр.Наименование.Единица; Область.Параметры.Артикул = СокрЛП(Стр.Наименование.Артикул); Область.Параметры.ШтрихКод = СокрЛП(Стр.Наименование.ТекШтрихКод); Область.Параметры.ПарамРасшифровки = Стр.Наименование; КонецЕсли; |
|||
6
pnamik
11.08.16
✎
22:07
|
часть процедуры, где появляется ошибка
|
|||
7
Fram
11.08.16
✎
22:13
|
(1) а почему в отладчике смотришь Наименование, а не Стр.Наименование ?
|
|||
8
Fram
11.08.16
✎
22:15
|
И называть ссылочную переменную в 1С Наименованием это, мягко выражаясь, совсем не бест практис.
|
|||
9
pnamik
11.08.16
✎
22:15
|
(7) вычисление выражения
Стр.Наименование = {(1)}: Значение не является значением объектного типа (Наименование) |
|||
10
Fram
11.08.16
✎
22:16
|
(9) ну, Стр смотри значит
|
|||
11
pnamik
11.08.16
✎
22:18
|
помню, как-то была такая ошибка в базе из-за "объект не найден", знакомый спец зафиксировал ее с помощью
пока .... цикл (?), чтобы временно отчет формировался. |
|||
12
pnamik
11.08.16
✎
22:19
|
(10) стр = Неопределено
|
|||
13
Zamestas
11.08.16
✎
22:20
|
(12) Результирующий запрос в студию не?
|
|||
14
ВРедная
11.08.16
✎
22:22
|
(11) Ты там кем вообще?
выполни запрос в консоли, или в отладчике выгрузи результат в таблицу и смотри, почему у тебя номенклатура = неопределено |
|||
15
hhhh
11.08.16
✎
22:28
|
(11) откуда вызыается эта функцтя ПоказатьПодчиненные?? Нигде ведь нет ее.
|
|||
16
pnamik
11.08.16
✎
22:32
|
(15) вот эта процедура
Процедура ПоказатьПодчиненные(СтрокаДерева,Уровень=0) //LKP++ 2015/10/11 НужноВыделение=НЕ толькоВПериоде и (ЗначениеЗаполнено(ПриходС) ИЛИ ЗначениеЗаполнено(ПриходПо)); //LKP-- 2015/10/11 Для Каждого Стр Из СтрокаДерева.Строки Цикл Если Стр.Наименование.ЭтоГруппа = Истина Тогда Область = Макет.ПолучитьОбласть("УровеньГр"+Строка(Уровень+1)); Иначе Область = Макет.ПолучитьОбласть("УровеньСт"+Строка(Уровень+1)); Область.Параметры.Единица = Стр.Наименование.Единица; Область.Параметры.Артикул = СокрЛП(Стр.Наименование.Артикул); Область.Параметры.ШтрихКод = СокрЛП(Стр.Наименование.ТекШтрихКод); Область.Параметры.ПарамРасшифровки = Стр.Наименование; КонецЕсли; Область.Параметры.Наименование = СокрЛп(Стр.Наименование); //LKP++ 2015/10/11 Если НужноВыделение и НЕ Стр.Наименование.ЭтоГруппа Тогда //ИЛИ Область.Параметры.Наименование=СокрЛп(Стр.Наименование)+?(стр.ЕстьПриходВПериоде," *",""); //ИЛИ Если стр.ЕстьПриходВПериоде Тогда Область.Область(1,1,1,17).Шрифт=Новый Шрифт(Область.Область(1,17,1,17).Шрифт,,,Истина); КонецЕсли; КонецЕсли; //LKP-- 2015/10/11 Область.Параметры.Остаток = Стр.Остаток; Область.Параметры.Цена = Стр.Цена; Область.Параметры.Сумма = Стр.Сумма; Если Уровень = 0 Тогда Попытка ИтогКоличество = Итогколичество + Стр.Остаток; ИтогСумма = ИтогСумма + Стр.Сумма; Исключение КонецПопытки; КонецЕсли; ВыхТаб.Вывести(Область,Уровень+1,,?(РаскрытьГруппыПриВыводе=Истина,Истина,Ложь)); ПоказатьПодчиненные(Стр,Уровень+1); КонецЦикла; КонецПроцедуры |
|||
17
pnamik
11.08.16
✎
22:33
|
для формирования макета
есть в Процедуре КнопкаСформироватьНажатие(Кнопка) в виде ВыхТаб.НачатьАвтогруппировкуСтрок(); ПоказатьПодчиненные(ДеревоЗн); ВыхТаб.ЗакончитьАвтогруппировкуСтрок(); |
|||
18
Fram
11.08.16
✎
22:43
|
(12) ну, теперь отлаживай заполнение СтрокаДерева.Строки
|
|||
19
pnamik
11.08.16
✎
23:01
|
(18) СтрокаДерева.Строки = КоллекцияСтрокДереваЗначений
Родитель = Неопределено могу дать доступ по тиму |
|||
20
hhhh
11.08.16
✎
23:03
|
(17) ДеревоЗн что такое? ты как партизан, вообще нужно целый арсенал пыток к тебе применить, чтобы хоть что-то понять.
|
|||
21
pnamik
11.08.16
✎
23:09
|
||||
22
pnamik
11.08.16
✎
23:10
|
||||
23
zladenuw
11.08.16
✎
23:20
|
ужас :)
тут у тебя null, выводиться группировка. где нет наименования. по этому и ошибка. Что это за чудо отчет такой |
|||
24
pnamik
11.08.16
✎
23:33
|
наименование null наверно из-за битых ссылок.. после исправления сформируется отчет.
|
|||
25
pnamik
11.08.16
✎
23:34
|
был случай, когда спец с помощью пока .... цикл "игнорировал" присутствие таких битых ссылок...
|
|||
26
zladenuw
11.08.16
✎
23:35
|
(25) ну напиши условие если СТр.Наименование = Null тогда продолжить; Конецесли;
|
|||
27
zladenuw
11.08.16
✎
23:36
|
(26) а вообще. у тебя итоги. и по этому по итогам. в верхней группировки может быть Null. ты в отладчике посмотри что у тебя выводить отчет в таблицу значений. и будешь значить. что именно нужно сделать
|
|||
28
pnamik
11.08.16
✎
23:39
|
(27) с отладчиком только на "ВЫ' я пока. потому предложил доступ по тиму..
|
|||
29
zladenuw
11.08.16
✎
23:41
|
у тебя есть в коде
Результат = Запрос.Выполнить(); пишешь Результат = Запрос.Выполнить().Выгрузить(); ставишь точку остановки и смотришь что там вывелось. вроде shift+f9. А не сударь. Могу только подсказать. Все остальное сам. Иначе это оплачиваем. |
|||
30
pnamik
12.08.16
✎
00:07
|
(29) ничего не получилось. попробовал еще в цикле пропускать ошибку типа
пока стр.наименование.Следующий() Цикл |
|||
31
hhhh
12.08.16
✎
00:32
|
(30) проверяй стр и стр.наименование
|
|||
32
pnamik
12.08.16
✎
00:40
|
1) Пока Стр.Наименование.Следующий() Цикл
ошибка Значение не является значением объектного типа (Следующий) 2) Пока Стр.Следующий() Цикл ошибка Метод объекта не обнаружен (Следующий) |
|||
33
pnamik
12.08.16
✎
00:57
|
решение
1. Попытка-Исключение-КонецПопытки (при этом не выводятся "битые ссылки" 2. исправление всех битых ссылок, и в этом случае без "попытки" (без изменения кода) отчет формируется нормально (показывает все восстановленные ссылки) 3. исправить код таким образом, чтобы независимо от битых ссылок, отчет сформировался правильно с учетом битых (тут уже я слаб пока.) Спасибо всем за помощь |
|||
34
vicof
12.08.16
✎
08:02
|
Пятнично
|
|||
35
aleks_default
12.08.16
✎
09:59
|
(34)+1
|
|||
36
Ёпрст
12.08.16
✎
10:21
|
(33) ты не поверишь, у тебя нет "битых" ссылок.
У тебя просто обе руки левые. |
|||
37
vicof
12.08.16
✎
10:45
|
(36) И растут из ЖПО)
|
|||
38
Fram
12.08.16
✎
18:39
|
а че классное решение - каждый раз когда нарываешься на свою же ошибку просто оборачиваешь ее в попытку и вопрос закрыт ))
|
|||
39
vicof
12.08.16
✎
18:42
|
(38) это называется безопасное программирование))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |