|   |   | 
| 
 | Сортировка табличной части внешней обработкой | ☑ | ||
|---|---|---|---|---|
| 0
    
        егаис 08.11.19✎ 13:50 | 
        Запутался в 3 соснах
 Обработка табличной части, нужно отсортировать ТЧ по Номенклатура.Код &НаКлиенте Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт СортироватьНаСервере(ВладелецФормы.Объект); КонецПроцедуры &НаСервере Процедура СортироватьНаСервере(ВладелецФормыОбъект) ОбъектФормы = ДанныеФормыВЗначение(ВладелецФормыОбъект, Тип("ДокументОбъект.ИнвентаризацияТоваровНаСкладе")); ТЗ = ОбъектФормы.Товары.Выгрузить(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТЗ.НомерСтроки КАК НомерСтроки, | ТЗ.Номенклатура КАК Номенклатура, | ТЗ.СчетУчета КАК СчетУчета, | ТЗ.Количество КАК Количество, | ТЗ.КоличествоУчет КАК КоличествоУчет, | ТЗ.Цена КАК Цена, | ТЗ.ЦенаВРознице КАК ЦенаВРознице, | ТЗ.Сумма КАК Сумма, | ТЗ.СуммаУчет КАК СуммаУчет, | ТЗ.ПартияМатериаловВЭксплуатации КАК ПартияМатериаловВЭксплуатации, | ТЗ.ФизЛицо КАК ФизЛицо |ПОМЕСТИТЬ ВТ |ИЗ | &ТЗ КАК ТЗ |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ.НомерСтроки КАК НомерСтроки, | ВТ.Номенклатура КАК Номенклатура, | ВТ.СчетУчета КАК СчетУчета, | ВТ.Количество КАК Количество, | ВТ.КоличествоУчет КАК КоличествоУчет, | ВТ.Цена КАК Цена, | ВТ.ЦенаВРознице КАК ЦенаВРознице, | ВТ.Сумма КАК Сумма, | ВТ.СуммаУчет КАК СуммаУчет, | ВТ.ПартияМатериаловВЭксплуатации КАК ПартияМатериаловВЭксплуатации, | ВТ.ФизЛицо КАК ФизЛицо |ИЗ | ВТ КАК ВТ | |УПОРЯДОЧИТЬ ПО | ВТ.Номенклатура.Код"; Запрос.УстановитьПараметр("ТЗ", ТЗ); ОбъектФормы.Товары.Загрузить(Запрос.Выполнить().Выгрузить()); ЗначениеВДанныеФормы(ОбъектФормы, ВладелецФормыОбъект); КонецПроцедуры | |||
| 1
    
        palsergeich 08.11.19✎ 13:51 | 
        (0) Зачем? У тч из коробки есть метод сортировать
 Табличная часть.Сортировать (Tabular section.Sort) Сортировать (Sort) Синтаксис: Сортировать(<Колонки>, <ОбъектСравнения>) Параметры: <Колонки> (обязательный) Тип: Строка. Список имен колонок, разделенных запятыми, по которым производится сортировка таблицы. После каждого имени колонки через пробел может быть указано направление сортировки. Направление определяется: "Убыв" ("Desc") - упорядочивать по убыванию; "Возр" ("Asc") - упорядочивать по возрастанию. По умолчанию сортировка производится по возрастанию. Порядок указания имен колонок таблицы определяет порядок сортировки. Это означает, что сначала таблица сортируется по колонке, указанной первой. Затем группы строк с одинаковым значением в этой колонке сортируются по колонке, которая указана второй, и так далее. <ОбъектСравнения> (необязательный) Тип: СравнениеЗначений. | |||
| 2
    
        palsergeich 08.11.19✎ 13:53 | 
        (1) Понял, код у тебя не реквизит ТЧ.
 ТАк то должно работать на первый взляд, в чем проблема? | |||
| 3
    
        ale-sarin 08.11.19✎ 13:58 | 
        НомерСтроки может мешает?     | |||
| 4
    
        егаис 08.11.19✎ 13:58 | 
        {ВнешняяОбработка.СортировкаПоКоду.Форма.Форма.Форма(5)}: Ошибка при установке значения атрибута контекста (Объект)
 СортироватьНаСервере(ВладелецФормы.Объект); по причине: Нельзя изменять поле, содержащее объект данных формы | |||
| 5
    
        palpetrovich 08.11.19✎ 13:59 | 
        (4) дык, ссылку получи     | |||
| 6
    
        егаис 08.11.19✎ 14:01 | 
        (5) имеешь в виду?
 СортироватьНаСервере(ВладелецФормы.Объект.Ссылка); | |||
| 7
    
        palpetrovich 08.11.19✎ 14:04 | 
        (6) сорьки, не дочитал что это обработка     | |||
| 8
    
        егаис 08.11.19✎ 14:06 | 
        (7) вот и я сижу втыкаю на простой, казалось бы, задаче     | |||
| 9
    
        ale-sarin 08.11.19✎ 14:13 | 
        Процедура СортироватьНаСервере(Знач ВладелецФормыОбъект) 
 Не? | |||
| 10
    
        palpetrovich 08.11.19✎ 14:15 | 
        вот это работает, может поможет...
 обработка с ТЧ "ТабличнаяЧасть1" с одним реквизитом Реквизит1 &НаСервере Процедура выгрузитьНаСервере() ТЗ = Объект.ТабличнаяЧасть1.Выгрузить(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ * |ПОМЕСТИТЬ ВТ |ИЗ | &ТЗ КАК ТЗ |; |ВЫБРАТЬ | ВТ.* |ИЗ | ВТ КАК ВТ |УПОРЯДОЧИТЬ ПО ВТ.Реквизит1 |"; Запрос.УстановитьПараметр("ТЗ", ТЗ); Объект.ТабличнаяЧасть1.Загрузить(Запрос.Выполнить().Выгрузить()); КонецПроцедуры &НаКлиенте Процедура выгрузить(Команда) выгрузитьНаСервере(); КонецПроцедуры | |||
| 11
    
        prostoya 08.11.19✎ 16:16 | 
        Можно добавить реквизит формы обработки типа таблица значений повторяющая колонки табличной части владельца формы. Передать СортироватьНаСервере(ВладелецФормы.Объект.Ссылка). В этой процедуре на сервере отсортировать запросом и загрузить в реквизит формы обработки (таблица значений). после на клиенте очистить табличную часть владельца и записать циклом данные из реквизита формы обраьотки (таблица значений)…
 я так делала. | |||
| 12
    
        егаис 08.11.19✎ 16:23 | 
        (10) я извиняюсь, что такое объект? Это для формы, а не внешней обработки?
 это повторяет изначальный код &НаКлиенте Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт СортироватьНаСервере(ВладелецФормы.Объект); КонецПроцедуры &НаСервереБезКонтекста Процедура СортироватьНаСервере(ВладелецФормыОбъект) //ОбъектФормы = ДанныеФормыВЗначение(ВладелецФормыОбъект, Тип("ДокументОбъект.ИнвентаризацияТоваровНаСкладе")); //ТЗ = ОбъектФормы.Товары.Выгрузить(); ТЗ = ВладелецФормыОбъект.Товары.Выгрузить(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТЗ.НомерСтроки КАК НомерСтроки, | ТЗ.Номенклатура КАК Номенклатура, | ТЗ.СчетУчета КАК СчетУчета, | ТЗ.Количество КАК Количество, | ТЗ.КоличествоУчет КАК КоличествоУчет, | ТЗ.Цена КАК Цена, | ТЗ.ЦенаВРознице КАК ЦенаВРознице, | ТЗ.Сумма КАК Сумма, | ТЗ.СуммаУчет КАК СуммаУчет, | ТЗ.ПартияМатериаловВЭксплуатации КАК ПартияМатериаловВЭксплуатации, | ТЗ.ФизЛицо КАК ФизЛицо |ПОМЕСТИТЬ ВТ |ИЗ | &ТЗ КАК ТЗ |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ.НомерСтроки КАК НомерСтроки, | ВТ.Номенклатура КАК Номенклатура, | ВТ.СчетУчета КАК СчетУчета, | ВТ.Количество КАК Количество, | ВТ.КоличествоУчет КАК КоличествоУчет, | ВТ.Цена КАК Цена, | ВТ.ЦенаВРознице КАК ЦенаВРознице, | ВТ.Сумма КАК Сумма, | ВТ.СуммаУчет КАК СуммаУчет, | ВТ.ПартияМатериаловВЭксплуатации КАК ПартияМатериаловВЭксплуатации, | ВТ.ФизЛицо КАК ФизЛицо |ИЗ | ВТ КАК ВТ | |УПОРЯДОЧИТЬ ПО | ВТ.Номенклатура.Код"; Запрос.УстановитьПараметр("ТЗ", ТЗ); //ОбъектФормы.Товары.Загрузить(Запрос.Выполнить().Выгрузить()); ВладелецФормыОбъект.Товары.Загрузить(Запрос.Выполнить().Выгрузить()); //ЗначениеВДанныеФормы(ОбъектФормы, ВладелецФормыОбъект); КонецПроцедуры | |||
| 13
    
        егаис 08.11.19✎ 16:29 | 
        (11) с ТЗ не интересно     | |||
| 14
    
        FIXXXL 08.11.19✎ 16:32 | 
        (0) так не выйдет...
 передавай ТЗ и загружай результат изменять платформа не даёт вне контекста :( | |||
| 15
    
        FIXXXL 08.11.19✎ 16:40 | 
        (14) вернее так: передавать клиент-сервер и обратно не даст вне контекста     | |||
| 16
    
        егаис 08.11.19✎ 16:41 | 
        (14) ну ок
 тогда так, для будущих поколений, рабочий вариант &НаКлиенте Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт ЗаполнитьТаблицуИзДокумента(ВладелецФормы.Объект.Ссылка); ВладелецФормы.Объект.Товары.Очистить(); Для Каждого СтрТовары Из Объект.Товары Цикл НоваяЗапись = ВладелецФормы.Объект.Товары.Добавить(); ЗаполнитьЗначенияСвойств(НоваяЗапись, СтрТовары); КонецЦикла; ВладелецФормы.Модифицированность = Истина; КонецПроцедуры &НаСервере Процедура ЗаполнитьТаблицуИзДокумента(Документ) Экспорт Запрос = Новый Запрос(); Запрос.Текст = "ВЫБРАТЬ | Товары.Номенклатура КАК Номенклатура, | Товары.СчетУчета КАК СчетУчета, | Товары.Количество КАК Количество, | Товары.КоличествоУчет КАК КоличествоУчет, | Товары.Цена КАК Цена, | Товары.ЦенаВРознице КАК ЦенаВРознице, | Товары.Сумма КАК Сумма, | Товары.СуммаУчет КАК СуммаУчет, | Товары.ПартияМатериаловВЭксплуатации КАК ПартияМатериаловВЭксплуатации, | Товары.ФизЛицо КАК ФизЛицо |ИЗ | Документ.ИнвентаризацияТоваровНаСкладе.Товары КАК Товары |ГДЕ | Товары.Ссылка = &Ссылка | |УПОРЯДОЧИТЬ ПО | Товары.Номенклатура.Код" ; Запрос.УстановитьПараметр("Ссылка", Документ); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл НоваяЗапись = Объект.Товары.Добавить(); ЗаполнитьЗначенияСвойств(НоваяЗапись, Выборка); КонецЦикла; КонецПроцедуры В обработку добавить ТЧ со структурой как в документе. Всем спасибо. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |