Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
12 дек 2024, 09:30

раскраска документов

Автор Alex_Us, 02 авг 2013, 17:55

0 Пользователей и 1 гость просматривают эту тему.

Alex_Us

Здравствуйте! помогите пожалуйста! не могу сделать вот что, у меня есть документы ЗаказПокупателей, мне нужно чтоб должники подсвечивались красным, а если есть документы Корректировка заказа покупателей или есть Закрытие заказов покупателей и закрытие планируемых поступлений и суммы совпадают, то не подсвечивать их, делаю через временные таблицы, чтоб не тормозило. как мне сделать чтоб эти условия работали? вот что-то начал делать, а вот дальше что-то засел(((



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


Если франВспомогательный.ПолучитьЗначениеНастройки(глЗначениеПеременной("глТекущийПользователь"),
ПланыВидовХарактеристик.НастройкиПользователей.ЦветовоеВыделениеЛУРВ) Тогда
ЦветВажноТусклый = Новый Цвет(255, 199, 204); // красный
ЦветОсновнойЯркий = Новый Цвет(205, 250, 250); // зеленый

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

GRADUS

Цитата: Alex_Us от 02 авг 2013, 17:55
Здравствуйте! помогите пожалуйста! не могу сделать вот что, у меня есть документы ЗаказПокупателей, мне нужно чтоб должники подсвечивались красным, а если есть документы Корректировка заказа покупателей или есть Закрытие заказов покупателей и закрытие планируемых поступлений и суммы совпадают, то не подсвечивать их, делаю через временные таблицы, чтоб не тормозило. как мне сделать чтоб эти условия работали? вот что-то начал делать, а вот дальше что-то засел(((



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


Если франВспомогательный.ПолучитьЗначениеНастройки(глЗначениеПеременной("глТекущийПользователь"),
ПланыВидовХарактеристик.НастройкиПользователей.ЦветовоеВыделениеЛУРВ) Тогда
ЦветВажноТусклый = Новый Цвет(255, 199, 204); // красный
ЦветОсновнойЯркий = Новый Цвет(205, 250, 250); // зеленый

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


Я конечно еще не "специалист", но я никак не могу понять, как у тебя временная таблица "облегчает" код :bleh:
Может я и тупенький, непонимать.

Ладно, в чем проблема? Что не работает, заканчивай цикл, пиши по логике действий.

Alex_Us

он просто зависает на этой процедуре( что не так?

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


Если франВспомогательный.ПолучитьЗначениеНастройки(глЗначениеПеременной("глТекущийПользователь"),
ПланыВидовХарактеристик.НастройкиПользователей.ЦветовоеВыделениеЛУРВ) Тогда
ЦветВажноТусклый = Новый Цвет(255, 199, 204); // красный
ЦветОсновнойЯркий = Новый Цвет(205, 250, 250); // зеленый

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

Если ОформлениеСтроки.Проведен Тогда
        ОформлениеСтроки.ЦветФона = Новый Цвет(205, 250, 250);
Иначе ОформлениеСтроки.ЦветФона = Новый Цвет(255, 199, 204);
КонецЕсли;
КонецЦикла;
КонецЕсли;


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


GRADUS

Цитата: Alex_Us от 03 авг 2013, 07:25
он просто зависает на этой процедуре( что не так?

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


Если франВспомогательный.ПолучитьЗначениеНастройки(глЗначениеПеременной("глТекущийПользователь"),
ПланыВидовХарактеристик.НастройкиПользователей.ЦветовоеВыделениеЛУРВ) Тогда
ЦветВажноТусклый = Новый Цвет(255, 199, 204); // красный
ЦветОсновнойЯркий = Новый Цвет(205, 250, 250); // зеленый

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

Если ОформлениеСтроки.Проведен Тогда
        ОформлениеСтроки.ЦветФона = Новый Цвет(205, 250, 250);
Иначе ОформлениеСтроки.ЦветФона = Новый Цвет(255, 199, 204);
КонецЕсли;
КонецЦикла;
КонецЕсли;


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



Ну так отладчиком посмотри что не так, по мне так вообще бред написан.
Добавлено: 03 авг 2013, 12:32


И такие действия делаются СписокПриВыводеСтроки() это стандартное событие любого списка.

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

Если ДанныеСтроки.МинимальныйОстаток > Выборка.СумарныйОстаток Тогда
ОформлениеСтроки.ЦветТекста = Красный;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;

Добавлено: 03 авг 2013, 12:36


Цитата: GRADUS от 03 авг 2013, 12:20
Цитата: Alex_Us от 03 авг 2013, 07:25
он просто зависает на этой процедуре( что не так?

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


Если франВспомогательный.ПолучитьЗначениеНастройки(глЗначениеПеременной("глТекущийПользователь"),
ПланыВидовХарактеристик.НастройкиПользователей.ЦветовоеВыделениеЛУРВ) Тогда
ЦветВажноТусклый = Новый Цвет(255, 199, 204); // красный
ЦветОсновнойЯркий = Новый Цвет(205, 250, 250); // зеленый

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

Если ОформлениеСтроки.Проведен Тогда
        ОформлениеСтроки.ЦветФона = Новый Цвет(205, 250, 250);
Иначе ОформлениеСтроки.ЦветФона = Новый Цвет(255, 199, 204);
КонецЕсли;
КонецЦикла;
КонецЕсли;


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



Ну так отладчиком посмотри что не так, по мне так вообще бред написан.
Добавлено: 03 авг 2013, 12:32


И такие действия делаются СписокПриВыводеСтроки() это стандартное событие любого списка.

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

Если ДанныеСтроки.МинимальныйОстаток > Выборка.СумарныйОстаток Тогда
ОформлениеСтроки.ЦветТекста = Красный;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;


Первое условие кривое, не помню с чем сязано.

Далее, у меня циклов вообще нет, запрос использует виртуальные таблички и все предельно просто и быстро работает.
В чем проблема написать мело легкий запрос то?
Добавлено: 03 авг 2013, 12:38


И где у тебя связи в запросе?

Dethmontt

Запрос в цикле, поэтому и зависает! :bleh:

Есть стандартное событие у списка ПриПолученииДанных() там формируй нужную таблицу (т.к. это событие вызывается при обновлении списка - оно вызывается реже)
И потом при выводе строки можно искать в полученной таблице данные и делать оформление
Добавлено: 04 авг 2013, 17:03


P.S. И вообще СписокПриВыводеСтроки() в этом событии лучше вообще не делать обращений к БД
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск