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

Сортировка ТЧ по Родителю

Автор Tesla, 15 окт 2015, 14:36

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

Tesla

Всем доброго дня! Прошу прощения за столь банальную тему. Надеюсь на вашу помощь. Так вот, есть табличная часть "Товары" в документе "ИнвентаризацияТоваровНаСкладе", после заполнения она имеет не очень удобную сортировку. Удобным является вариант сортировки по родителю, т.е. по группам в номенклатуре. Пока что у меня созрело два способа: 1й - добавить в ТЧ колонку типа строка и отсортировать по ней; 2й - сортировать в момент заполнения ТЧ. Второй вариант для меня более сложный. Часть первого варианта я уже осуществил, т.е. добавил колонку в ТЧ. Вопрос: как заполнить колонку ссылкой номенклатуры ?

Rasty

скиньте кусок кода, где заполняется ТЧ
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

Tesla

Процедура КоманднаяПанельТоварыДействиеЗаполнитьПоОстаткамНаСкладе(Кнопка)

Если Товары.Количество() > 0 Тогда

ТекстВопроса = "Перед заполнением табличная часть будет очищена. Заполнить?";
Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да, Метаданные().Синоним);
Если Ответ <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;

Товары.Очистить();
КонецЕсли;

ЗаполнитьПоОстаткамНаСкладеУпр(ПостроительОтчета);

мОбновитьРасчетСуммыРеглУчетаДляНТТ = Истина;


Процедура ЗаполнитьПоОстаткамНаСкладеУпр(ПостроительОтчета, ТолькоУчетные = Ложь) Экспорт

Если РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее(Дата).ВестиПартионныйУчетПоСкладам Тогда
ВремСклад = Склад;
Иначе
ВремСклад = Справочники.Склады.ПустаяСсылка();
КонецЕсли;

ВалютаУпрУчета    = глЗначениеПеременной("ВалютаУправленческогоУчета");
СтруктураКурса    = МодульВалютногоУчета.ПолучитьКурсВалюты(ВалютаУпрУчета, Дата);
КурсУпрУчета      = СтруктураКурса.Курс;
КратностьУпрУчета = СтруктураКурса.Кратность;

Если Склад.ВидСклада = Перечисления.ВидыСкладов.НТТ Тогда

ПостроительОтчета.Текст =
"ВЫБРАТЬ
| ОстаткиТоваров.Номенклатура,
| ОстаткиТоваров.ХарактеристикаНоменклатуры,"
+?(УчитыватьСерии, "
| ОстаткиТоваров.СерияНоменклатуры,", "") + "
| ОстаткиТоваров.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаХранения,
| ОстаткиТоваров.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК КоэффициентЕдиницыХранения,
| ОстаткиТоваров.ЦенаВРознице,
| ВЫБОР
| КОГДА (СУММА(ОстаткиПартий.КоличествоОстаток) = 0)
|   ИЛИ (СУММА(ОстаткиПартий.КоличествоОстаток) ЕСТЬ NULL) ТОГДА
| 0
| ИНАЧЕ
| СУММА(ОстаткиПартий.СтоимостьОстаток)*СУММА(ОстаткиТоваров.КоличествоОстаток)
| / СУММА(ОстаткиПартий.КоличествоОстаток)
| КОНЕЦ                                   КАК Сумма,
| СУММА(ОстаткиТоваров.КоличествоОстаток) КАК Количество
|ИЗ
| РегистрНакопления.ТоварыВНТТ.Остатки(&МоментДокумента,
|                                                    Склад = &Склад
|//                                                  И ЦенаВРознице > 0
|) КАК ОстаткиТоваров
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&МоментДокумента,
|                                                   Склад = &ПартионныйСклад) КАК ОстаткиПартий
|ПО
| ОстаткиТоваров.Номенклатура = ОстаткиПартий.Номенклатура
| И ОстаткиТоваров.ХарактеристикаНоменклатуры = ОстаткиПартий.ХарактеристикаНоменклатуры"
+?(УчитыватьСерии, "
| И (ОстаткиТоваров.СерияНоменклатуры          = ОстаткиПартий.СерияНоменклатуры
| ИЛИ НЕ ОстаткиТоваров.Номенклатура.ВестиПартионныйУчетПоСериям)", "") + "
|
|{ГДЕ ОстаткиТоваров.Номенклатура КАК Номенклатура,
|     ОстаткиТоваров.Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа}
|
|СГРУППИРОВАТЬ ПО
| ОстаткиТоваров.Номенклатура,
| ОстаткиТоваров.ХарактеристикаНоменклатуры,"
+?(УчитыватьСерии, "
| ОстаткиТоваров.СерияНоменклатуры,", "") + "
| ОстаткиТоваров.ЦенаВРознице";
Иначе

Если Склад.ВидСклада = Перечисления.ВидыСкладов.Оптовый Тогда
РегОстатки = "ТоварыНаСкладах";
Иначе
РегОстатки = "ТоварыВРознице";
КонецЕсли;

ПостроительОтчета.Текст =
"ВЫБРАТЬ
| ОстаткиТоваров.Номенклатура,
| ОстаткиТоваров.ХарактеристикаНоменклатуры,"
+?(УчитыватьСерии, "
| ОстаткиТоваров.СерияНоменклатуры,", "") + "
| ОстаткиТоваров.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаХранения,
| ОстаткиТоваров.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК КоэффициентЕдиницыХранения,
| ОстаткиТоваров.Качество,
| СУММА(ОстаткиТоваров.КоличествоОстаток) КАК Количество,
| ВЫБОР
| КОГДА (СУММА(ОстаткиПартий.КоличествоОстаток) = 0)
|   ИЛИ (СУММА(ОстаткиПартий.КоличествоОстаток) ЕСТЬ NULL) ТОГДА
| 0
| ИНАЧЕ
| СУММА(ОстаткиПартий.СтоимостьОстаток)*СУММА(ОстаткиТоваров.КоличествоОстаток)
| / СУММА(ОстаткиПартий.КоличествоОстаток)
| КОНЕЦ                                  КАК Сумма
|ИЗ
| РегистрНакопления." + РегОстатки + ".Остатки(&МоментДокумента, Склад = &Склад)
|КАК ОстаткиТоваров
|
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&МоментДокумента,
|                                                   Склад = &ПартионныйСклад) КАК ОстаткиПартий
|ПО
| ОстаткиТоваров.Номенклатура = ОстаткиПартий.Номенклатура
| И ОстаткиТоваров.ХарактеристикаНоменклатуры = ОстаткиПартий.ХарактеристикаНоменклатуры"
+?(УчитыватьСерии, "
| И (ОстаткиТоваров.СерияНоменклатуры          = ОстаткиПартий.СерияНоменклатуры
| ИЛИ НЕ ОстаткиТоваров.Номенклатура.ВестиПартионныйУчетПоСериям)", "") + "
| И ОстаткиТоваров.Качество                   = ОстаткиПартий.Качество
|
|{ГДЕ ОстаткиТоваров.Номенклатура КАК Номенклатура,
|     ОстаткиТоваров.Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа}
|
|СГРУППИРОВАТЬ ПО
| ОстаткиТоваров.Номенклатура,
| ОстаткиТоваров.ХарактеристикаНоменклатуры,"
+?(УчитыватьСерии, "
| ОстаткиТоваров.СерияНоменклатуры,", "") + "
| ОстаткиТоваров.Качество";

КонецЕсли;

Запрос = ПостроительОтчета.ПолучитьЗапрос();

Запрос.УстановитьПараметр("Склад",           Склад);
Запрос.УстановитьПараметр("ПартионныйСклад", ВремСклад);
Если ЭтоНовый() Тогда
Запрос.УстановитьПараметр("МоментДокумента", КонецДня(Дата));
Иначе
Запрос.УстановитьПараметр("МоментДокумента", МоментВремени());
КонецЕсли;

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл

Если Выборка.Количество = 0 Тогда
Продолжить;
КонецЕсли;

СтрокаТабличнойЧасти = Товары.Добавить();

СтрокаТабличнойЧасти.Номенклатура     = Выборка.Номенклатура;
СтрокаТабличнойЧасти.КоличествоУчет   = Выборка.Количество;
СтрокаТабличнойЧасти.Количество       = ?(ТолькоУчетные, 0, СтрокаТабличнойЧасти.КоличествоУчет);
СтрокаТабличнойЧасти.ЕдиницаИзмерения = Выборка.ЕдиницаХранения;
СтрокаТабличнойЧасти.Коэффициент      = Выборка.КоэффициентЕдиницыХранения;
СтрокаТабличнойЧасти.СуммаУчет        = Выборка.Сумма;
СтрокаТабличнойЧасти.Сумма            = ?(ТолькоУчетные, 0, Выборка.Сумма);
СтрокаТабличнойЧасти.Цена             = ?(СтрокаТабличнойЧасти.КоличествоУчет = 0, 0, СтрокаТабличнойЧасти.Сумма / СтрокаТабличнойЧасти.КоличествоУчет);

Если Склад.ВидСклада = Перечисления.ВидыСкладов.НТТ Тогда
СтрокаТабличнойЧасти.ЦенаВРознице = Выборка.ЦенаВРознице;
Иначе
СтрокаТабличнойЧасти.Качество     = Выборка.Качество;
КонецЕсли;

// сумма регл. будет заполнена по данным бух учета
//СтрокаТабличнойЧасти.СуммаРегл        = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(СтрокаТабличнойЧасти.Сумма, ВалютаУпрУчета,
//    мВалютаРегламентированногоУчета, КурсУпрУчета, 1, КратностьУпрУчета, 1);

СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры = Выборка.ХарактеристикаНоменклатуры;
Если УчитыватьСерии Тогда
СтрокаТабличнойЧасти.СерияНоменклатуры = Выборка.СерияНоменклатуры;
КонецЕсли;

КонецЦикла;

// рассчитаем сумму по регл. учету
ПерезаполнитьУчетныеКоличестваРегл(ПостроительОтчета, Истина);

КонецПроцедуры // ЗаполнитьПоОстаткамНаСкладе()

Rasty

в цикле допишите
СтрокаТабличнойЧасти.Родитель = Выборка.Номенклатура.Родитель;

После цикла

Товары.Сортировать("Родитель Возр");

если выдаст ошибку метод объекта не обнаружен то:
Копия = Товары.Выгрузить();
Копия.Сортировать("Родитель Возр");
Товары.Загрузить(Копия);


Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

Tesla

:lol: Оно! Пасиба :)
Добавлено: 16 окт 2015, 10:24


а как получить текстовую ссылку в виде  "Магазин\МолочныеПродукты\Сыры\ПитерскийМолокозавод"  ?

Rasty

вы имеете ввиду навигационную ссылку? или что то другое?
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

Tesla

Ссылку, сообщающую о положении в справочнике номенклатуры.

Rasty

такого общего метода нет, так что придется варганить своими силами
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

Tesla

Вот так извратился: Строка(Строка.Номенклатура.Родитель.Родитель.Родитель.Родитель)+"\"+Строка(Строка.Номенклатура.Родитель.Родитель.Родитель)+"\"+Строка(Строка.Номенклатура.Родитель.Родитель)+"\"+Строка(Строка.Номенклатура.Родитель)

vitasw

А что, справочник имеет ограничение по уровню иерархии?

Теги:

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

Рейтинг@Mail.ru

Поиск