Изменение фона строки в табличной части при выполнении запроса (ОБЫЧНАЯ ФОРМА).
Всем форумчанам, Привет. Я начал активно изучать язык 1С, до недавних пор от практики на УФ пришлось перейти на ОФ. Начал писать обработку для загрузки из Екселя в С-ку накладных с учетом особенностей наших поставщиков. И на одном из шагов встала задача при поиске выводить данные и выделять их цветом. Вот с ЦветФона у меня и встала проблема. Как реализовать при Запросе выделять данные таблице.
Примеh моего Запроса поиска по Артикулу:
Примеh моего Запроса поиска по Артикулу:
Процедура ПоискПоАртикул(Кнопка)
Для Каждого СтрокаТ из Товары Цикл
Запрос= Новый Запрос;
Если НЕ ЗначениеЗаполнено(СтрокаТ.Номенклатура) И ЗначениеЗаполнено(СтрокаТ.АртикулПос) Тогда
// Ищем по артикул
ЗапросА = Новый Запрос;
ЗапросА.УстановитьПараметр("ВыбАртикул", СтрокаТ.АртикулПос);
ЗапросА.Текст ="ВЫБРАТЬ
| Номенклатура.Артикул,
| Номенклатура.Ссылка КАК Номенклатура
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Артикул ПОДОБНО &ВыбАртикул
| И НЕ Номенклатура.ЭтоГруппа";
Выборка = ЗапросА.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
СтрокаТ.Номенклатура=Выборка.Номенклатура;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
ПоказатьПрикрепленные файлы:
По теме из базы знаний
- Всякие полезности
- Выгрузка-загрузка любых данных (и измененных) между похожими конфигурациями (ФАЙЛ, HTTP, COM) ЛЮБЫХ баз 1С 8.1-8.3 с обработкой и поиском данных по произвольным полям поиска
- Как работают управляемые формы и тонкий клиент 1С – взгляд "из-под капота"
- Не спеша, эффективно и правильно – путь разработки. Часть 3. Практика
- Все консоли запросов для 1С
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
В событии таблицы, при выводе строки напиши условия расцветки, а красить так:
ОформлениеСтроки.ЦветФона = Новый Цвет(217, 234, 211);
(3) у объектов есть события? знаешь? под свойствами. на каждое событие цепляется своя процедура. это в УФ тоже есть) вот там есть событие ПриВыводеСтроки. Кликаешь на лупу, он создает событие. Там и пишешь условие и раскраску.
Прикрепленные файлы:
(5) да я понял. Но при ПриВыводеСтроки в таблицы Товары, в Процессе загрузки Ексельки окрашивается все.
а мне надо что бы только две ячейки в строке таблицы окрашивалось. И что бы это происходило при выполнение обхода запроса.
вот в чем затык мой
а мне надо что бы только две ячейки в строке таблицы окрашивалось. И что бы это происходило при выполнение обхода запроса.
Выборка = ЗапросА.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
СтрокаТ.Номенклатура=Выборка.Номенклатура; // ТОГДА ОКРАШИЛОСЬ СтрокаТ.АртикулПос и СтрокаТ.Номенклатура
КонецЕсли;
вот в чем затык мой
(8)Идея в том что, допустим загрузили 1000 строк в таблице. Сделали запрос по поиску Артикулов нашли 256 строк(тогда окрасились строка Артикул и строка Номенклатура). Дальше сделали запрос поиска по ШТ нашли 500 строк(тогда окрасили строку ШТ и строка Номенклатура). У нас осталось 244 строки неопределенных. при этом у нас нету в базе 256 ШТ и 500 артикулом не совпадает.
для этого и надо визуально показать результат запросов
для этого и надо визуально показать результат запросов
(11) Дак зачем тогда так мудрить? Вы ведь заполняете номенклатуру и штрихкод в цикле? Это и есть ваше условие. А при выводе строки пишите что если номенклатура заполнена, тогда покрасить
Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
Если ЗначениеЗаполнено(ДанныеСтроки.Номенклатура) Тогда
ОформлениеСтроки.Ячейки.Номенклатура.ЦветФона = Новый Цвет(217, 234, 211);
КонецЕсли;
КонецПроцедуры
(12)это и так видно так как пусть. А в моей "Мудроте" смысл в том, чтобы видно было что надо дополнить или обновить в базу )))
плюс бывает что поставщик в одну колонку впихивает 2 или 3 штрихкода. вот и надо понять что есть новые ШТ и надо добавить в базу.
плюс бывает что поставщик в одну колонку впихивает 2 или 3 штрихкода. вот и надо понять что есть новые ШТ и надо добавить в базу.
(12)50% решает. но блин правило добавить ((
Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
Если ЗначениеЗаполнено(ДанныеСтроки.Номенклатура) Тогда
ОформлениеСтроки.Ячейки.Номенклатура.ЦветФона = Новый Цвет(217, 234, 211);
если ЗапросА тогда // как обратиться в типу запроса
ОформлениеСтроки.Ячейки.АртикулПос.ЦветФона = Новый Цвет(217, 234, 211);
иначе если ЗапросШ тогда // как обратиться в типу запроса
ОформлениеСтроки.Ячейки.ШтрихКод.ЦветФона = Новый Цвет(217, 234, 211);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Показать
(17) я не так выразился. как обратиться к процедуре нажатия кнопки.
ОформлениеСтроки.Ячейки.Номенклатура.ЦветФона = Новый Цвет(217, 234, 211);
ОформлениеСтроки.Ячейки.АртикулПос.ЦветФона = Новый Цвет(217, 234, 211);
или
ОформлениеСтроки.Ячейки.Номенклатура.ЦветФона = Новый Цвет(217, 234, 211);
ОформлениеСтроки.Ячейки.ШтрихКод.ЦветФона = Новый Цвет(217, 234, 211);
Добрый день. Выполнение запроса при выводе строки - плохая практика, т.к. запрос выполнится столько раз сколько строк видно на экране. Это существенно скажется на работе с таблицей. По возможности лучше вообще обойтись без запроса, в противном случае вам нужно использовать событие ПриПолученииДанных(<ОформленияСтрок>). В параметре обработчика события коллекция оформлений строк. Каждое оформление строки содержит данные строки. Сначала и данных строк формируете массив, который передаете в запрос чтобы получить результат запроса сразу по всем видимым на экране строкам.
Чтобы оформить одну ячейку в оформлении строки есть свойство Ячейки. Это коллекция оформления ячеек (Описание: Определяет оформление ячейки табличного поля. Используется для определения свойства Ячейки объекта ОформлениеСтроки). Посмотрите подробнее в синтаксис-помощнике
Чтобы оформить одну ячейку в оформлении строки есть свойство Ячейки. Это коллекция оформления ячеек (Описание: Определяет оформление ячейки табличного поля. Используется для определения свойства Ячейки объекта ОформлениеСтроки). Посмотрите подробнее в синтаксис-помощнике
(9) Поддерживаю, лучше
ПриПолученииДанных:
-------------------------------
ПриПолученииДанных:
-------------------------------
МассивСсылокНоменклатуры = Новый Массив;
Для Каждого СтрокаТабличногоПоля Из ОформленияСтрок Цикл
ДанныеСтроки = СтрокаТабличногоПоля.ДанныеСтроки;
МассивСсылокНоменклатуры.Добавить(ДанныеСтроки.Номенклатура);
КонецЦикла;
// далее запрос на получение требуемых данных
// ...
// по Выборке.Следующий() - формирование "Соответствия" - быстрая коллекция,
// где "Ключ" - ссылка на номенклатуру, а "Значение" - например "Структура" (для каждого значения номенклатуры - необходимо всегда новая Структура, иначе будет переопределять последним набором данных)
// - желательно выполнять на стороне сервера и вернуть "Соответствие"
// Возврат СоответствиеПоНоменклатуре = Новый Соответствие;
Для Каждого СтрокаТабличногоПоля Из ОформленияСтрок Цикл
ДанныеСтроки = СтрокаТабличногоПоля.ДанныеСтроки;
// Получение требуемых данных
СтруткураДанныхНоменклатуры = СоответствиеПоНоменклатуре.Получить(ДанныеСтроки.Номенклатура);
Если НЕ СтруткураДанныхНоменклатуры = Неопределено Тогда
// Здесь можно поставить условие, если "да", то..., иначе - "нет"
// как установить текст
СтрокаТабличногоПоля.Ячейки.Артикул.УстановитьТекст(СтруткураДанныхНоменклатуры.Артикул);
// как установить цвет фона ячейки
СтрокаТабличногоПоля.Ячейки.Артикул.ЦветФона = Новый Цвет(255, 248, 220);
// ...
КонецЕсли;
КонецЦикла;
Показать
Самый быстрый вариант будет, если добавить еще одну колонку с признаком для раскраски. Туда при заполнение таблицы прописывать признак (1,2,3 или название цветов) для цвета и красить при выводе строки по этому признаку.
(20)Принципе да. Это близко к тому что я задумал. но упираюсь именно в распознование признака. то есть определение что иммено по ШТ или Артиклу нашлось.
даже было бы хорошо если бы все строка таблицы раскрасились в синий если нашлась по ШТ, а в зеленый если бы по Артикула.
даже было бы хорошо если бы все строка таблицы раскрасились в синий если нашлась по ШТ, а в зеленый если бы по Артикула.
(21)Я правильно понял, нужно наложить цветовой фильтр и дать возможность пользователю им управлять? Можно в таблицу значений добавить колонку "Фильтр" с типом - например строка, процедура или функция, которая будет заниматься наложением фильтров, в эту колонку будет писать: "синий", "зеленый", "нетцвета". А в процедуру ПриВыводеСтроки или ПриПолученииДанных просто условие Если ДанныеСтроки.Фильтр = "синий" Тогда ... и далее то что нужно сделать по каждому из условий.
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот