Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Цветовое оформление формы списка , 1С 8 сервисные механизмы 2 страниц V   1 2 >          
agav Подменю пользователя
сообщение 13.08.09, 9:48
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 19
Из: Киев
Спасибо сказали: 2 раз
Рейтинг: 0

Помогите оптимально решить следующую задачу.
Конфигурация УПП.

Менеджеры нуждаются в цветовом оформлении формы списка Заказов покупателей.
Причем им хочется приблизительно такое:

Цвет текста строки должен быть
зеленым - для закрытого (полностью отгруженного) заказа
черным - для незакрытого заказа
красным - для заказа по которому отгружено больше чем заказано

Цвет текста фона колонки "Картинка" должен быть
красным - для неоплаченного заказа
желтым - для частично оплаченного заказа
зеленым - для полностью оплаченного заказа.

Самое примитивное решение - выполнять запросы по определению состояний отгрузки и оплаты заказов в процедуре "ПриВыводеСтроки" работает чересчур долго ибо в системе тысячи заказов.

Добавлять реквизиты в документы нельзя.

Fynjy Подменю пользователя
сообщение 13.08.09, 9:58
Сообщение #2

Сенсей Чака Норриса
**********
За вредность
Группа: Пользователи
Сообщений: 1994
Из: Ахметов сити
Спасибо сказали: 333 раз
Рейтинг: 0

Юзай при получении данных.


Signature

Спасибо сказали: agav,

zetovich Подменю пользователя
сообщение 13.08.09, 10:01
Сообщение #3

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 718
Из: Северодонецк
Спасибо сказали: 121 раз
Рейтинг: 0

например в журнале


Процедура ЖурналДокументовСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
	Если ХотимПерсиковый Тогда
		ОформлениеСтроки.ЦветФона = WebЦвета.Персиковый;
	КонецЕслИ;	
КонецПроцедуры



agav Подменю пользователя
сообщение 13.08.09, 10:10
Сообщение #4

Общительный
**
Группа: Пользователи
Сообщений: 19
Из: Киев
Спасибо сказали: 2 раз
Рейтинг: 0

Цитата(zetovich @ 13.08.09, 12:01) *
например в журнале


Процедура ЖурналДокументовСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
	Если ХотимПерсиковый Тогда
		ОформлениеСтроки.ЦветФона = WebЦвета.Персиковый;
	КонецЕслИ;	
КонецПроцедуры




Та это понятно. Я же написал, чтобы определить ХотимПерсиковый или ХотимЖелтый нужно выполнить запрос, а для тысячи строк запрос работает долго - меня менеджеры порежут.


Цитата(Fynjy @ 13.08.09, 11:58) *
Юзай при получении данных.


Уже лучше, но все равно тормозит страшно

zetovich Подменю пользователя
сообщение 13.08.09, 10:15
Сообщение #5

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 718
Из: Северодонецк
Спасибо сказали: 121 раз
Рейтинг: 0

ой...не дочитал доконца вопрос...извеняюсь.
...я так пологаю запрос не упростишь?

agav Подменю пользователя
сообщение 13.08.09, 10:24
Сообщение #6

Общительный
**
Группа: Пользователи
Сообщений: 19
Из: Киев
Спасибо сказали: 2 раз
Рейтинг: 0

Цитата(zetovich @ 13.08.09, 12:15) *
ой...не дочитал доконца вопрос...извеняюсь.
...я так пологаю запрос не упростишь?


В принципе, как вариант, можно создать регистры сведений "СостоянияЗаказаПоОтгрузке" и "СостоянияЗаказаПоОплате", и писать запрос к ним - тогда, конечно, запрос упростишь.

Но, в этом случае нужно перелопатить очень много кода, чтобы правильно и вовремя заполнять эти регистры. Слишком много гемороя ради такой фуфельной задачки.

gryphus Подменю пользователя
сообщение 13.08.09, 10:30
Сообщение #7

Оратор
Иконка группы
Группа: Местный
Сообщений: 273
Из: Донецк
Спасибо сказали: 49 раз
Рейтинг: 0

Цитата(agav @ 13.08.09, 11:10) *
Та это понятно. Я же написал, чтобы определить ХотимПерсиковый или ХотимЖелтый нужно выполнить запрос, а для тысячи строк запрос работает долго - меня менеджеры порежут.




Уже лучше, но все равно тормозит страшно

ИМХО запросом решить это оптимальный вариант. Обычный перебор займет гораздо больше времени и ресурсов, а с регистрами -геморой.

Fynjy Подменю пользователя
сообщение 13.08.09, 10:32
Сообщение #8

Сенсей Чака Норриса
**********
За вредность
Группа: Пользователи
Сообщений: 1994
Из: Ахметов сити
Спасибо сказали: 333 раз
Рейтинг: 0

Что то не так делаешь. Код покажи.


Signature

agav Подменю пользователя
сообщение 13.08.09, 10:38
Сообщение #9

Общительный
**
Группа: Пользователи
Сообщений: 19
Из: Киев
Спасибо сказали: 2 раз
Рейтинг: 0

Цитата(Fynjy @ 13.08.09, 12:32) *
Что то не так делаешь. Код покажи.


Промежуточный вариант, особенно тормозит при нажатии Page Up / Page Down. 2-3 секунды на нажатие:



Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)

    Для Каждого ОформленияСтроки Из ОформленияСтрок Цикл

        ТекущийЗаказ = ОформленияСтроки.ДанныеСтроки.Ссылка;

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

        ЗапросСостоянияЗаказа.УстановитьПараметр("ЗаказПокупателя", ТекущийЗаказ);
        РезультатЗапрос = ЗапросСостоянияЗаказа.Выполнить();
        ЗаказЗакрыт = Ложь;
        ЗаказПереОтгружен = Ложь;
        Если РезультатЗапрос.Пустой() Тогда
            ЗаказЗакрыт = Истина;
        Иначе
            Выборка = РезультатЗапрос.Выбрать();
            Выборка.Следующий();
            ЗаказПереОтгружен = Выборка.КоличествоОстаток < 0;
        КонецЕсли;
        Если ЗаказЗакрыт Тогда
            ОформлениеСтроки.ЦветТекста = ЦветЗакрытыхЗаказов;
        ИначеЕсли ЗаказПереОтгружен Тогда
            ОформлениеСтроки.ЦветТекста = ЦветПереотгруженныхЗаказов;
        КонецЕсли;
    КонецЦикла;

КонецПроцедуры

Причина редактирования: Помещайте код в тег "Код 1С"

Fynjy Подменю пользователя
сообщение 13.08.09, 10:43
Сообщение #10

Сенсей Чака Норриса
**********
За вредность
Группа: Пользователи
Сообщений: 1994
Из: Ахметов сити
Спасибо сказали: 333 раз
Рейтинг: 0

Перепиши:
1. Обход строк получение всех заказов
2. Выполнение одного запроса
3. Обход строк и установка значений исходя из данных запроса.


Signature

Fynjy Подменю пользователя
сообщение 13.08.09, 10:44
Сообщение #11

Сенсей Чака Норриса
**********
За вредность
Группа: Пользователи
Сообщений: 1994
Из: Ахметов сити
Спасибо сказали: 333 раз
Рейтинг: 0

Это не совсем корректно, но ... Можно переписать и изменять строки только не окрашенные ...


Signature

zetovich Подменю пользователя
сообщение 13.08.09, 10:52
Сообщение #12

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 718
Из: Северодонецк
Спасибо сказали: 121 раз
Рейтинг: 0

1. если можно то
"&ЗаказПокупателя"
засунуть в
"РегистрНакопления.ЗаказыПокупателей.Остатки(&ДатаКон, куданить сюда)" (получается выбриатеся вся таблица..а потом на нее условие....если туды...то таблица выберится сразу с условием)
2. Дату в условие

Fynjy Подменю пользователя
сообщение 13.08.09, 10:54
Сообщение #13

Сенсей Чака Норриса
**********
За вредность
Группа: Пользователи
Сообщений: 1994
Из: Ахметов сити
Спасибо сказали: 333 раз
Рейтинг: 0

Да запрос не правильный условие должно накладываться на виртуальную таблицу, как сказал Зетович


Signature

zetovich Подменю пользователя
сообщение 13.08.09, 10:56
Сообщение #14

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 718
Из: Северодонецк
Спасибо сказали: 121 раз
Рейтинг: 0

+


      
        Выборка = ЗапросСостоянияЗаказа.Выполнить().Выбрать();
        Если Выборка.Количество() = 0 Тогда
            ОформлениеСтроки.ЦветТекста = ЦветЗакрытыхЗаказов;
        ИначеЕсли Выборка.Количество() > 0 Тогда
             ОформлениеСтроки.ЦветТекста = ЦветПереотгруженныхЗаказов;
        КонецЕсли;



и не нужно обходить выборку
ну, саму мысль уловили...


ой...цикл не увидел..
колонку ТЗ...в запрос...
а там после разобрать.

Спасибо сказали: agav,

agav Подменю пользователя
сообщение 13.08.09, 11:15
Сообщение #15

Общительный
**
Группа: Пользователи
Сообщений: 19
Из: Киев
Спасибо сказали: 2 раз
Рейтинг: 0

Цитата(Fynjy @ 13.08.09, 12:43) *
Перепиши:
1. Обход строк получение всех заказов
2. Выполнение одного запроса
3. Обход строк и установка значений исходя из данных запроса.



Цитата(zetovich @ 13.08.09, 12:52) *
1. если можно то
"&ЗаказПокупателя"
засунуть в
"РегистрНакопления.ЗаказыПокупателей.Остатки(&ДатаКон, куданить сюда)" (получается выбриатеся вся таблица..а потом на нее условие....если туды...то таблица выберится сразу с условием)
2. Дату в условие



Спасибо, в таком виде работает ПОЧТИ без тормозов.





Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
	
	Если ЗапросСостоянияЗаказа = Неопределено Тогда
		
		ЗапросСостоянияЗаказа = Новый Запрос;
		
		ЗапросСостоянияЗаказа.Текст = 
		"ВЫБРАТЬ
		|	ЗаказыПокупателейОстатки.ЗаказПокупателя КАК ЗаказПокупателя,
		|	ЗаказыПокупателейОстатки.КоличествоОстаток КАК КоличествоОстаток
		|ИЗ
		|	РегистрНакопления.ЗаказыПокупателей.Остатки(, ЗаказПокупателя В (&ЗаказыПокупателя)) КАК ЗаказыПокупателейОстатки";
			
	КонецЕсли;
	
	
	ВыводимыеЗаказы = Новый Массив;
	Для Каждого Строка Из ОформленияСтрок Цикл
		ВыводимыеЗаказы.Добавить(Строка.ДанныеСтроки.Ссылка);
	КонецЦикла;
	
	ЗапросСостоянияЗаказа.УстановитьПараметр("ЗаказыПокупателя", ВыводимыеЗаказы);
	
	Выборка = ЗапросСостоянияЗаказа.Выполнить().Выбрать();
	
	
	СтруктураПоиска = Новый Структура("ЗаказПокупателя");
	Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
		
		СтруктураПоиска.ЗаказПокупателя = ОформлениеСтроки.ДанныеСтроки.Ссылка;
		СтрокаНайдена = Выборка.НайтиСледующий(СтруктураПоиска); 
		Если Не СтрокаНайдена Тогда
			ОформлениеСтроки.ЦветТекста = ЦветЗакрытыхЗаказов;
		ИначеЕсли Выборка.КоличествоОстаток < 0 Тогда
			ОформлениеСтроки.ЦветТекста = ЦветПереотгруженныхЗаказов;
		КонецЕсли;
		
	КонецЦикла;
КонецПроцедуры



zetovich Подменю пользователя
сообщение 13.08.09, 11:44
Сообщение #16

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 718
Из: Северодонецк
Спасибо сказали: 121 раз
Рейтинг: 0



ВыводимыеЗаказы = Новый Массив;
	Для Каждого Строка Из ОформленияСтрок Цикл
		ВыводимыеЗаказы.Добавить(Строка.ДанныеСтроки.Ссылка);
	КонецЦикла;
	
	ЗапросСостоянияЗаказа.УстановитьПараметр("ЗаказыПокупателя", ВыводимыеЗаказы);


заменить на:



	ЗапросСостоянияЗаказа.УстановитьПараметр("ЗаказыПокупателя", ДанныеСтроки.ВыгрузитьКолнку("Ссылка"));


agav Подменю пользователя
сообщение 13.08.09, 13:03
Сообщение #17

Общительный
**
Группа: Пользователи
Сообщений: 19
Из: Киев
Спасибо сказали: 2 раз
Рейтинг: 0

Цитата(zetovich @ 13.08.09, 13:44) *


ВыводимыеЗаказы = Новый Массив;
	Для Каждого Строка Из ОформленияСтрок Цикл
		ВыводимыеЗаказы.Добавить(Строка.ДанныеСтроки.Ссылка);
	КонецЦикла;
	
	ЗапросСостоянияЗаказа.УстановитьПараметр("ЗаказыПокупателя", ВыводимыеЗаказы);


заменить на:



	ЗапросСостоянияЗаказа.УстановитьПараметр("ЗаказыПокупателя", ДанныеСтроки.ВыгрузитьКолнку("Ссылка"));



ДанныеСтроки это что??? Помоему Вы увлеклись.

zetovich Подменю пользователя
сообщение 13.08.09, 13:10
Сообщение #18

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 718
Из: Северодонецк
Спасибо сказали: 121 раз
Рейтинг: 0

ой перепутал, нужно "ОформленияСтрок"...smile.gif
т.е.
ЗапросСостоянияЗаказа.УстановитьПараметр("ЗаказыПокупателя", ОформленияСтрок.ВыгрузитьКолнку("Ссылка"));
.........а мож в буфер не то скопировал...бывает.

agav Подменю пользователя
сообщение 13.08.09, 14:08
Сообщение #19

Общительный
**
Группа: Пользователи
Сообщений: 19
Из: Киев
Спасибо сказали: 2 раз
Рейтинг: 0

Цитата(zetovich @ 13.08.09, 15:10) *
ой перепутал, нужно "ОформленияСтрок"...smile.gif
т.е.
ЗапросСостоянияЗаказа.УстановитьПараметр("ЗаказыПокупателя", ОформленияСтрок.ВыгрузитьКолнку("Ссылка"));
.........а мож в буфер не то скопировал...бывает.


Было бы здорово, но так оно не работает. У объекта ОформленияСтрок есть только два метода "Получить()" и "Количество()".

От цикла здесь не отделаешься.

Batchir Подменю пользователя
сообщение 13.08.09, 14:25
Сообщение #20

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1443 раз
Рейтинг: 0

А если попробывать что то типа Элемент.Значение.ВыгрузитьКолонку("Ссылка")?

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


2 страниц V   1 2 >
Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 21.06.25, 10:35
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!