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

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 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
Из: Киев
Спасибо сказали: 1427 раз
Рейтинг: 0

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

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


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

 

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