Обработки заполнения табличных частей
03.06.2009
12:39
#1
"Здравствуйте !
В модуле внешней обработки к табличной части следующий код:
//
Процедура Инициализировать(Объект,Материалы,ТабличноеПолеОбъекта) Экспорт
ФормаНастройка = ПолучитьФорму("Форма");
Если ФормаНастройка.ОткрытьМодально() = Истина Тогда
Сформировать();
КонецЕсли;
КонецПроцедуры
//
Процедура Сформировать() Экспорт;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|ТоварыВРезервеНаСкладахОстатки.Склад КАК Склад,
|ТоварыВРезервеНаСкладахОстатки.Номенклатура КАК Номенклатура,
|ТоварыВРезервеНаСкладахОстатки.ХарактеристикаНоменклатуры КАК Характеристкика,
|ТоварыВРезервеНаСкладахОстатки.ДокументРезерва КАК ДокументРез,
|ТоварыВРезервеНаСкладахОстатки.СерияНоменклатуры КАК Серия,
|ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток КАК Остаток
|ИЗ
|РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&Дата, ) КАК ТоварыВРезервеНаСкладахОстатки
|ГДЕ
|ТоварыВРезервеНаСкладахОстатки.ДокументРезерва = &Документ";
Запрос.УстановитьПараметр("Документ", Документ);
Запрос.УстановитьПараметр("Дата",Объект.Дата);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() цикл
СтрокаТЧ = Объект.Материалы.Добавить();
СтрокаТЧ.Номенклатура = Выборка.Номенклатура;
СтрокаТЧ.ХарактеристикаНоменклатуры = Выборка.Характеристкика;
СтрокаТЧ.СерияНоменклатуры = Выборка.Серия;
СтрокаТЧ.Заказ = Выборка.ДокументРез;
СтрокаТЧ.ЗаказРезерв = Выборка.ДокументРез;
СтрокаТЧ.Склад = Выборка.Склад;
СтрокаТЧ.Качество = Справочники.Качество.Новый;
СтрокаТЧ.СтатьяЗатрат = Справочники.СтатьиЗатрат.НайтиПоНаименованию("Материалы");
СтрокаТЧ.Количество = Выборка.Остаток;
Сообщить (СтрокаТЧ.Номенклатура);
Сообщить(СтрокаТЧ.Заказ);
Сообщить(СтрокаТЧ.Количество);
Сообщить(СтрокаТЧ.СтатьяЗатрат);
Сообщить(СтрокаТЧ);
Сообщить(Объект);
КонецЦикла;
КонецПроцедуры
При выполнении возникает ошибка: Значение не является значением объектного типа (Дата).
PLZ скиньте ссылку на пример обработки
Подскажите, что не так.
Заранее благодарю."
В модуле внешней обработки к табличной части следующий код:
//
Процедура Инициализировать(Объект,Материалы,ТабличноеПолеОбъекта) Экспорт
ФормаНастройка = ПолучитьФорму("Форма");
Если ФормаНастройка.ОткрытьМодально() = Истина Тогда
Сформировать();
КонецЕсли;
КонецПроцедуры
//
Процедура Сформировать() Экспорт;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|ТоварыВРезервеНаСкладахОстатки.Склад КАК Склад,
|ТоварыВРезервеНаСкладахОстатки.Номенклатура КАК Номенклатура,
|ТоварыВРезервеНаСкладахОстатки.ХарактеристикаНоменклатуры КАК Характеристкика,
|ТоварыВРезервеНаСкладахОстатки.ДокументРезерва КАК ДокументРез,
|ТоварыВРезервеНаСкладахОстатки.СерияНоменклатуры КАК Серия,
|ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток КАК Остаток
|ИЗ
|РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&Дата, ) КАК ТоварыВРезервеНаСкладахОстатки
|ГДЕ
|ТоварыВРезервеНаСкладахОстатки.ДокументРезерва = &Документ";
Запрос.УстановитьПараметр("Документ", Документ);
Запрос.УстановитьПараметр("Дата",Объект.Дата);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() цикл
СтрокаТЧ = Объект.Материалы.Добавить();
СтрокаТЧ.Номенклатура = Выборка.Номенклатура;
СтрокаТЧ.ХарактеристикаНоменклатуры = Выборка.Характеристкика;
СтрокаТЧ.СерияНоменклатуры = Выборка.Серия;
СтрокаТЧ.Заказ = Выборка.ДокументРез;
СтрокаТЧ.ЗаказРезерв = Выборка.ДокументРез;
СтрокаТЧ.Склад = Выборка.Склад;
СтрокаТЧ.Качество = Справочники.Качество.Новый;
СтрокаТЧ.СтатьяЗатрат = Справочники.СтатьиЗатрат.НайтиПоНаименованию("Материалы");
СтрокаТЧ.Количество = Выборка.Остаток;
Сообщить (СтрокаТЧ.Номенклатура);
Сообщить(СтрокаТЧ.Заказ);
Сообщить(СтрокаТЧ.Количество);
Сообщить(СтрокаТЧ.СтатьяЗатрат);
Сообщить(СтрокаТЧ);
Сообщить(Объект);
КонецЦикла;
КонецПроцедуры
При выполнении возникает ошибка: Значение не является значением объектного типа (Дата).
PLZ скиньте ссылку на пример обработки
Подскажите, что не так.
Заранее благодарю."
03.06.2009
17:11
#2
"0) Нафига делать лишний рекурсивный вызов процедуры? Вполне можно написать
"Если НЕ ФормаНастройка.ОткрытьМодально() = Истина Тогда
Возврат;
КонецЕсли;"
...далее весь текст процедуры "Сформировать()".
1) "РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&Дата, ДокументРезерва = &Документ) КАК ТоварыВРезервеНаСкладахОстатки" позволит сразу выбрать весь зарезервированный по документу товар. Никаких больше условий задавать не придется.
2) Что устанавливается в параметр запроса "Документ"? Если ссылка на документ, из которого вызываем обработку, то должно быть
"Запрос.УстановитьПараметр("Документ", Объект.Ссылка);".
3) "СтрокаТЧ = Объект[Материалы].Добавить();" В данном случае переменная "Материалы" содержит в себе имя табличной части, из которой вызывается обработка заполнения ТЧ.
4) Для чего вызывается форма настройки? Не увидел в коде какого-либо ее использования.
5) Куда сбросить пример?"
"Если НЕ ФормаНастройка.ОткрытьМодально() = Истина Тогда
Возврат;
КонецЕсли;"
...далее весь текст процедуры "Сформировать()".
1) "РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&Дата, ДокументРезерва = &Документ) КАК ТоварыВРезервеНаСкладахОстатки" позволит сразу выбрать весь зарезервированный по документу товар. Никаких больше условий задавать не придется.
2) Что устанавливается в параметр запроса "Документ"? Если ссылка на документ, из которого вызываем обработку, то должно быть
"Запрос.УстановитьПараметр("Документ", Объект.Ссылка);".
3) "СтрокаТЧ = Объект[Материалы].Добавить();" В данном случае переменная "Материалы" содержит в себе имя табличной части, из которой вызывается обработка заполнения ТЧ.
4) Для чего вызывается форма настройки? Не увидел в коде какого-либо ее использования.
5) Куда сбросить пример?"
Читают тему
(гостей: 1)