Проблема с табличной частью документа после программного заполнения

1. Krotov_Valery 26.04.23 19:56 Сейчас в теме
Добрый день!
Помогите. Уже сломал голову, не пойму что делаю не так.

Конфигурация УТ11.4. Платформа 8.3.21.1644. Документ ЗаказПоставщику. На кнопку выведено добавление дополнительных данных в ТЧ документа с помощью выгрузки в запрос, присоединения необходимых данных и последующей загрузки ТаблицыЗначений в ТЧ документа. Вот такой процедурой.

&НаСервере
Процедура ЗаполнитьСостоянияНазначений()

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

КонецПроцедуры
Показать


После выполнения кода колонка Назначение - Тип(Справочник.Назначения) принимает непотребный вид. Значение в ней есть - но для пользователя не отображается, заменить его невозможно, кнопка выбора исчезает, значение видно только в контекстном меню в поле "Найти". Вся остальная ТЧ заполняется корректно.
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
2. dhurricane 26.04.23 22:31 Сейчас в теме
Колонка "Назначение" условным оформлением формы форматируется в зависимости от служебной колонки "ТипНоменклатуры". Вы неверно заполняете таблицу формы, т.к. берете для ее заполнения данные не из самой формы, а из базы данных. Загвоздка в том, что в базе данных хранятся не все колонки, что есть на форме. У таблицы формы есть ряд дополнительных, в т.ч. и служебных (невидимых) колонок, влияющих на взаимодействие пользователя с таблицей. Это те самые красные колонки, что можно найти в дереве реквизитов формы у таблицы товаров. Перезаполнив таблицу простой загрузкой из результата запроса Вы потеряли значения колонки "ТипНоменклатуры", отсюда и проблемы оформления "Назначения".

Я бы рекомендовал Вам иной подход для заполнения служебной информации в заказе
&НаСервере
Процедура ЗаполнитьСостоянияНазначений()

    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    Товары.НомерСтроки КАК НомерСтроки,
    |    Товары.Номенклатура КАК Номенклатура,
    |    Товары.Характеристика КАК Характеристика,
    |    ВЫРАЗИТЬ(Товары.Назначение КАК Справочник.Назначения) КАК Назначение
    |ПОМЕСТИТЬ Товары
    |ИЗ
    |    &Товары КАК Товары
    |;
    |
    |////////////////////////////////////////////////////////////­­////////////////////
    |ВЫБРАТЬ
    |    Товары.НомерСтроки КАК НомерСтроки,
    |    ПРЕДСТАВЛЕНИЕ(ЗаказНаПеремещениеТовары.ВариантОбеспечения) КАК РеквизитКолонкаСостоянияНазначений
    |ИЗ
    |    втЗаказПоставщику КАК втЗаказПоставщику
    |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказНаПеремещение.Товары КАК ЗаказНаПеремещениеТовары
    |        ПО втЗаказПоставщику.Назначение.Заказ = ЗаказНаПеремещениеТовары.Ссылка
    |            И втЗаказПоставщику.Номенклатура = ЗаказНаПеремещениеТовары.Номенклатура
    |            И втЗаказПоставщику.Количество = ЗаказНаПеремещениеТовары.Количество";
    
    Запрос.УстановитьПараметр("Товары", Объект.Товары.Выгрузить());
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    
    Для каждого СтрокаРезультата Из РезультатЗапроса Цикл
        СтрокаТовара = Объект.Товары[СтрокаРезультата.НомерСтроки - 1];
        ЗаполнитьЗначенияСвойств(СтрокаТовара, СтрокаРезультата);
    КонецЦикла;

КонецПроцедуры
Показать
3. Krotov_Valery 27.04.23 13:47 Сейчас в теме
(2) Большущее спасибо за подсказку про служебные колонки на форме и их влияние на отображение табличной части, честно - не знал, сказывается недостаток теоретической подготовки. С предложенным Вами способом не получилось, поэтому просто добавил к таблице значений колонку и заполнил нужным значением.

	РезультатЗапроса.Колонки.Добавить("ТипНоменклатуры",Новый ОписаниеТипов("ПеречислениеСсылка.ТипыНоменклатуры"));
	РезультатЗапроса.ЗаполнитьЗначения(Перечисления.ТипыНоменклатуры.Товар,"ТипНоменклатуры");
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dhurricane 26.04.23 22:31 Сейчас в теме
Колонка "Назначение" условным оформлением формы форматируется в зависимости от служебной колонки "ТипНоменклатуры". Вы неверно заполняете таблицу формы, т.к. берете для ее заполнения данные не из самой формы, а из базы данных. Загвоздка в том, что в базе данных хранятся не все колонки, что есть на форме. У таблицы формы есть ряд дополнительных, в т.ч. и служебных (невидимых) колонок, влияющих на взаимодействие пользователя с таблицей. Это те самые красные колонки, что можно найти в дереве реквизитов формы у таблицы товаров. Перезаполнив таблицу простой загрузкой из результата запроса Вы потеряли значения колонки "ТипНоменклатуры", отсюда и проблемы оформления "Назначения".

Я бы рекомендовал Вам иной подход для заполнения служебной информации в заказе
&НаСервере
Процедура ЗаполнитьСостоянияНазначений()

    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    Товары.НомерСтроки КАК НомерСтроки,
    |    Товары.Номенклатура КАК Номенклатура,
    |    Товары.Характеристика КАК Характеристика,
    |    ВЫРАЗИТЬ(Товары.Назначение КАК Справочник.Назначения) КАК Назначение
    |ПОМЕСТИТЬ Товары
    |ИЗ
    |    &Товары КАК Товары
    |;
    |
    |////////////////////////////////////////////////////////////­­////////////////////
    |ВЫБРАТЬ
    |    Товары.НомерСтроки КАК НомерСтроки,
    |    ПРЕДСТАВЛЕНИЕ(ЗаказНаПеремещениеТовары.ВариантОбеспечения) КАК РеквизитКолонкаСостоянияНазначений
    |ИЗ
    |    втЗаказПоставщику КАК втЗаказПоставщику
    |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказНаПеремещение.Товары КАК ЗаказНаПеремещениеТовары
    |        ПО втЗаказПоставщику.Назначение.Заказ = ЗаказНаПеремещениеТовары.Ссылка
    |            И втЗаказПоставщику.Номенклатура = ЗаказНаПеремещениеТовары.Номенклатура
    |            И втЗаказПоставщику.Количество = ЗаказНаПеремещениеТовары.Количество";
    
    Запрос.УстановитьПараметр("Товары", Объект.Товары.Выгрузить());
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    
    Для каждого СтрокаРезультата Из РезультатЗапроса Цикл
        СтрокаТовара = Объект.Товары[СтрокаРезультата.НомерСтроки - 1];
        ЗаполнитьЗначенияСвойств(СтрокаТовара, СтрокаРезультата);
    КонецЦикла;

КонецПроцедуры
Показать
3. Krotov_Valery 27.04.23 13:47 Сейчас в теме
(2) Большущее спасибо за подсказку про служебные колонки на форме и их влияние на отображение табличной части, честно - не знал, сказывается недостаток теоретической подготовки. С предложенным Вами способом не получилось, поэтому просто добавил к таблице значений колонку и заполнил нужным значением.

	РезультатЗапроса.Колонки.Добавить("ТипНоменклатуры",Новый ОписаниеТипов("ПеречислениеСсылка.ТипыНоменклатуры"));
	РезультатЗапроса.ЗаполнитьЗначения(Перечисления.ТипыНоменклатуры.Товар,"ТипНоменклатуры");
Оставьте свое сообщение

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