gifts2017

Раскраска заказов покупателей, ожидающих отгрузки

Опубликовал Артём Алтухов (Fannasankh) в раздел Программирование - Практика программирования

Данный фрагмент предназначен для раскраски в розовый цвет заказов покупателей ожидающих отгрузки.

Изменения вносятся в процедуру Список при получении данных в форме списка Заказов покупателей.

Данный фрагмент кода реализовывает отображение заказов покупателей, по которым всё готово к отгрузке.

Розовым отображается полная готовность, светло розовым частичная.

При больших объёмах работает достаточно медленно, я лично при внедрении сделал дополнительно флажок на форме, в зависимости от которого раскраска происходит или нет.

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

		Запрос.УстановитьПараметр("ДатаАнализа", ТекущаяДата());
	РозовыеЗаказы = Запрос.Выполнить().Выгрузить();
	КонецЕсли;


Для каждого ОформлениеСтроки из ОформленияСтрок Цикл
		Если РозовоеНадо Тогда
		Строка = РозовыеЗаказы.Найти(ОформлениеСтроки.ДанныеСтроки.Ссылка, "ЗаказПокупателя");
		Если Строка <> Неопределено Тогда
			Если Строка.Резерв = Строка.Всего и Строка.Расход < Строка.Всего  Тогда
				ОформлениеСтроки.ЦветФона = WebЦвета.СветлоРозовый; 
			ИначеЕсли Строка.НеХватает < Строка.Всего и Строка.Расход < Строка.Всего Тогда
				ОформлениеСтроки.ЦветФона = WebЦвета.Antiquewhite; 
			КонецЕсли;
		КонецЕсли;
		КонецЕсли;

 
КонецЦикла;

См. также

Подписаться Добавить вознаграждение
Комментарии
1. yar555 (yar555) 08.10.14 10:15
делал для ДокументыКонтрагентов и ЗаказыПокупателей

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

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

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

	ЗапросДанные3 = Новый Запрос();
    ЗапросДанные3.Текст =

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


КонецПроцедуры
...Показать Скрыть
2. Vova Nag (gely) 08.10.14 12:08
В типовой УНФ есть красивая обработка.
3. Тарас Лохтин (Одинец) 08.10.14 23:56
Наверно в начале модуля надо объявить переменную РозовоеНадо
а в конце типа РозовоеНадо = Истина;

так?
4. Артём Алтухов (Fannasankh) 09.10.14 00:17
(3) Одинец, у меня это флаг на форме
5. Яков Коган (Yashazz) 09.10.14 23:03
Таблицу значений проиндексируйте, гораздо быстрее работать будет.