Всем привет!
Делаю в модуле отчета в процедуре ПриКомпоновкеРезультата следующее
СтандартнаяОбработка = Ложь;
ДатаОтчета = ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[0].Значение;
Склад = ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[1].Значение;
ПроцентСрокаГодности = ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[2].Значение;
запрос = новый запрос;
запрос.Текст = "ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстатки.Серия КАК Серия,
| СУММА(ТоварыНаСкладахОстатки.ВНаличииОстаток) КАК Остаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&ПарамПамПам, Склад = &Склад) КАК ТоварыНаСкладахОстатки
|
|СГРУППИРОВАТЬ ПО
| ТоварыНаСкладахОстатки.Номенклатура,
| ТоварыНаСкладахОстатки.Серия";
запрос.УстановитьПараметр("Склад", Склад);
запрос.УстановитьПараметр("ПарамПамПам", ДатаОтчета);
ТЗ = запрос.Выполнить().Выгрузить();
для каждого строка из ТЗ цикл
ДатаИзготовления = Дата("20"+Сред(Строка.Серия.Номер, 3, 2) + лев(Строка.Серия.Номер, 2) + "01");
СрокГодности = Строка.Серия.ГоденДо - ДатаИзготовления;
ОстатокСрокаГодности = Строка.Серия.ГоденДо - ДатаОтчета;
Процент = ОстатокСрокаГодности*100/СрокГодности;
если Процент > ПроцентСрокаГодности тогда
ТЗ.Удалить(строка);
конецесли;
конеццикла;
//Связь между таблицей значений и именами в СКД
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("ТаблицаСДанными", ТЗ);
//Макет компоновки
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(ЭтотОбъект.СхемаКомпоновкиДанных, ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
//Компоновка данных
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);
//Вывод результата
ДокументРезультат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
На строке ТЗ = запрос.Выполнить().Выгрузить(); эта херня у меня валится, а потом СКД пишет мне какой-то бред(на скриншоте).
Кто-нибудь может объяснить. что это за треш?
Делаю в модуле отчета в процедуре ПриКомпоновкеРезультата следующее
СтандартнаяОбработка = Ложь;
ДатаОтчета = ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[0].Значение;
Склад = ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[1].Значение;
ПроцентСрокаГодности = ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[2].Значение;
запрос = новый запрос;
запрос.Текст = "ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстатки.Серия КАК Серия,
| СУММА(ТоварыНаСкладахОстатки.ВНаличииОстаток) КАК Остаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&ПарамПамПам, Склад = &Склад) КАК ТоварыНаСкладахОстатки
|
|СГРУППИРОВАТЬ ПО
| ТоварыНаСкладахОстатки.Номенклатура,
| ТоварыНаСкладахОстатки.Серия";
запрос.УстановитьПараметр("Склад", Склад);
запрос.УстановитьПараметр("ПарамПамПам", ДатаОтчета);
ТЗ = запрос.Выполнить().Выгрузить();
для каждого строка из ТЗ цикл
ДатаИзготовления = Дата("20"+Сред(Строка.Серия.Номер, 3, 2) + лев(Строка.Серия.Номер, 2) + "01");
СрокГодности = Строка.Серия.ГоденДо - ДатаИзготовления;
ОстатокСрокаГодности = Строка.Серия.ГоденДо - ДатаОтчета;
Процент = ОстатокСрокаГодности*100/СрокГодности;
если Процент > ПроцентСрокаГодности тогда
ТЗ.Удалить(строка);
конецесли;
конеццикла;
//Связь между таблицей значений и именами в СКД
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("ТаблицаСДанными", ТЗ);
//Макет компоновки
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(ЭтотОбъект.СхемаКомпоновкиДанных, ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
//Компоновка данных
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);
//Вывод результата
ДокументРезультат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
На строке ТЗ = запрос.Выполнить().Выгрузить(); эта херня у меня валится, а потом СКД пишет мне какой-то бред(на скриншоте).
Кто-нибудь может объяснить. что это за треш?
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)Пишет не соответствие типов:
Проверьте: ДатаОтчета имеет тип Дата?
ДатаОтчета = ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[0].Значение;
запрос.УстановитьПараметр("ПарамПамПам", ДатаОтчета);
Проверьте: ДатаОтчета имеет тип Дата?
(1)
При обходе коллекции строк таблицы значений вы удаляете из этой же коллекции строки.
Это не правильно.
для каждого строка из ТЗ цикл
ДатаИзготовления = Дата("20"+Сред(Строка.Серия.Номер, 3, 2) + лев(Строка.Серия.Номер, 2) + "01");
СрокГодности = Строка.Серия.ГоденДо - ДатаИзготовления;
ОстатокСрокаГодности = Строка.Серия.ГоденДо - ДатаОтчета;
Процент = ОстатокСрокаГодности*100/СрокГодности;
если Процент > ПроцентСрокаГодности тогда
ТЗ.Удалить(строка);
конецесли;
конеццикла;
ДатаИзготовления = Дата("20"+Сред(Строка.Серия.Номер, 3, 2) + лев(Строка.Серия.Номер, 2) + "01");
СрокГодности = Строка.Серия.ГоденДо - ДатаИзготовления;
ОстатокСрокаГодности = Строка.Серия.ГоденДо - ДатаОтчета;
Процент = ОстатокСрокаГодности*100/СрокГодности;
если Процент > ПроцентСрокаГодности тогда
ТЗ.Удалить(строка);
конецесли;
конеццикла;
При обходе коллекции строк таблицы значений вы удаляете из этой же коллекции строки.
Это не правильно.
Попадалась такая ошибка. Именно с первым параметром виртуальной таблицы остатков. У меня оказалось, что на вход шло значение Неопределено. Шерстите параметр.
Не увидел "треша от 1С". Просто код косячный.
Изначально обращаться к параметрам пользовательских настроек по номерам не очень правильно. ПОльзовательские настройки на то и пользовательские, что их пользователь может менять.
Проверяйте тип значения параметра или его имя и тип.
Изначально обращаться к параметрам пользовательских настроек по номерам не очень правильно. ПОльзовательские настройки на то и пользовательские, что их пользователь может менять.
Проверяйте тип значения параметра или его имя и тип.
//1. проверить заполнение и типы ваших параметров в отдельной функции.
Если НЕ ЗаполненыДопПараметры() Тогда
Сообщить("Я лопух, передаю хрень в параметры запроса.");
Возврат;
КонецЕсли;
//2. Получить ТзВнешнегоНабора в отдельной функции.
ПараметрыВнешнегоНабора = Новый Структура;
ПараметрыВнешнегоНабора.Вставить("Склад", Склад);
ПараметрыВнешнегоНабора.Вставить("ПарамПамПам", ДатаОтчета);
ТзВнешнегоНабора = ПолучитьТзВнешнегоНабора(ПараметрыВнешнегоНабора);
Если НЕ ТипЗнч(ТзВнешнегоНабора) = Тип("ТаблицаЗначений") Тогда
Сообщить("Я лопух, получаю хрень в таблицу внешнего набора.");
Возврат;
КонецЕсли;
// далее штатное выполнение и никакого треша нет.
Показать
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот