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

Сортировка товара

Автор СерьезныйЧеловек, 31 авг 2010, 13:08

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

СерьезныйЧеловек

Добрый день!
Делаю сортировку товаров по артикулу.
  Процедура КнопкаВыполнитьНажатие(Кнопка)
    
   Запрос=Новый Запрос;
   Запрос.Текст=
   "ВЫБРАТЬ
   |   РеализацияТоваровУслуг.Ссылка
   |ИЗ
   |   Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг";
   
   Выборка=Запрос.Выполнить().Выгрузить();
   
   Для каждого Строка из Выборка Цикл
      Документ=Строка.Ссылка.ПолучитьОбъект();   
      ТабЧасть=Документ.Товары.Выгрузить();
      ТабЧасть.Сортировать("Артикул УБЫВ");
      Документ.Товары.Загрузить(ТабЧасть);
      Документ.Записать();
   КонецЦикла;
   
      

КонецПроцедуры

Ошибка: неправильное имя колонки. Хотя по любой другой колонке сортирует(цена, номенклатура....). Когда отлаживал в ТЗ колонки артикул не было, хотя видимость колонки включил. Где проблема?

Klyacksa

А в таб.части Товары разве есть колонка Артикул? Сортировать можно только по существующей колонке в ТЗ. Если хотите сортировать по артикулу, то придется делать так:

Для каждого Строка из Выборка Цикл
      Документ=Строка.Ссылка.ПолучитьОбъект();   
      ТабЧасть=Документ.Товары.Выгрузить();
      ТабЧасть.Колонки.Добавить("Артикул");
     
      Для каждого Стр из ТабЧасть цикл
            Стр.Артикул=Строка.Номенклатура.Артикул;
      КонецЦикла;
     
      ТабЧасть.Сортировать("Артикул УБЫВ");
      Документ.Товары.Загрузить(ТабЧасть);
      Документ.Записать();
   КонецЦикла;

И по мелочи: лучше использовать конструкцию
Выборка=Запрос.Выполнить.Выбрать() ;
Пока Выборка.Следующий() цикл
...
КонецЦикла;
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

СерьезныйЧеловек

таким обходом быстрее работает?

Klyacksa

Если речь про цикл
Пока Выборка.Следующий() - то быстрее. Потому как в твоем случае, ты в начале выгружаешь результат запроса в таблицу значений (Выгрузить()), а потом все-равно обходишь каждый элемент подряд, а в моем варианте - мы сразу обходим результат запроса, никуда его не выгружая
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

СерьезныйЧеловек

Тут очептка не большая
Для каждого Стр из ТабЧасть цикл
           Стр.Артикул=Строка.Номенклатура.Артикул;(Надо Строка исправить на Стр)
     КонецЦикла;

СерьезныйЧеловек


Klyacksa

хех, а это, так сказать, проверка на вшивость ;) (как говаривали у нас преподы, когда делали ошибки на доске)
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Теги:

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

Рейтинг@Mail.ru

Поиск