gifts2017

Сортировка табличной части строк документа в соответствии с иерархией справочника Номенклатура

Опубликовал Сергей Зарайкин (CXY) в раздел Программирование - Универсальные функции

Универсальная обработка табличных частей документов, предназначена для сортировки строк в табличной части документа в соответствии с иерархией справочника Номенклатура. Например, это может понадобиться в случае инвентаризации (и не только), когда строки в печатных формах (отсортированных по группам справочника номенклатура), должны соответствовать строкам табличной части самого документа. В параметрах авторегистрации можно указывать документы, где эта сортировка нужна, а также их табличные части (не обязательно Товары). Нужно только соблюдать условие - в этой табличной части обязательно должно присутствовать поле Номенклатура. Подойдет для любых конфигураций 8.1 и 8.2, использующих справочник Номенклатура.

Потребовалась такая функция для предприятия с большим количеством подразделений (с различной номенклатурой).

Перед написанием своей обработки изучил публикации http://infostart.ru/public/76900/  и http://infostart.ru/public/102491/. В каждой разработке есть свои достоинства и недостатки, но на них останавливаться не буду.

В своей разработке я не использую функцию Родитель(), потому что в случае сложных иерархий справочника Номенклатура такая сортировка дает сбой. Мною используется функция ПолноеНаименование(), но только с предварительной заменой знака "/" не на один, а на два пробела (если замену не сделать, то тоже будет искажение результатов сортировки).

Полный текст обработки представлен на втором скриншоте...

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
СортировкаТоваровДокумента.epf
.epf 8,29Kb
04.03.12
111
.epf 8,29Kb 111 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

0. Сергей Зарайкин (CXY) 07.03.12 11:53
Универсальная обработка табличных частей документов, предназначена для сортировки строк в табличной части документа в соответствии с иерархией справочника Номенклатура. Например, это может понадобиться в случае инвентаризации (и не только), когда строки в печатных формах (отсортированных по группам справочника номенклатура), должны соответствовать строкам табличной части самого документа. В параметрах авторегистрации можно указывать документы, где эта сортировка нужна, а также их табличные части (не обязательно Товары). Нужно только соблюдать условие - в этой табличной части обязательно должно присутствовать поле Номенклатура. Подойдет для любых конфигураций 8.1 и 8.2, использующих справочник Номенклатура.

Перейти к публикации

1. Ruslan (rus128) 07.03.12 11:53
8 строчек исходного кода? Воистину, все гениальное - просто! :-)
2. Nat5 (nat5) 13.03.12 12:50
Интересная разработка, большое спасибо автору!
3. Alex Koso (AlexKoso) 18.06.12 07:43
шикарно, вместо портянок кода в аналогичных разработках. Но справедливости ради, обработка из публикации на http://infostart.ru/public/76900/ на больших документах работает ощутимо быстрее
4. ssn5810 (ssn5810) 14.05.13 15:51
5. Eugeneer (Eugeneer) 14.05.13 16:10
Почти полный аналог http://infostart.ru/public/76900/
Взят тот же принцип, только уменьшен.

Процедура КнопкаВыполнитьНажатие(Кнопка)

ТаблицаТовары = ДокументСсылка.Товары.Выгрузить();

ТаблицаТовары.Колонки.Добавить("ИндексСортировки");

СписокНоменклатуры = ТаблицаТовары.ВыгрузитьКолонку("Номенклатура");

Если ВидСортировки = "ПоИерархииНоменклатуры" Тогда

ТекстЗапроса =
"ВЫБРАТЬ
| Справочник.Ссылка КАК Номенклатура
|ИЗ
| Справочник.Номенклатура КАК Справочник
|ГДЕ
| Справочник.Ссылка В(&СписокНоменклатуры)
|
|СГРУППИРОВАТЬ ПО
| Справочник.Ссылка
|
|УПОРЯДОЧИТЬ ПО
| Справочник.Родитель,
| Справочник.Наименование
|ИТОГИ ПО
| Номенклатура ИЕРАРХИЯ";

ИначеЕсли ВидСортировки = "ПоАртикулам" Тогда

ТекстЗапроса =
"ВЫБРАТЬ
| Справочник.Ссылка КАК Номенклатура
|ИЗ
| Справочник.Номенклатура КАК Справочник
|ГДЕ
| Справочник.Ссылка В(&СписокНоменклатуры)
|
|СГРУППИРОВАТЬ ПО
| Справочник.Ссылка
|
|УПОРЯДОЧИТЬ ПО
| Справочник.Артикул,
| Справочник.Наименование
|ИТОГИ ПО
| Номенклатура ИЕРАРХИЯ";

ИначеЕсли ВидСортировки = "ПоКодам" Тогда

ТекстЗапроса =
"ВЫБРАТЬ
| Справочник.Ссылка КАК Номенклатура
|ИЗ
| Справочник.Номенклатура КАК Справочник
|ГДЕ
| Справочник.Ссылка В(&СписокНоменклатуры)
|
|СГРУППИРОВАТЬ ПО
| Справочник.Ссылка
|
|УПОРЯДОЧИТЬ ПО
| Справочник.Код,
| Справочник.Наименование
|ИТОГИ ПО
| Номенклатура ИЕРАРХИЯ";

КонецЕсли;

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("СписокНоменклатуры", СписокНоменклатуры);
Запрос.Текст = ТекстЗапроса;

РезультатЗапроса = Запрос.Выполнить();

ИндексСтроки = 0;

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

ИндексСтроки = ИндексСтроки + 1;

ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Номенклатура", ВыборкаТовары.Номенклатура);

НайденныеСтроки = ТаблицаТовары.НайтиСтроки(ПараметрыОтбора);

Для Каждого СтрокаМассива Из НайденныеСтроки Цикл
СтрокаМассива.ИндексСортировки = ИндексСтроки;
КонецЦикла;
КонецЦикла;

ТаблицаТовары.Сортировать("ИндексСортировки");

ДокументСсылка.Товары.Загрузить(ТаблицаТовары);

ЭтаФорма.Закрыть();

КонецПроцедуры
6. Z Lu (validat) 31.05.13 12:38
Очень нужна обработка для сортировки по группам в документах инвентаризации и Приход Расход при перемещении товаров по ценам АТТ. В каталогах, т.е. справочниках с большим количеством номенклатуры, как правило, товары разбиты на группы. Поэтому удобней в документах иметь иерархическую сортировку. Спасибо авторам за труд.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа