Добрый день.
1С8.2 Альфа-Авто 4.1.19.01
Помогите разобраться в чем загвоздка.
В форме подбора товаров (форма справочника Номенклатура) есть табличное поле в котором отображаются аналоги товаров. Это ТабличноеПоле привязано к данным РегистрСведений.ГруппыАналогов.
Основные столбцы: Артикул, Номенклатура, Производитель, Остаток. У всех в метаданных кроме Остаток указаны Данные, ТипЗначения. У Остаток Данные и соответственно ТипЗначения пустые.
Информация отображаемая в этом поле обрабатывается (отбирается) в процедуре ОбновитьИнформацию().
Вот часть кода, которая отвечает за вывод (как я понимаю) информации в табличноеполе:
Если обЗначениеНеЗаполнено(ЭлементыФормы.Список.ТекущаяСтрока) ИЛИ ЭлементыФормы.Список.ТекущаяСтрока.ЭтоГруппа Тогда
АналогиОбъединеное.Отбор.ИдентификаторГруппы.Значение="";
Иначе
НоменклатураОбъект=ЭлементыФормы.Список.ТекущаяСтрока.ПолучитьОбъект();
ИдентификаторГруппыАналогов=НоменклатураОбъект.ИдентификаторГруппыАналогов();
Если ИдентификаторГруппыАналогов=Неопределено Тогда
АналогиОбъединеное.Отбор.ИдентификаторГруппы.Значение="";
Иначе
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ОстаткиТоваровКомпанииОстатки.Номенклатура КАК Номенклатура,
| ОстаткиТоваровКомпанииОстатки.Номенклатура.Артикул КАК Артикул,
| ЕСТЬNULL(ОстаткиТоваровКомпанииОстатки.КоличествоОстаток, 0) КАК Количество,
| ЕСТЬNULL(ОстаткиТоваровКомпанииОстатки.РезервОстаток, 0) КАК Резерв,
| ОстаткиТоваровКомпанииОстатки.Номенклатура.Производитель КАК Бренд
|ИЗ
| РегистрНакопления.ОстаткиТоваровКомпании.Остатки(
| ,
| Номенклатура В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| Номенклатура.Ссылка
| ИЗ
| Справочник.Номенклатура КАК Номенклатура
| ГДЕ
| Номенклатура.Артикул В
| (ВЫБРАТЬ
| ГруппыАналогов.Артикул КАК Артикул
| ИЗ
| РегистрСведений.ГруппыАналогов КАК ГруппыАналогов
| ГДЕ
| ГруппыАналогов.ИдентификаторГруппы = &ИдентификаторГруппы))) КАК ОстаткиТоваровКомпанииОстатки
|
|УПОРЯДОЧИТЬ ПО
| Количество УБЫВ";//, /* ЭТУ СТРОКУ добавил, чтобы сортировать по количеству, ниже 2 закомментировал
// | ОстаткиТоваровКомпанииОстатки.Номенклатура.Артикул,
// | ОстаткиТоваровКомпанииОстатки.Номенклатура.Наименование";
Запрос.УстановитьПараметр("ИдентификаторГруппы",ИдентификаторГруппыАналогов);
ОстаткиАналогов = Запрос.Выполнить().Выбрать();
АналогиОбъединеное.Отбор.ИдентификаторГруппы.Значение=ИдентификаторГруппыАналогов;
КонецЕсли;
КонецЕсли;
АналогиОбъединеное.Отбор.ИдентификаторГруппы.Использование=Истина;
ЭлементыФормы.АналогиОбъединеное.НастройкаОтбора.ИдентификаторГруппы.Доступность=Ложь;
Процедура АналогиПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
//Сообщить("При выводе строки");
Если ОстаткиАналогов<>Неопределено Тогда
ОстаткиАналогов.Сбросить();
Если ОстаткиАналогов.НайтиСледующий(Новый Структура("Артикул",ДанныеСтроки.Артикул)) Тогда
Остаток=ОстаткиАналогов.Количество-ОстаткиАналогов.Резерв;
Иначе
Остаток=0;
КонецЕсли;
ОформлениеСтроки.Ячейки.Остаток.ОтображатьТекст=Истина;
ОформлениеСтроки.Ячейки.Остаток.Текст=Формат(Остаток,"ЧЦ=15; ЧДЦ=2; ЧН=0.00");
КонецЕсли;
КонецПроцедуры // АналогиПриВыводеСтроки()
bizisoft @ Сегодня, 13:56
,
Давненько не клацал альфу, но: можно посмотреть ПриАктивизацииСтроки в списке товаров; возможно оттуда всё равно вызывается ОбновитьИнформацию(), а позже есть сортировка. В общем-то после "ОстаткиАналогов = Запрос.Выполнить().Выбрать();" нужно смотреть что происходит; отладчиком в этом месте если остановиться, в выборке сортировка нормальная? или попробуйте Запрос.Выполнить().Выгрузить() в этом месте в отладчике проверить.
В АналогиПриВыводеСтроки() точно не может быть сортировки, процедура срабатывает для каждой строки таблицы аналогов
Если ОстаткиАналогов.НайтиСледующий(Новый Структура("Артикул",ДанныеСтроки.Артикул)) Тогда
Остаток=ОстаткиАналогов.Количество-ОстаткиАналогов.Резерв;
Иначе
Остаток=0;
КонецЕсли;
// Динамически подключаемый обработчик ожидания
// Выполняет действия, необходимые при активизации строки табличного поля
//
Процедура СписокПриАктивизацииСтроки(Элемент)
ПодключитьОбработчикОжидания("ОбработчикОжиданияСписокПриАктивизацииСтроки",0.1, Истина);
КонецПроцедуры //СписокПриАктивизацииСтроки()
// Динамически подключаемый обработчик ожидания
// Выполняет действия, необходимые при активизации строки табличного поля
//
Процедура ОбработчикОжиданияСписокПриАктивизацииСтроки()
спСписокПриАктивизацииСтроки(ЭтаФорма, ЭлементыФормы.Список, Истина, Истина);
// покажем информацию в нижней панели
Если ЭлементыФормы.ДействияФормы.Кнопки.ОтображатьПанельИнформации.Пометка Тогда
//если панель видна, то обновим
ОбновитьИнформацию();
КонецЕсли;
ОтобразитьЦенуПродажи();
КонецПроцедуры // СписокПриАктивизацииСтроки()
ИМХО, без новой формы не взлетит. Новую форму проще сделать управляемой и тогда использовать динамический список.
bizisoft @ Вчера, 22:42
,
Вряд ли отбор поменяет сортировку, добавьте в запросе поле = Количество - резерв КАК Остаток и уже по нему упорядочить.
Макс1С @ 04.09.19, 9:22
,
В том и дело, что сортировка в запросе никак не влияет на результат, т.к. выполнение запроса по остаткам, отбор по регистру и подстановка остатков разграничено по времени и процедурам (/ Т.е. сначала идет отбор из регистра (в котором нет остатков), а потом при выводе строк в отобранные строки регистра заносится остаток.
pablo @ 04.09.19, 9:17
,
А что в обычных формах можно добавлять управляемые?
Я думал, что обычные формы не совместимы с управляемыми и наоборот.
Совместимость определяется на уровне конфигурации в свойстве "Использовать управляемые формы в толстом клиенте в обычном режиме"
bizisoft @ Сегодня, 3:05
,
Ага, вот что я пропустил:
ЭлементыФормы.АналогиОбъединеное
Макс1С @ 06.09.19, 15:44
,
Благодарю.
Я уже сам начал склонятся к замене этого элемента на свой, в котором будет отображаться результат полученный запросом.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua