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