1С: Как программно подсветить определенные строки таблицы товаров на клиенте

1. dklp 42 27.04.21 11:05 Сейчас в теме
Имеется внешняя обработка заполнения объекта с типом команды "ВызовКлиентскогоМетода". Обработка запускается из документа "ЗаказКлиента", затем получает форму последнего документа "ПеремещениеТоваров" и предает на сервер объекты обоих документов. На сервере выполняется проверка: если для какого-то товара в документе "ЗаказКлиента" нет нужного количества на складе, этот товар и соответствующее количество добавляются в документ "ПеремещениеТовара" для переброски с резервного склада. После заполнения объекта на сервере, его данные копируются назад в форму документа на клиенте. Затем обработка открывает форму документа "ПеремещениеТоваров" с вновь добавленными товарами, предлагая пользователю сохранить изменения.

Дополнительно я бы хотел для наглядности подсветить строки табличной части документа "ПеремещениеТоваров" с вновь добавленными товарами, но не знаю как это сделать. Условное оформление доступно только на сервере, и непонятно как его прикрутить к форме открываемого из обработки документа. Если это делать на стороне клиента, то у меня лишь получается изменить фон всей таблицы товаров, а как изменить фон отдельных строк? Нужно подсветить строки таблицы товаров с номером строки больше чем НомерПоследнейСтрокиДоИзмененя.


&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт     

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

		// запоминаем номер последней строки, до того как в таблицу товаров будут добавлены новые строки
		НомерПоследнейСтрокиДоИзмененя = ПеремещениеТоваровФорма.Объект.Товары.Количество;
				
		ЗаказКлиентаОбъект = ВладелецФормы.Объект;		
		ПеремещениеТоваровОбъект = ПеремещениеТоваровФорма.Объект;
		ТребуетсяПеремещениеТоваров = ВыполнитьПеремещениеТоваровНаСервере(ЗаказКлиентаОбъект, ПеремещениеТоваровОбъект);
		Если Не ТребуетсяПеремещениеТоваров Тогда
			Сообщить ("Сейчас достаточно товара на складе. Перемещение товара с резервного склада не требуется.");			
			Возврат;
		КонецЕсли;
		
		// 3. Отредактированные на сервере данные копируем назад в объект формы документа ПеремещениеТоваров
		
		КопироватьДанныеФормы(ПеремещениеТоваровОбъект, ПеремещениеТоваровФорма.Объект);
	
		// 4. Открываем форму документа ПеремещениеТоваров на странице "Товары" и пролистываем её вниз
		
		ПеремещениеТоваровФорма.Открыть();		
		ПереходНаСтраницу = ПеремещениеТоваровФорма.Элементы.ГруппаСтраницы.ПодчиненныеЭлементы.Найти("СтраницаТовары");
		ПеремещениеТоваровФорма.Элементы.ГруппаСтраницы.ТекущаяСтраница = ПереходНаСтраницу;  
		ПоследняяСтрокаНомер = ПеремещениеТоваровФорма.Объект.Товары.Количество() - 1;
		ПеремещениеТоваровФорма.Элементы.Товары.ТекущаяСтрока = ПоследняяСтрокаНомер;
		ПеремещениеТоваровФорма.Модифицированность = Истина;		
		
		// 5. Подсвечиваем вновь добавленные строки
		
		// пока получается только подсветить всю таблицу целиком
		// нужно подсветить строки таблицы с номером строки > НомерПоследнейСтрокиДоИзмененя
		ПеремещениеТоваровФорма.Элементы.Товары.ЦветФона = WebЦвета.Зеленый;
		
		
	КонецЕсли;
	
КонецПроцедуры
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. DenisVol 2 27.04.21 11:16 Сейчас в теме
4. SlavaKron 27.04.21 11:17 Сейчас в теме
Без доработки формы документа "ПеремещениеТоваров" никак. Можно в принципе не открывать форму документа, а использовать форму обработки как суррогат формы документа. По кнопке "Сохранить изменения" программно дописывать документ перемещения. Список существующих/добавленных строк также выводить на форму обработки. Ну а подсветить их, думаю, вы и сами знаете как.
5. dklp 42 27.04.21 12:06 Сейчас в теме
(4), Понял. Не совсем то, но если других вариантов нет, можно попробовать этот.
6. dklp 42 27.04.21 12:09 Сейчас в теме
Смотрите, есть внешние обработки с типом команды "ЗаполнениеФормы", в них без проблем можно прописать условное оформление. Тогда в теории создаем две обработки: 1) первую обработку с типом команды "ВызовКлиентскогоМетода" прикручиваем к документу "ЗаказКлиента" - это основная обработка, которая будет заполнять и открывать документ "ПеремещениеТоваров"; 2) вторую обработку с типом команды "ЗаполнениеФормы" прикручиваем к документу "ПеремещениеТоваров" и прописываем там условное оформление. Вопрос только в том, можно ли из первой обработки при открытии документа "ПеремещениеТоваров" автоматически запустить другую обработку заполнения формы, прикрученную к открываемому документу? Или такое невозможно в принципе?
7. SlavaKron 27.04.21 12:16 Сейчас в теме
(6) Такое возможно, но это решение сложно в реализации и никто кроме вас не сможет его дорабатывать. Вы можете запустить серверную команду заполнения формы через Форма.Подключаемый_ВыполнитьКомандуНаСервере(ПараметрыКоманды, Неопределено), если верно заполните параметры команды.
8. dklp 42 27.04.21 12:24 Сейчас в теме
Оставьте свое сообщение

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