Как получить отобранные строки табличной части 1с
Перейти к содержимому

Как получить отобранные строки табличной части 1с

  • автор:

Как получить отобранные строки табличной части 1с

Табличная часть на форме содержит определённые строки. Пользователь применяет к табличной части отбор (через правую кнопку мышки), например «Отбор по значению в текущей колонке». Как мне получить отобранные значения и затем обработать их? Какой раздел в ЖКК покурить?

(0) Покури базу знаний
+(1) т.е. Книгу Знаний. Понавыдумывали названий. 🙂
Заставь пользователя выделять строки которые нужно обработать.
(3) многатыщьстрок выделить? уже смишно.
(3) а на что тогда эта ваша 1С.

Когда юзер жмет кнопку обработать ТЧ он обычно не задумывается, что установлен какой-то отбор. Ограничивать обработку тем что на экране как-то нелогично. Пусть сам укажет что надо обработать, и тут отбор + Ctrl+A ему в помощь.

(6) А. Хм. Тогда, дело говоришь! Спасибо!

«Если понадобилось перебрать строки, вошедшие в отбор, то это можно сделать, только заново перебрав все строки и проверив условие отбора для каждой строки. Перебрать строки табличного поля, которые сейчас на экране — невозможно.» из Святой Книги Знаний.
Думал, что всё-таки получится перебрать то, что на экране.

Или можно элемент отбора вытащить на морду и рядом кнопку, тогда юзер интуитивно догонит, что обрабатываться будут именно отобранные строки.
(8) Там устаревшие данные, легче построителем запроса по ТЗ.

(9)+
Для ТЧ:
//Построителем
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличнаяЧасть);
//Здесь отбор если нужно
Для Каждого ЭлементОтбора из ЭлементыФормы.ТабличнаяЧасть.ОтборСтрок Цикл
ЗаполнитьЗначенияСвойств(Построитель.Отбор.Добавить(ЭлементОтбора.Имя), ЭлементОтбора);
КонецЦикла;

Резульат = Построитель.Результат; //отобранные строки типа РезульатаЗапроса

Табличное поле ~ Как получить строки табличного поля, отобранные отбором?

Распечатать

Распечатать

Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить — сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 50
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш 1С 7.x : Как получить курсы валют с сайта НБУ http://www.bank.gov.ua/ за любую дату ? 6
Функция ПолучитьТаблицуКурсовНБУ(ДатаКурса, Ежедневно = 1) // если в качестве второго параметра указать число отличное от 1 — получем валюты, которые котируются на ежемесячной основе Перем Reader, Url, Точки, HtmlTab, Строк, Р, НомСтроки, НомЯче 1С Предприятие что это? 12
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » — конкретный продукт, который выпускает компания 1С . Что такое Посмотреть все результаты поиска похожих

Еще в этой же категории

Как в форме списка реализовать сортировку по своему реквизиту? 12
Если реквизит примитивного типа, то достаточно установить для свойства реквизита «Индексировать» значение «Индексировать» или «Индексировать с доп. упорядочиванием» (не доступно для реквизитов типа ХранилищеЗначения). Если же реквизит ссылочного типа Оформление строки в ПриПолученииДанных или ПриВыводеСтроки 8
Событие ПриПолученииДанных использется для оформления ячеек строк данных, отображаемых табличным полем. Обработчик данного события вызывается табличным полем в тех же случаях, что и обработчик ПриВыводеСтроки , т.е. при обновлении данных, отображ Сортировка списка по произвольной колонке? 7
В процедуру ПриОткрытии или в конец модуля добавить: ЭлементыФормы.РегистрСведенийСписок.НастройкаПорядка.НомерСоглашения.Доступность=Истина; Где НомерСоглашения — Колонка в списке регистра сведений по которой нужно сортировать! Далее щелкнув Как пользователям запретить удаление условия отбора в форме списка? 5
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; Полный код: ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип(» ЭлементОтбораКомпоновкиДанных» )); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпонов Отбор по списку значений 3
СозданныйСписок = Новый СписокЗначений; СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.Выполнено); СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.ЗакрытиеЗаявки); СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.ОтклоненаРукОтдЗакупок); Посмотреть все в категории Список Справочника, Документов, Регистров

Как получить отобранные строки табличной части 1с

Как то мне понадобилось получить список строк табличного поля, которые отобраны пользователем с помощью отбора, чтобы потом их удалить. Мне предлагали построить эквивалентный запрос, но я посчитал это слишком сложным.
В итоге родилось простое решение. Оно основано на том, чтобы перебрать все строки источника данных табличного поля и по очереди текущей строкой устанавливать текущую строку источника данных. Если строка в отборе, то она установится как текущая, иначе не установится. Вот и все. Смотрите код.

Работает по идее не только для регистров, но и для прочих табличных полей.

//Задача - удалить все строки из табличного поля ТаблицаРегистра, которые отобраны отбором //ТаблицаРегистра - табличное поле формы ТаблицаРегистра=ЭлементыФормы[ТаблицаРегистраИмя]; //Т - данные элемента формы ТаблицаРегистра, имеют тип, например "РегистрНакопленияНаборЗаписей.ЗатратыБухгалтерскийУчет" Т=Неопределено; Выполнить("Т="+ТаблицаРегистра.Данные); //Список строк, которые удаляем СтрокиКУдалению=Новый Массив(); //Перебираем все строки источника данных Для Каждого Стр ИЗ Т Цикл //Пробуем у табличного поля поставить в качестве текущей строки текущую строку источника данных //Такое присваивание работает как ни странно даже для типа РегистрНакопленияЗапись.ЗатратыБухгалтерскийУчет //Т.е. даже для записей из набора записей работает ТаблицаРегистра.ТекущаяСтрока=Стр; //Если строка попадает в отбор, то текущая строка устанавливается, иначе остается прежней Если ТаблицаРегистра.ТекущаяСтрока=Стр Тогда СтрокиКУдалению.Добавить(Стр); //Здесь логика алгоритма - то, что в отборе, нужно удалить КонецЕсли; КонецЦикла; //Перебираем Для Каждого Стр ИЗ СтрокиКУдалению Цикл Т.Удалить(Стр); //Удаляем строку КонецЦикла;

Ход обсуждения, в результате которого я пришел к такому алгоритму здесь:
v8: Туплю — как получить список отобранных в таблице

Другой вариант, не мой, используется ПостроительЗапроса:

ОтборСтрок = ; ПостроительЗапроса = Новый ПостроительЗапроса; ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличнаяЧастьИсточник); // Добавляются необходимые отборы, такие же как в отборы в табличной части. Для Каждого ЭлементОтбора Из ОтборСтрок Цикл Если ЭлементОтбора.Использование Тогда НовыйОтбор = ПостроительЗапроса.Отбор.Добавить(ЭлементОтбора.Имя); НовыйОтбор.Использование = Истина; НовыйОтбор.ВидСравнения = ЭлементОтбора.ВидСравнения; // нужный вид сравнения НовыйОтбор.ЗначениеС = ЭлементОтбора.ЗначениеС; НовыйОтбор.ЗначениеПо = ЭлементОтбора.ЗначениеПо; НовыйОтбор.Значение = ЭлементОтбора.Значение; КонецЕсли; КонецЦикла; ПостроительЗапроса.Выполнить (); Результат = ПостроительЗапроса.Результат; // отобранные строки типа РезультатЗапроса 
mikeA

В управляемых формах всё проще, хотя местами не столь очевидно.

Существует метод таблицы формы ПроверитьСтроку , который возвращает истину для строки, удовлетворяющей условиям отбора, установленным в форме. Неочевидность здесь в том, что в параметрах этого метода нужно передавать идентификатор строки хотя в СП сказано передавать строку. Ну и существует это метод на клиенте, а обработка строк выполняется как правило на сервере.

Идея в следующем: на клиенте формируем массив индексов строк, удовлетворяющих установленному отбору и передаём его на сервер, где снова формируем массив теперь уже самих строк , их выгружаем в таблицу значений, с которой и работем.

Все процедуры расположены в модуле управляемой формы. ТаблицаФормы — реквизит формы типа ТаблицаЗначений , на форме расположена одноимённая таблица, связанная с этим реквизитом

&НаКлиенте Процедура ОбработатьСтрокиТаблицы(Команда) ИдентификаторыВыбраныхСтрок= Новый Массив; Для Каждого СтрокаТаблицыФормы Из ТаблицаФормы Цикл ИдентификаторСтроки= СтрокаТаблицыФормы.ПолучитьИдентификатор(); Если Элементы.ТаблицаФормы.ПроверитьСтроку(ИдентификаторСтроки) Тогда ИдентификаторыВыбраныхСтрок.Добавить(ИдентификаторСтроки); КонецЕсли; КонецЦикла; ОбработатьСтрокиТаблицыНаСервере(ИдентификаторыВыбраныхСтрок); КонецПроцедуры &НаСервере Процедура ОбработатьСтрокиТаблицыНаСервере(ИдентификаторыВыбраныхСтрок) ВыбраныеСтроки= Новый Массив; Для Каждого ИдентификаторСтроки Из ИдентификаторыВыбраныхСтрок Цикл ВыбраныеСтроки.Добавить(ТаблицаФормы.НайтиПоИдентификатору(ИдентификаторСтроки)); КонецЦикла; ТаблицаЗначенийСОтбором= ТаблицаФормы.Выгрузить(ВыбраныеСтроки); КонецПроцедуры

P.S. Мне нужно было для управляемых форм в 8.3.6. Возможно будет работать и для обычных. Там у табличного поля тоже есть метод ПроверитьСтроку и не надо разносить клиент-сервер.

УФ. Как получить отобранные строки табличной части?

У расширения таблицы управляемой формы для табличной части есть свойство «ОтборСтрок» типа ФиксированнаяСтруктура.
Работает без вопросов. Вопрос — можно ли как-то (и как именно) получить отобранные строки? Или только руками проверять по идентичным условиям?

Найденные решения
5. kasper076 97 29.11.16 14:45 Сейчас в теме

СоответствуетОтбору = Элементы.ТабличнаяЧасть1.ПроверитьСтроку(ИндексСтроки)

Однако это работает.

Korolev; Isonic; pioneeer; moralex2k; cheiser1982; adhocprog; Nuuq; RadoLex; yupi71; herfis; + 10 – Ответить

Остальные ответы

  • Дата
  • Дата
  • Рейтинг всех уровней
  • Рейтинг 1-го уровня
  • Древо развёрнутое
  • Древо свернутое

Свернуть все
2. omut 29.11.16 12:08 Сейчас в теме
Только руками по идентичным условиям.
6. kasper076 97 29.11.16 15:57 Сейчас в теме

&НаКлиенте Процедура Команда1(Команда) Элементы.ТабличнаяЧасть1.ОтборСтрок = Новый ФиксированнаяСтруктура("Реквизит1, Реквизит2", "15", "Тест2"); КонецПроцедуры

После установки отбора строк:
Элементы.ТабличнаяЧасть1.ПроверитьСтроку(2) = Истина
Элементы.ТабличнаяЧасть1.ПроверитьСтроку(5) = Истина
Элементы.ТабличнаяЧасть1.ПроверитьСтроку(1) = Ложь
Элементы.ТабличнаяЧасть1.ПроверитьСтроку(6) = Ложь

3. kasper076 97 29.11.16 13:26 Сейчас в теме
Придется перебрать все строки и применить к ним метод ПроверитьСтроку()

ТаблицаФормы (FormTable)
ПроверитьСтроку (CheckRow)
Синтаксис:

Тип: Произвольный.
Строка таблицы. Тип параметра зависит от типа редактируемого значения.
Возвращаемое значение:

Проверяет, соответствует ли строка, установленному в таблице отбору.

Тонкий клиент, веб-клиент, толстый клиент, мобильное приложение(клиент).

Alexsh_kz; eaa; moralex2k; adhocprog; sommid; + 5 – Ответить
4. herfis 491 29.11.16 13:50 Сейчас в теме

(3) Это ведь метод ТаблицыФормы, элемента интерфейса. ТаблицаФормы вообще не итерируемая. Человечески обойти я могу только ее источник данных, т.е. ДанныеФормыКоллекция. А туда без извратов эти уши не притянуть. ПроверитьСтроку() на практике удобно проверять только новые строки, которые добавляются через интерфейс, если вдруг надо такое. Куда еще его можно приткнуть — навскидку даже и не придумаю. Так что мимо кассы.

5. kasper076 97 29.11.16 14:45 Сейчас в теме

СоответствуетОтбору = Элементы.ТабличнаяЧасть1.ПроверитьСтроку(ИндексСтроки)

Однако это работает.

Korolev; Isonic; pioneeer; moralex2k; cheiser1982; adhocprog; Nuuq; RadoLex; yupi71; herfis; + 10 – Ответить

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *