Очередной трэш от 1С

1. user771753 20.07.18 11:29 Сейчас в теме
Всем привет!

Делаю в модуле отчета в процедуре ПриКомпоновкеРезультата следующее

СтандартнаяОбработка = Ложь;

ДатаОтчета = ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[0].Значение;
Склад = ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[1].Значение;
ПроцентСрокаГодности = ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[2].Значение;

запрос = новый запрос;
запрос.Текст = "ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстатки.Серия КАК Серия,
| СУММА(ТоварыНаСкладахОстатки.ВНаличииОстаток) КАК Остаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&ПарамПамПам, Склад = &Склад) КАК ТоварыНаСкладахОстатки
|
|СГРУППИРОВАТЬ ПО
| ТоварыНаСкладахОстатки.Номенклатура,
| ТоварыНаСкладахОстатки.Серия";
запрос.УстановитьПараметр("Склад", Склад);
запрос.УстановитьПараметр("ПарамПамПам", ДатаОтчета);
ТЗ = запрос.Выполнить().Выгрузить();

для каждого строка из ТЗ цикл
ДатаИзготовления = Дата("20"+Сред(Строка.Серия.Номер, 3, 2) + лев(Строка.Серия.Номер, 2) + "01");
СрокГодности = Строка.Серия.ГоденДо - ДатаИзготовления;
ОстатокСрокаГодности = Строка.Серия.ГоденДо - ДатаОтчета;

Процент = ОстатокСрокаГодности*100/СрокГодности;

если Процент > ПроцентСрокаГодности тогда
ТЗ.Удалить(строка);
конецесли;

конеццикла;

//Связь между таблицей значений и именами в СКД
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("ТаблицаСДанными", ТЗ);

//Макет компоновки
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(ЭтотОбъект.СхемаКомпоновкиДанных, ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);

//Компоновка данных
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);

//Вывод результата
ДокументРезультат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);

На строке ТЗ = запрос.Выполнить().Выгрузить(); эта херня у меня валится, а потом СКД пишет мне какой-то бред(на скриншоте).

Кто-нибудь может объяснить. что это за треш?
Прикрепленные файлы:
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. user705522_constantin_h 35 20.07.18 11:38 Сейчас в теме
(1)Пишет не соответствие типов:
ДатаОтчета = ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[0].Значение;

запрос.УстановитьПараметр("ПарамПамПам", ДатаОтчета);

Проверьте: ДатаОтчета имеет тип Дата?
+
5. Octopus 337 20.07.18 11:42 Сейчас в теме
(4) Тип Граница тоже допустим
+
9. Sashares 34 20.07.18 13:13 Сейчас в теме
(1)
для каждого строка из ТЗ цикл
ДатаИзготовления = Дата("20"+Сред(Строка.Серия.Номер, 3, 2) + лев(Строка.Серия.Номер, 2) + "01");
СрокГодности = Строка.Серия.ГоденДо - ДатаИзготовления;
ОстатокСрокаГодности = Строка.Серия.ГоденДо - ДатаОтчета;

Процент = ОстатокСрокаГодности*100/СрокГодности;

если Процент > ПроцентСрокаГодности тогда
ТЗ.Удалить(строка);
конецесли;

конеццикла;

При обходе коллекции строк таблицы значений вы удаляете из этой же коллекции строки.
Это не правильно.
+
2. Octopus 337 20.07.18 11:36 Сейчас в теме
Попадалась такая ошибка. Именно с первым параметром виртуальной таблицы остатков. У меня оказалось, что на вход шло значение Неопределено. Шерстите параметр.
harmer; +1
3. harmer 1 20.07.18 11:36 Сейчас в теме
Посмотрите какое значение в переменной "ДатаОтчета", так как ругается на тип параметра.
+
6. user633533_encantado 11 20.07.18 11:43 Сейчас в теме
Не увидел "треша от 1С". Просто код косячный.

Изначально обращаться к параметрам пользовательских настроек по номерам не очень правильно. ПОльзовательские настройки на то и пользовательские, что их пользователь может менять.

Проверяйте тип значения параметра или его имя и тип.
DarkUser; user705522_constantin_h; user774630; +3
7. VmvLer 20.07.18 11:49 Сейчас в теме
//1. проверить заполнение и типы ваших параметров в отдельной функции.

Если НЕ ЗаполненыДопПараметры() Тогда
   Сообщить("Я лопух, передаю хрень в параметры запроса.");
   Возврат;
КонецЕсли;

//2. Получить ТзВнешнегоНабора в отдельной функции.
ПараметрыВнешнегоНабора = Новый Структура;
ПараметрыВнешнегоНабора.Вставить("Склад", Склад);
ПараметрыВнешнегоНабора.Вставить("ПарамПамПам", ДатаОтчета);
ТзВнешнегоНабора = ПолучитьТзВнешнегоНабора(ПараметрыВнешнегоНабора);
Если НЕ ТипЗнч(ТзВнешнегоНабора) = Тип("ТаблицаЗначений") Тогда
   Сообщить("Я лопух, получаю хрень в таблицу внешнего набора.");
   Возврат;
КонецЕсли;

// далее штатное выполнение и никакого треша нет.
Показать
+
8. user774630 20.07.18 13:01 Сейчас в теме
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот