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