Обработка табличного поля плюс отборы по таблице

1. user1169791 28.07.22 08:08 Сейчас в теме
Ребят всем доброго времени суток, у меня возникла следующая трудность может кто то сможет подсказать как лучше выйти из положения.
В обработке по определенным критериям заполняю табличную часть по заказам, далее в процедуру "СписокЗаказовПриПолученииДанных" запихал код на обработку строк(подкрашивание строк если заказ отгружен) плюс к этому заполнения доп реквизита в табличной части "Отгружен(с типом булево)". Тут как бы не возникло каких помех.

Проблема возникла на следующем этапе, нужно либо на кнопку,либо стандартным механизмом отобрать строки, по критерию "Отгружен = ложь", отбор происходит обоими способами корректно по окончанию результата. Проблема в том как происходит этот отбор: Таблица довольно большая,очень много строк, отбор происходит только по видимой части таблицы для пользователя. Если перематывать таблицу вниз то видим следующее что отбор не прошел сразу по всей таблице, т.е. он происходит факту увиденного(перемотали вниз таблицу, отобразились строки он их оп отобрал, перемотали еще он опять оп отобрал ).

А нужно что бы отбор прошел сразу по всей таблице. Подскажите как лучше выйти из положения. Подозреваю что сама проблема кроется в самом событии "СписокЗаказовПриПолученииДанных" , т.е. я могу ошибаться, но подозреваю что событие работает как раз на те строки которые видны.

Конфигурация:Управление торговлей, редакция 10.3 (10.3.13.2)
Обычные формы

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

	
	
КонецПроцедуры
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. DanDy 54 28.07.22 08:42 Сейчас в теме
(1)
В обработке по определенным критериям заполняю табличную часть по заказам


Если это не динамический список, то что мешает при заполнении табличной части сразу и заполнить признак "Отгружено" ? И будет вам счастье....

А для динамического списка можно также прописать получение этого признака.
3. DENSKR 16 28.07.22 08:42 Сейчас в теме
Сначала получаете ваш список заказов не из оформления строк а из таблицы значений или динамического списка что у вас там:

Процедура СписокЗаказовПриПолученииДанных(Элемент, ОформленияСтрок)
    
Т = ВашСписокЗаказов.Выгрузить();
    

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

        Если Выборка.НайтиСледующий(СтруктураПоиска) Тогда
			ОформлениеСтроки.ЦветТекста = ЦветТекстаНетОстатков;
                        ОформлениеСтроки.ДанныеСтроки.Отгружен = Истина;
		КонецЕсли;
    КонецЦикла;

    
    
КонецПроцедуры
Показать
4. DanDy 54 28.07.22 08:45 Сейчас в теме
(3) Что в случае с Таблице значений что с Динамическим списком логичнее сразу получить все данные, чтобы отбор делал именно то что предполагается "отбирал" данные а не получал какие то дополнительные сведения и т.д. и т.п.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот