как обратиться к таблице значений на форме
Программирование в 1С для всех
Таблица значений 1С — это универсальная коллекция значений, которую разработчик может использовать при программной разработке для реализации своих алгоритмов. По сути, таблица значений 1С представляет собой динамический набор значений, имеющих колонки и столбцы.
Работая в конфигураторе 1С, программист может создать таблицу значений, как при помощи кода, так и интерактивно на форме.
Таблица значений 1С на управляемой форме
На любой управляемой форме 1С 8.3 разработчик может разместить таблицу значений в виде реквизита формы. Для этого нужно создать новый реквизит и задать ему тип «Таблица значений».
Таблица значений на форме размещается в виде элемента формы Таблица. Это элемент будет создан автоматически, если мы перетащим мышкой реквизит с типом таблица значений в дерево элементов.
Но если у Вас нет задачи, чтобы пользователь как-то интерактивно работал с таблицей значений на форме, то совсем необязательно создавать реквизит формы с типом таблица значений. Разработчик может работать с таблицей значений из встроенного языка программирования 1С.
Программное создание таблицы значений 1С
Вы можете создать таблицу значений в любом программном модуле при помощи оператора Новый.
ТЗ = Новый ТаблицаЗначений ;
Эта таблица значений будет существовать в том контексте, в котором Вы её создали: если Вы создали её в процедуре или функции, то она будет существовать до того момента пока выполняется эта процедура или функция. Если Вы её создали в программном модуле объекта, то таблица значений будет существовать пока выполняется обращение к этому объекту.
Но имейте в виду, что если вы создали таблицу значений в процедуре или функции программного модуля управляемой формы 1С 8.3, то на клиенте (под директивой &НаКлиенте) код будет выполняться только в толстом клиенте. В тонком клиенте и на веб-клиенте нельзя работать с таблицей значений. Возникнет ошибка!
Но, на тонком и веб-клиенте нельзя работать только с таблицей значений 1С, которая создана программно (с помощью оператора Новый). Если же таблица значений создана на форме в виде реквизита, то обращаться к этому реквизиту можно в любом контексте, платформа преобразует её в объект ДанныеФормыКоллекция.
Как я уже говорил, вся информация в таблице значений в платформе 1С 8.3 разбита на колонки и на строки, причем каждая колонка таблицы должна иметь свое уникальное название. В том случае, если таблица выводится на форму посредством элемента Таблица, то у данного элемента могут быть все колонки, которые имеются у соответствующего реквизита с типом таблица значений с соответствующими именами. Причем количество колонок в Таблице на форме может быть меньше, чем непосредственно в таблице значений, то есть не все колонки из таблицы значений нужно отображать в таблице.
Нет никаких ограничений на количество колонок. Количество колонок, как правило, всегда фиксировано и задается разработчиком на этапе создания нужного функционала, а количество строк переменно.
У таблиц значений есть ряд полезных методов, которые позволяют сортировать таблицу по определенным колонкам, сворачивать, получать итог по конкретной колонке, осуществлять выборку части строк по определенным параметрам и многое другое.
О работе с колонками и строками в таблицах значений 1С читайте в статьях по ссылкам:
Статьи о других универсальных коллекциях значений в 1С
Более подробно о работе с таблицами значений и другими интересными объектами языка программирования в 1С читайте в моей книге «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
Промо-код на скидку в 15% — 48PVXHeYu
Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Web Money — R955262494655
Вступайте в мои группы:
One thought on “ Таблица значений 1С ”
Добрый день, Ильяз! хотела поддержать проект и не смогла оплатить с Карты Маэстро.
М.б. другие варианты.
Спасибо за проект!
Работаем с таблицей значений программно
ТаблицаЗначений — это программный объект встроенного языка, позволяющий строить произвольные наборы данных в памяти компьютера, отображать их в табличном виде, а также программно и интерактивно манипулировать ими (добавлять, редактировать, удалять и сортировать).
Таблицы состоят из строк и колонок. Строки располагаются вниз по вертикали, а колонки — вправо по горизонтали. Строки и колонки имеют индексы, по которым к ним можно обращаться напрямую (начинаются с 0). Кроме этого, к колонкам можно обращаться по идентификатору.
Пересечения строк и колонок образуют ячейки, в которых содержатся значения. Тип значения определяется типом значения колонки.
Таблица значений является полностью динамическим объектом, т.е. Вы можете манипулировать не только строками таблицы, добавляя и удаляя их, но и колонками.
Создание таблицы значений
Как и большинство объектов встроенного языка, новая таблица значений может быть создана с помощью оператора Новый :
Колонки таблицы значений
Прежде чем начать работу с таблицей значений, необходимо создать структуру колонок. Каждая колонка характеризуется следующими свойствами:
Для того, чтобы определить наличие колонки с нужным именем используется метод Найти():
Перебор колонок выполняется следующим образом:
Для удаления колонки используется метод Удалить():
Свойства колонки таблицы значений
Имя | Тип | Описание |
---|---|---|
Имя | Строка | символьный идентификатор колонки, по которому к ней можно обращаться из кода |
Заголовок | Строка | строковое представление колонки на форме |
ТипЗначения | ОписаниеТипов | свойство органичивает пространство доступных значений, которые можно указать в данной колонке |
Ширина | Число | ширина колонки на форме (выражается в количестве символов) |
Методы коллекции колонок таблицы значений
Вставить() | Вставляет новую колонку в указанную позицию коллекции |
Добавить() | Добавляет новую колонку в конец коллекции |
Количество() | Возвращает количество колонок в коллекции |
Найти() | Ищет колонку в коллекции по имени |
Очистить() | Удаляет все колонки из коллекции |
Сдвинуть() | Сдвигает колонку влево или вправо |
Удалить() | Удаляет колонку из коллекции |
Строки таблицы значений
С колонками разобрались. Давайте теперь разберемся со строками. Строки таблицы значений можно программно добавлять и удалять, перемещать и сортировать, а также выполнять операции поиска и отбора.
Добавление и удаление строк
И только теперь мы можем заполнить строку данными. Для этого обращаемся к ячейкам строки, указывая идентификаторы колонок через точку:
Обратите внимание, что каждая СтрокаТаблицыЗначений ссылается на таблицу значений с помощью метода Владелец():
Перебор строк таблицы значений
Поиск строк
В отличие от платформы 1С:Предприятие 7.7 в 8-ке расширен функционал работы с таблицей значений. Поиск можно выполнять не только по значению в колонке (в этом случае будет возвращена первая найденная строка), но и по набору свойств (в этом случае возвращается массив строк):
Все методы таблицы значений:
Вставить() | Вставляет строку на указанное место |
ВыбратьСтроку() | Позволяет интерактивно выбрать строку в диалоговом окне |
ВыгрузитьКолонку() | Выгружает значения ячеек указанной колонки в массив значений |
Добавить() | Добавлет новую строку в таблицу значений |
ЗагрузитьКолонку() | Загружает значения в ячейки указанной колонки из массива |
ЗаполнитьЗначения() | Заполняет ячейки указанных колонок определенным значением |
Индекс() | Возвращает индекс строки таблицы значений |
Итог() | Возвращает просуммированный итог по колонке таблицы значений |
Количество() | Возвращает количество строк в таблице значений |
Найти() | Выполняет поиск строки по значению |
НайтиСтроки() | Выполняет поиск строк по указанным параметрам |
Очистить() | Очищает строки таблицы значений |
Получить() | Возвращает строку по ее индексу |
Свернуть() | Выполняет сжатие строк и колонок таблицы значений |
Сдвинуть() | Сдвигает строку вверх или вниз по таблице |
Скопировать() | Создает новую таблицу значений копированием текущей |
СкопироватьКолонки() | Создает новую пустую таблицу значений путем копирования колонок текущей таблицы |
Сортировать() | Выполняет сортировку строк таблицы значений по указанным колонкам |
Удалить() | Удаляет строку таблицы значений |
Иерархию свойств и типов значений, связанных с таблицей значений, схематически можно представить в виде дерева:
Как обратиться к таблице значений на форме
Таблица значений
Создание таблицы значений
Таблица значений часто применяется при программировании на 1С, потому что имеет множество полезных возможностей и работает очень быстро. Таблица значений создается в памяти и не сохраняется в базе данных, т.е. это временный набор данных.
Добавление строк в таблицу значений
Перебор строк таблицы значений
Сортировка таблицы значений
Поиск в таблице значений
Итоги и группировка таблицы значений
//часто требуется группировать строки и подсчитывать итоги по группам,
//в этом случае применяется метод Свернуть
Удаление строк и колонок из таблицы значений
ВНИМАНИЕ
Часто требуется удалить строки, удовлетворяющие определенному условию.
Так как при удалении строки из таблицы значений следующая строка становится текущей,
то указанная ниже программа может удалить НЕ ВСЕ необходимые строки.
В этом случае я рекомендую использовать следующий прием:
А вот еще один правильный алгоритм, предложенный Wlad:
Замечание(Туц). Предыдущий вариант не совсем правильный. Случай, когда последняя строка попадает под условие и в условии идёт обращение к строке таблицы, приводит к ошибке. Т.е. происходит попытка чтения для строки 0.
И ещё вариант, предложенный Туц:
Замечание (vligm). А я использую такой алгоритм (это, собственно говоря, шаблон):
Таблица значений как элемент диалога
Таблица значений может использоваться в экранных формах как элемент диалога с пользователем.
Методы УстановитьЗначение и ПолучитьЗначение
Эти методы позволяют обращаться к данным в таблице значений для чтения и записи.
Они могут пригодиться в особых случаях при написании универсальных программ (мастеры отчетов и т.д.).
Как получить доступ к реквизитам формы?
Этот цикл позволяет просмотреть имена а так же типы всех реквизитов формы, в том числе такие реквизиты как надписи, командные панели и тд.
Реквизиты формы могут быть различных типов. Поставив фильтр в виде типа реквизита мы можем просмотреть реквизиты определенного типа.
Если реквизит формы имеет тип «ТабличноеПоле», то можно такой элемент просканировать во вложенном цикле и узнать имена колонок таблицы:
Как получить значение отдельного реквизита формы?
Чаще требуется получать не массив реквизитов формы, а значение отдельных конкретных реквизитов формы. Например реквизиты «Шапки» или «Подвала» формы документа.
Реквизиты шапки могут иметь различные типы: Дата, СправочникСсылка, ЧекБокс, элемент раскрывающегося списка и др.
Как получить значение элементов табличной части формы?
Доступ к табличной части формы через объект
Доступ к табличной части формы (например: Товары) можно получить через объект:
Доступ к табличной части формы через ЭлементыФормы
Для того, чтобы код работал правильно, надо чтобы колонка формы табчасти объекта в свойстве данные ссылалась на реквизит табличной части объекта. Этим определяется тип колонки таб части формы.
То есть должна быть установлена связь между реквизитом табчасти объекта и реквизитом табчасти формы. Форм у объекта метаданных может быть много мы знаем. Табличную часть формы объекта можно получить через объект ЭлементыФормы :
Объект ЭлементыФормы используется для доступа к элементам управления, расположенным на форме, в частности к таб части документа.
Результат для документа Авансовый отчет:
Это табличное поле!! Товары
Количество строк: 4
Женские ботфорты коричневые
Ботинки женские демисезонные
Ботинки женские натуральная кожа
Женские босоножки
Результат для документа Авансовый отчет:
Это табличное поле!! ВыданныеАвансы
=======================
НомерСтроки 1
ДокументАванса Расходный кассовый ордер ТК000000004 от 15.02.2007 19:24:03
СуммаДокументаАванса 300
ВалютаДокументаАванса USD
Выдано 300
Сумма 174
Такое двойное сканирование удобно использовать для быстрой проверки того, что все колонки таб части формы имеют связь с реквизитами таб части объекта. Если такой связи у какой-либо колонки нет, система сгенерирует ошибку.
ТаблицаЗначений управляемые формы
Здравствуйте. Управляемые формы. В документе есть реквизит ФОРМЫ с типом «ТаблицаЗначений». По кнопке «Загрузить» открывается форма обработки, которая должна загрузить в эту таблицу данные из екселя. пока по кнопке Загрузить следующий код:
ПараметрыФормы = Новый Структура(«Документ», Объект.Ссылка);
Обработка = ПолучитьФорму(«Обработка.ЗагрузкаПланирование.Форма», ПараметрыФормы, ЭтаФорма);
Обработка.ОткрытьМодально();
но так я могу получить доступ к реквизитам объектам, а мне нужно именно формы получить ту таблицу значений и заполнить ее. подскажите, пожалуйста, как можно это реализовать
(0) 1. Не надо использовать модальное открытие форм, надо пользоваться методом ОткрытьФорму(), а у формы устанавливать режим блокирования владельца.
В этом стучае Таблица это таблица значений, как работать с неё знаешь.
После окончания её изменения необходимо преобразовать её в реквизит формы: ЗначениеВРеквизитФормы()
(4) я просто не знаю как в форме обработки с этой таблицей работать и вернуть ее обратно. ПриСозданииНаСервере я ее получила.
Дальше по кнопке «Выполнить в обработке»:
+(7) При этом, если не сервере необходимо работать именно с типом «ТаблицаЗначений», то необходимо выполнить преобразование данных:
(8) это я понимаю. но так хорошо получается, если в одном модуле все делать. Сначала. Тыкаем кнопку загрузить, по которой должна открыться форма обработки «ЗагрузкаПланирование»:
&НаКлиенте
как в нее передать реквизит формы TOTALКалендарный, который имеет тип ТаблицаЗначений?
Попробовала еще в ременным хранилищем.
В документе:
&НаКлиенте
В обработке:
как мне с ней тут дальше работать? на форме может тоже нужно создать таблицу значений и скопировать это туда?