IE2017

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

Программирование - Универсальные функции

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

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

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

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

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

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

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

См. также

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

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

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

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

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

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

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

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

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

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

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

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

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

КонецЕсли;

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

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

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

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

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

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

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

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

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

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

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

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