Получить данные из таблицы формы 1с
ТекущиеДанные — свойство таблицы формы, предоставляющее доступ к данным текущей строки. Оно может быть представлено тремя типами данных (в зависимости от источника таблицы формы): ДанныеФормыСтруктура, ДанныеФормыЭлементКоллекции, ДанныеФормыЭлементДерева. По сути, в каждом из этих случаев, текущие данные 1с представляют из себя структуру текущей строки таблицы формы.
Вся информация, представленная в статье, относится только к управляемому приложению.
Так как свойство относится к элементу формы (таблице), данные получаются именно из него, а не из источника. Из этого следует несколько особенностей свойства ТекущиеДанные:
- Доступно только на клиенте. Его нельзя передавать и использовать на сервере. Поэтому правильно будет получить значения нужных полей в клиентской процедуре и передать их в серверную, при необходимости.
- Содержит данные реквизитов добавленных на форму, а также данные реквизитов с установленным флагом Использовать всегда. Остальные реквизиты отсутствуют в коллекции.
Как видно на картинке, в текущих данных представлены реквизиты Номенклатура и Сумма, добавленные в таблицу и реквизит Количество с установленным флагом Использовать всегда. - В случае, если таблица формы пустая или у нее нет активизированной строки, свойство ТекущиеДанные будет содержать значение Неопределено. Поэтому, перед использованием свойства, имеет смысл делать проверку. Но только в тех случаях, когда таблица действительно может быть пустой или не активизированной. Например событие ПриАктивизацииСтроки вызывается и для пустой таблицы. А вот событие ПриИзменении колонки таблицы, может вызываться только при наличии активизированной строки. Поэтому в проверке не будет смысла.
- При помощи свойства ТекущиеДанные можно не только читать, но и изменять информацию. Исключение — таблица формы, источником которой является динамический список. В этом случае изменение текущих данных, не приведет к изменению строки таблицы.
Варианты получения свойства Текущие данные 1С
В общем случае к свойству ТекущиеДанные можно обратиться через элемент формы к которому оно относится.
Но при обращении к текущим данным из обработчика события таблицы формы, можно воспользоваться параметром Элемент. В нем уже содержится таблица формы. В этом случае обращение к текущим данным будет выглядеть следующим образом:
Такое обращение к текущим данным не получится реализовать в обработчиках событий колонок таблицы формы. Так как в параметр Элемент там передается ПолеФормы, относящееся к колонке.
Таблица значений в 1С 8.3 позволяет строить динамические наборы значений. При этом каких-либо жестких ограничений на тип данных не накладывается. Таблица значений создается в памяти и не сохраняется в базе данных, имеет множество полезных возможностей и работает очень быстро.
Свойствами таблиц значений являются:
- индексы (коллекция индексов таблицы значений)
- колонки (коллекция колонок таблицы значений).
Элементом коллекции является строка таблицы значений. Но необходимо учитывать тот факт, что с таблицей значений можно работать только на сервере.
Работа с таблицей значений в 1С 8.3 на примерах
Создать новую таблицу значений
Добавить колонку в таблицу значений
Добавить колонку с описанием типа
Добавить строку в таблицу значений
Заполнить строку значениями
Вставить строку
Сортировка
//Сортирует таблицу значение по нужным колонкам и направлению сортировки
ТЗ.Сортировать(«Цвет Убыв, Вес Возр»);
Получить значение
Удалить строку
Найти одну строку
Найти несколько строк
Свернуть таблицу значений
Скопировать таблицу
Скопировать таблицу без данных
Узнать количество строк
Очистить
Обход таблицы значения
Обход коллекции с выбором элемента осуществляется с помощью цикла >, где оператор цикла Для предназначен для циклического повторения операторов, находящихся внутри конструкции, в данном случае таблицы значений. Так же можно обращаться к элементу коллекции посредством оператора [ ] ([аргумент]), где аргументом является индекс строки. Нумерация индексов строк начинается с нуля [0].
Прямой обход
Обратный обход таблицы (снизу вверх)
Чаще всего применяется для удаления строк в таблице.
Обход колонок
Можно перечислить все колонки в таблице значений в 1с 8.3 с помощю цикла >:
ТаблицаЗначений — это программный объект встроенного языка, позволяющий строить произвольные наборы данных в памяти компьютера, отображать их в табличном виде, а также программно и интерактивно манипулировать ими (добавлять, редактировать, удалять и сортировать).
Таблицы состоят из строк и колонок. Строки располагаются вниз по вертикали, а колонки — вправо по горизонтали. Строки и колонки имеют индексы, по которым к ним можно обращаться напрямую (начинаются с 0). Кроме этого, к колонкам можно обращаться по идентификатору.
Пересечения строк и колонок образуют ячейки, в которых содержатся значения. Тип значения определяется типом значения колонки.
Таблица значений является полностью динамическим объектом, т.е. Вы можете манипулировать не только строками таблицы, добавляя и удаляя их, но и колонками.
Таблица значений может использоваться явно при создании в коде необходимого количества переменных типа ТаблицаЗначений , либо неявно: при добавлении элемента управления ТабличноеПоле на обычную форму, и ТаблицаФормы — на управляемую. Здесь мы рассмотрим только программную работу с таблицей значений.
Создание таблицы значений
Как и большинство объектов встроенного языка, новая таблица значений может быть создана с помощью оператора Новый :
Колонки таблицы значений
Прежде чем начать работу с таблицей значений, необходимо создать структуру колонок. Каждая колонка характеризуется следующими свойствами:
- Имя — идентификатор колонки (может содержать только алфавитные символы, цифры и знаки подчеркивания. Причем, начинаться имя колонки может только с буквы или символа подчеркивания);
- Заголовок — представление колонки в диалогах (может содержать произвольные символы);
- ТипЗначения — тип значения содержимого ячеек в этой колонке. Если тип не задан, в ячейке можно хранить значения произвольного типа;
- Ширина — ширина колонки в диалогах;
Доступ к колонкам производится через свойство Колонки объекта ТаблицаЗначений . Для добавления новой колонки используется метод Добавить():
Для того, чтобы определить наличие колонки с нужным именем используется метод Найти():
Перебор колонок выполняется следующим образом:
Для удаления колонки используется метод Удалить():
Свойства колонки таблицы значений
Имя | Тип | Описание |
---|---|---|
Имя | Строка | символьный идентификатор колонки, по которому к ней можно обращаться из кода |
Заголовок | Строка | строковое представление колонки на форме |
ТипЗначения | ОписаниеТипов | свойство органичивает пространство доступных значений, которые можно указать в данной колонке |
Ширина | Число | ширина колонки на форме (выражается в количестве символов) |
Методы коллекции колонок таблицы значений
Вставить() | Вставляет новую колонку в указанную позицию коллекции |
Добавить() | Добавляет новую колонку в конец коллекции |
Количество() | Возвращает количество колонок в коллекции |
Найти() | Ищет колонку в коллекции по имени |
Очистить() | Удаляет все колонки из коллекции |
Сдвинуть() | Сдвигает колонку влево или вправо |
Удалить() | Удаляет колонку из коллекции |
Строки таблицы значений
С колонками разобрались. Давайте теперь разберемся со строками. Строки таблицы значений можно программно добавлять и удалять, перемещать и сортировать, а также выполнять операции поиска и отбора.
Добавление и удаление строк
Для добавления новой строки используется метод Добавить() объекта ТаблицаЗначений . Метод возвращает объект СтрокаТаблицыЗначений , с которым доступны дальнейшие манипуляции:
И только теперь мы можем заполнить строку данными. Для этого обращаемся к ячейкам строки, указывая идентификаторы колонок через точку:
Обратите внимание, что каждая СтрокаТаблицыЗначений ссылается на таблицу значений с помощью метода Владелец():
Для удаления строки используется метод Удалить() объекта ТаблицаЗначений . Строку можно удалить либо передав методу непосредственно строку, либо ее индекс:
Перебор строк таблицы значений
Для перебора строк удобнее всего использовать оператор цикла Для Каждого . В редких случаях оправдано применение цикла Для :
Поиск строк
Все методы таблицы значений:
Вставить() | Вставляет строку на указанное место |
ВыбратьСтроку() | Позволяет интерактивно выбрать строку в диалоговом окне |
ВыгрузитьКолонку() | Выгружает значения ячеек указанной колонки в массив значений |
Добавить() | Добавлет новую строку в таблицу значений |
ЗагрузитьКолонку() | Загружает значения в ячейки указанной колонки из массива |
ЗаполнитьЗначения() | Заполняет ячейки указанных колонок определенным значением |
Индекс() | Возвращает индекс строки таблицы значений |
Итог() | Возвращает просуммированный итог по колонке таблицы значений |
Количество() | Возвращает количество строк в таблице значений |
Найти() | Выполняет поиск строки по значению |
НайтиСтроки() | Выполняет поиск строк по указанным параметрам |
Очистить() | Очищает строки таблицы значений |
Получить() | Возвращает строку по ее индексу |
Свернуть() | Выполняет сжатие строк и колонок таблицы значений |
Сдвинуть() | Сдвигает строку вверх или вниз по таблице |
Скопировать() | Создает новую таблицу значений копированием текущей |
СкопироватьКолонки() | Создает новую пустую таблицу значений путем копирования колонок текущей таблицы |
Сортировать() | Выполняет сортировку строк таблицы значений по указанным колонкам |
Удалить() | Удаляет строку таблицы значений |
Иерархию свойств и типов значений, связанных с таблицей значений, схематически можно представить в виде дерева:
Таблица значений — это универсальная коллекция, которая может содержать неограниченное количество строк. Тут же встает дилемма: у таблицы значений в обычных формах нет инструментов интерактивного отбора. Они есть только у табличной части. Но у табличной части есть другое ограничение: количество строк ограничено и не может превышать 99 999 строк. Как быть?
Не отчаивайтесь, выход есть, но придется немного поработать руками.
Допустим, у нас есть таблица со следующей структурой:
- Дата (Дата) — день наблюдений
- Время дня (Строка) — время дня (утро, день, вечер и ночь)
- Температура (Число) — средняя температура
Планируется, что записи таблицы будут отбираться по значению поля Дата.
Сначала создадим таблицу значений на форме. Обязательно укажем структуру колонок, чтобы не приходилось создавать их каждый раз заново:
Среди реквизитов формы также создадим реквизит типа «ТаблицаЗначений», который будет хранить исходную таблицу значений:
Для поля «Отбор по дате» назначим два обработчика событий: первый — ПриИзменении()
и второй — Очистка() :
Проверить, как это работает, предлагаю Вам в качестве домашнего задания.
при разработке на обычных формах было удобно выводить результат запроса используя метод СоздатьКолоки():
В управляемом приложении метод СоздатьКолоки() не доступен, ниже представлена процедура, которая отображает на управляемой форме содержимое таблицы значений переданное ей в качестве параметра:
Код вывода результата запроса на управляемую форму:
Задача в том, чтобы отображать на форме таблицу значений, структура которой может меняться. К примеру в результате запроса к первой таблице мы получаем пять колонок, а в результате запроса ко второй таблице семь колонок. Соответственно при выполнении каждого из запросов, старые колонки нужно убрать, а новые добавить.
Создаем реквизит формы ДанныеТаблицы , тип ТаблицаЗначений , на форму его не выносим. И саму таблицу формы и ее колонки будем создавать программно. Для удобства тестирования добавим еще команду формы СоздатьТаблицу .
Реквизит НомерТаблицы поочередно принимает значение нуля или единицы и нужен лишь для того, чтобы каждый раз получать другую таблицу значений.
Задача в том, чтобы отображать на форме таблицу значений, структура которой может меняться. К примеру в результате запроса к первой таблице мы получаем пять колонок, а в результате запроса ко второй таблице семь колонок. Соответственно при выполнении каждого из запросов, старые колонки нужно убрать, а новые добавить.
Создаем реквизит формы ДанныеТаблицы , тип ТаблицаЗначений , на форму его не выносим. И саму таблицу формы и ее колонки будем создавать программно. Для удобства тестирования добавим еще команду формы СоздатьТаблицу .
Реквизит НомерТаблицы поочередно принимает значение нуля или единицы и нужен лишь для того, чтобы каждый раз получать другую таблицу значений.
Справка
УправляемаяФорма.ИзменитьРеквизиты()
- ДобавляемыеРеквизиты (необязательный, тип Массив ). Массив, содержащий объекты типа РеквизитФормы . Добавлять можно реквизиты верхнего уровня и вложенные реквизиты, являющиеся колонками. К добавленным реквизитам верхнего уровня из модуля можно обращаться только с помощью конструкции ЭтотОбъект .
- УдаляемыеРеквизиты (необязательный, тип Массив ). Массив, содержащий строки, описывающие пути к удаляемым реквизитам. Удалять можно только ранее программно добавленные реквизиты.
- Изменяет структуру реквизитов формы. Сначала выполняется удаление реквизитов. Таким образом массивы добавляемых и удаляемых реквизитов могут содержать реквизиты с одинаковым путём.
- Внимание! Действия добавления и удаления выполняются за один вызов. Следует учитывать, что операция изменения состава реквизитов является ресуркоемкой, поэтому операции изменения состава реквизитов формы выполняются пакетным образом.
- Сервер, мобильное приложение (сервер).
ВсеЭлементыФормы.Добавить()
- Имя (обязательный, тип Строка ). Уникальное имя добавляемого элемента.
- ТипЭлемента (обязательный, тип Тип ). Тип добавляемого элемента.
- Родитель (необязательный, тип: ГруппаФормы ; ТаблицаФормы ; УправляемаяФорма ). Родитель для добавляемого элемента. Если не указан, то добавляется на верхний уровень.
- Тип: ДекорацияФормы ; ГруппаФормы ; КнопкаФормы ; ТаблицаФормы ; ПолеФормы .
- Добавляет элемент в коллекцию.
- Сервер, мобильное приложение (сервер).
Nav view search
Navigation
Search
Универсальная печать таблицы значений для 1С 8
Если требуется выводить на печать данные из таблицы значений (табличного поля), то можно воспользоваться кодом из примера ниже. Код можно встроить в общий модуль и вызывать из любой обработки или формы документа.
Второй вариант распечатать произвольную таблицу значений это использовать макет. В этом варианте надо подготовить макет, поместить его, например, в «общие макеты». В макете надо сделать табличку с 2-мя именованными вертикальными областями «Основной», «Показатели»; с 3-мя именованными горизонтальными областями «Шапка», «Строка», «Итог». Далее перебором всех колонок ТЗ вывести их в табличный документ.
Результат печати ниже. Обработку с примером можно скачать здесь.
личный блог
С задачей вывода каких либо данных в Таблицу Значений (ТЗ) на форме сталкиваются наверное все программисты. Если раньше до выхода Управляемого Интерфейса все решалось довольно просто, то теперь все немного изменилось.
Для обычных форм.
Стоит отметить, что предварительно нужно создать соответствующие РезультатуЗапроса колонки таблицы значений. Делается это также просто. Добавить ТаблицуЗначений следует в реквизиты Формы. Еще раз акцентирую внимание — Названия колонок и типы данных колонок ТЗ должны совпадать и на форме и в запросе. Можно вообще не создавать ТЗ на форме, а описать ее программно, примерно как то так:
Для управляемых форм все ровно тоже самое кроме того что нужно на сервере получить значение данных ТЗ на форме, записать в них результат запроса и потом снова вернуть их на форму.
Ниже пример такого преобразования.
Во всей этой истории следует обратить внимание на 2 строчки.
Первая
Вторая
Первый из типа данных ДанныеФормыКоллекция преобразует данные в тип ТаблицаЗначений. Второй соответственно конвертирует в обратном направлении.
Читайте также: