Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
27 сен 2024, 22:21

Заполнение табличной части результатом запроса

Автор S#4, 05 авг 2024, 09:17

0 Пользователей и 1 гость просматривают эту тему.

S#4

Доброго времени суток! имеется некий код. при заполнении параметров вылезает служебное сообщение: "Заполнение ТЧ не произведено! Значение не является значением объектного типа (Владелец)". Подскажите куда копать?
сам код:
Процедура Инициализировать(Объект, ИмяТабличнойЧасти,ТабличноеПолеОбъекта) Экспорт
Форма = ПолучитьФорму("Форма");
Форма.ОткрытьМодально(); 

Артикул = сс_ДопМодуль.ПолучитьАртикул(ТипСоединения, Диаметр, "__", ВнутреннееПокрытие, ВнешнееПокрытие, Класс, "", "") + "%";
Сообщить(Артикул);
//Если Документ.Ссылка.Пустая() Тогда
// Документ = ДокСсылка.ПолучитьОбъект();
//КонецЕсли;
Товары = Объект.Товары;
Объект.ТипыЦен.Очистить();
СтрокаТипыЦен = Объект.ТипыЦен.Добавить();
СтрокаТипыЦен.ТипЦен = ТипЦен;

Если ОчищатьТЧ Тогда
Товары.Очистить();
КонецЕсли;

Валюта = Справочники.Валюты.НайтиПоКоду("643");

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

Запрос.УстановитьПараметр("Артикул", Артикул);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Сообщить("" + ВыборкаДетальныеЗаписи.Количество());

ТаблицаЦен = ТабличноеПолеОбъекта.ТекущиеДанные.Владелец();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
СтрокаТовары = Товары.Добавить();
СтрокаТовары.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
СтрокаТовары.Цена = Цена;
СтрокаТовары.ТипЦен = ТипЦен;
СтрокаТовары.ЕдиницаИзмерения = ВыборкаДетальныеЗаписи.ЕдиницаИзмерения; 
СтрокаТовары.Валюта = Валюта;

СтрокаТЦ = ТаблицаЦен.Добавить();
СтрокаТЦ.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура; 
СтрокаТЦ.Цена[1] = ВыборкаДетальныеЗаписи.Цена;
КонецЦикла;
КонецПроцедуры

отсюда берутся данные для заполнения:
Процедура ЗаполнитьТаблицуЦенФормы()

Если ТипыЦен.Количество() = 0 Тогда // ничего делать не надо
Возврат;
КонецЕсли;

ТаблицаТоваров = Товары.Выгрузить();
ТаблицаТоваров.Сортировать("ИндексСтрокиТаблицыЦен, Номенклатура, ХарактеристикаНоменклатуры");

ТекущийИндексСтрокиТаблицыЦен = Неопределено;
НоваяСтрока = Неопределено;
Для Каждого СтрокаТаблицыТоваров Из Товары Цикл
Если ТекущийИндексСтрокиТаблицыЦен <> СтрокаТаблицыТоваров.ИндексСтрокиТаблицыЦен
Или НоваяСтрока.Номенклатура <> СтрокаТаблицыТоваров.Номенклатура
Или НоваяСтрока.ХарактеристикаНоменклатуры <> СтрокаТаблицыТоваров.ХарактеристикаНоменклатуры Тогда
НоваяСтрока = ТаблицаЦен.Добавить();
НоваяСтрока.Номенклатура = СтрокаТаблицыТоваров.Номенклатура;
НоваяСтрока.ХарактеристикаНоменклатуры = СтрокаТаблицыТоваров.ХарактеристикаНоменклатуры;
ТекущийИндексСтрокиТаблицыЦен = СтрокаТаблицыТоваров.ИндексСтрокиТаблицыЦен;
КонецЕсли;

НомерСоответствияТекущейКолонки = мСоответствиеТиповЦен[СтрокаТаблицыТоваров.ТипЦен];

НоваяСтрока["цена" + НомерСоответствияТекущейКолонки] = СтрокаТаблицыТоваров.Цена;
НоваяСтрока["СпособРасчета" + НомерСоответствияТекущейКолонки] = СтрокаТаблицыТоваров.СпособРасчетаЦены;
НоваяСтрока["валюта" + НомерСоответствияТекущейКолонки] = СтрокаТаблицыТоваров.Валюта;
НоваяСтрока["единица" + НомерСоответствияТекущейКолонки] = СтрокаТаблицыТоваров.ЕдиницаИзмерения;
НоваяСтрока["процент" + НомерСоответствияТекущейКолонки] = СтрокаТаблицыТоваров.ПроцентСкидкиНаценки;
КонецЦикла;

КонецПроцедуры // ЗаполнитьТаблицуЦенФормы()

antoneus

Копать сюда, ошибка здесь

ТаблицаЦен = ТабличноеПолеОбъекта.ТекущиеДанные.Владелец();

S#4

antoneus, а что конкретно тут не так, номенклатура же заполняется?

antoneus

Конкретно тут не так то, что у свойства ТекущиеДанные нет метода Владелец().

S#4


antoneus


S#4

antoneus, как ТекущимДанным присвоить Владельца()

antoneus

Зачем?

Процедура Инициализировать(Объект, ИмяТабличнойЧасти,ТабличноеПолеОбъекта) Экспорт
Что передается в ИмяТабличнойЧасти и что - в ТабличноеПолеОбъекта?

S#4

antoneus, решил вот так    
 Попытка
ТаблицаЦен = ТабличноеПолеОбъекта.ТекущиеДанные.Владелец();
Исключение
ТабличноеПолеОбъекта.ДобавитьСтроку();
ТаблицаЦен = ТабличноеПолеОбъекта.ТекущиеДанные.Владелец();
ТаблицаЦен.Удалить(ТабличноеПолеОбъекта.ТекущиеДанные);
КонецПопытки;

S#4

antoneus, Слушай а не подскажешь как реализовать чтобы тип цен был доступен только 1 раз при открытии базы а после доступ к ней был закрыт, а то я уже не знаю как быть :dfbbdrfb:  Вот что пришло только в голову : Если Не Объект.ТипыЦен.Количество() = 0 Тогда
        Если Не ПустаяСтрока(Объект.ТипыЦен.Получить(0).ТипЦен) Тогда
            Форма.ЭлементыФормы.ТипЦенЭлемент.Доступность = Ложь;
        КонецЕсли;
    КонецЕсли;

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск