Содержание
Задача в том, чтобы отображать на форме таблицу значений, структура которой может меняться. К примеру в результате запроса к первой таблице мы получаем пять колонок, а в результате запроса ко второй таблице семь колонок. Соответственно при выполнении каждого из запросов, старые колонки нужно убрать, а новые добавить.
Создаем реквизит формы ДанныеТаблицы , тип ТаблицаЗначений , на форму его не выносим. И саму таблицу формы и ее колонки будем создавать программно. Для удобства тестирования добавим еще команду формы СоздатьТаблицу .
Реквизит НомерТаблицы поочередно принимает значение нуля или единицы и нужен лишь для того, чтобы каждый раз получать другую таблицу значений.
Справка
УправляемаяФорма.ИзменитьРеквизиты()
- ДобавляемыеРеквизиты (необязательный, тип Массив ). Массив, содержащий объекты типа РеквизитФормы . Добавлять можно реквизиты верхнего уровня и вложенные реквизиты, являющиеся колонками. К добавленным реквизитам верхнего уровня из модуля можно обращаться только с помощью конструкции ЭтотОбъект .
- УдаляемыеРеквизиты (необязательный, тип Массив ). Массив, содержащий строки, описывающие пути к удаляемым реквизитам. Удалять можно только ранее программно добавленные реквизиты.
- Изменяет структуру реквизитов формы. Сначала выполняется удаление реквизитов. Таким образом массивы добавляемых и удаляемых реквизитов могут содержать реквизиты с одинаковым путём.
- Внимание! Действия добавления и удаления выполняются за один вызов. Следует учитывать, что операция изменения состава реквизитов является ресуркоемкой, поэтому операции изменения состава реквизитов формы выполняются пакетным образом.
- Сервер, мобильное приложение (сервер).
ВсеЭлементыФормы.Добавить()
- Имя (обязательный, тип Строка ). Уникальное имя добавляемого элемента.
- ТипЭлемента (обязательный, тип Тип ). Тип добавляемого элемента.
- Родитель (необязательный, тип: ГруппаФормы ; ТаблицаФормы ; УправляемаяФорма ). Родитель для добавляемого элемента. Если не указан, то добавляется на верхний уровень.
- Тип: ДекорацияФормы ; ГруппаФормы ; КнопкаФормы ; ТаблицаФормы ; ПолеФормы .
- Добавляет элемент в коллекцию.
- Сервер, мобильное приложение (сервер).
Search
Обработка табличных частей для 1с 8.3
Различные типовые конфигурации позволяют привязать внешнюю обработку к форме документа так, как если бы она была частью конфигурации, это очень полезно если нет возможности снять конфигурацию с поддержки, а заказчик просит удобную обработку табличной части документа. Для примера создадим обработку для конфигурации бухгалтерия 3.0, будем обрабатывать табличную часть документа требование-накладная.
Создадим новую обработку через конфигуратор.
Для того чтобы обработка корректно зарегистрировалась, необходимо добавить специальные процедуры в модуль объекта нашей новой обработки.
Эти процедуры используются при добавлении обработки в систему. Для информации, описание значений "параметров регистрации":
Вид — в зависимости от предназначения обработки может принимать значения:
- Отчет
- ЗаполнениеОбъекта
- Печатная форма
- Дополнительная обработка
- СозданиеСвязанныхОбъектов
- Дополнительный отчет
В нашем случае для обработки заполнения табличной части нам необходим вид обработки «ЗаполнениеОбъекта»
Назначение — в этом поле перечисляются документы, для которых эта обработка предназначена (в которых она появится после регистрации в информационной базе). Для перечисления этих документов создадим массив «Назначения» и добавим в него документ «ТребованиеНакладная».
Наименование — это наименование будет отображаться в списке дополнительных обработок.
Версия — версия нашего нового программного продукта.
Информация — этот ключ нашей структуры содержит дополнительную информацию о нашей обработке.
Безопасный режим — принимает значение Истина/Ложь. Мы будем использовать безопасный режим.
Команды — этот ключ структуры содержит перечень поставляемых нашей обработкой команд. Для команд мы создадим функцию ПолучитьТаблицуКоманд() и процедуру ДобавитьКоманду().
Немного подробнее остановимся на полях таблицы значений команд.
Представление — это представление команды для пользователя: какое название для него будет представлено в интерфейсе.
Идентификатор — это внутренний идентификатор команды в пределах нашей обработки
Использование — в зависимости от использования команды может принимать значения:
- ВызовСерверногоМетода — из модуля обработки вызывается серверная процедура.
- ОткрытиеФормы — используется для открытия формы обработки.
- ВызовКлиентского метода — для вызова клиентской процедуры из модуля обработки.
- СценарийвБезопасномРежиме — серверная процедура в безопасном режиме.
В нашем случае мы работаем с формой объекта 1С 8.3, поэтому нам необходимо использовать ВызовКлиентскогоМетода для вызова команды внешней обработки.
ПоказыватьОповещение — имеет одно из двух значений: Истина/Ложь.
Модификатор — дополнительный модификатор команды.
После добавления процедур в модуль объекта обработку уже можно добавить в список обработок, но она еще ничего не умеет делать, поэтому надо создать какую-нибудь процедуру с полезным действием. Создадим и откроем на экране новую форму обработки:
В открывшейся форме добавим процедуры полезного действия, цель — добавлять в табличную часть остатки по счету 10.Х:
Главная процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив), остальной код вызывается отсюда.
Готово, теперь сохраняем обработку идем в режиме 1с:предприятие в меню Администрирование — Печатные формы, отчеты и обработки — Дополнительные обработки — Добавляем в список нашу обработку
Проверяем работу, в документе "тебования-накладная" появится новое меню "Заполнить документ":
ТаблицаЗначений — это программный объект встроенного языка, позволяющий хранить произвольные данные в табличном виде. Таблицы состоят из строк и колонок. Строки располагаются вниз по вертикали, а колонки — вправо по горизонтали.
Строки и колонки имеют последовательную целочисленную нумерацию. Кроме этого, колонкам можно присваивать строковые идентификаторы, удовлетворяющие требованиям, выдвигаемым к идентификаторам языка. Пересечения строк и колонок образуют ячейки, в которых содержатся значения. Тип значения определяется типом колонки. Если тип не задан, в ячейке можно хранить значения произвольного типа.
Таблица значений является полностью динамическим объектом, т.к. Вы можете манипулировать не только строками таблицы, добавляя иили удаляя их, но и колонками.
Таблица значений используется в двух случаях:
- При работе с формами: при размещении на форме элемент управления типа ТаблицаЗначений , он автоматически связывается с одноименным объектом встроенного языка ТаблицаЗначений ;
- При работе с кодом: для хранения каких-либо многострочных списочных данных вы создаете нужное количество объектов типа ТаблицаЗначений ;
Создание таблицы значений
Как и все объекты агрегатного типа, таблица значений создается с помощью функции СоздатьОбъект() встроенного языка:
Инициализация таблицы значений
Инициализация объекта выполняется в три этапа:
- Добавление колонок
- Добавление строки
- Установка значений ячеек
Итак, прежде, чем начать работать с объектом ТаблицаЗначений , необходимо настроить колонки (задать имя и тип). Делается это с помощью метода НоваяКолонка() следующим образом:
Как Вы успели заметить, вместе с названием колонки задается и тип значений.
После того, как Вы добавили колонки, можно добавлять строки. Делается это с помощью метода НоваяСтрока():
Теперь переменная тз спозиционирована на добавленную строку и мы можем приступить к заполнению ячеек:
Как видите, имена ячеек текущей строки имеют то же название, что и колонки. Это делает использование объекта элементарным: достаточно указать через точку после имени объекта имя колонки.
Манипуляция значениями строк таблицы
Для получения значений, содержащихся в строках, необходимо перво-наперво спозиционировать объект на интересующей Вас строке. Для этого используются такие методы как: ПолучитьСтрокуПоНомеру() и ПолучитьСтроку():
Перебор строк таблицы значений
Для последовательного перебора (обхода) всех строк таблицы значений обычно используются методы ВыбратьСтроки() и ПолучитьСтроку() объекта:
Также можно организовать перебор с помощью оператора цикла Для, где в качестве ограничителя цикла используется количество строк таблицы, возвращаемое методом КоличествоСтрок():
Атрибуты объекта ТаблицаЗначений
НомерСтроки | атрибут содержит номер текущей строки таблицы |
атрибут содержит значение текущей ячейки таблицы |
Методы объекта ТаблицаЗначений
НоваяКолонка() | метод добавляет новую колонку в конец таблицы |
ВставитьКолонку() | метод вставляет новую колонку в указанное место в таблице |
УдалитьКолонку() | метод удаляет указанную колонку из таблицы |
КоличествоКолонок() | метод возвращает количество колонок в таблице |
НоваяСтрока() | метод добавляет новую строку в конец таблицы |
ВставитьСтроку() | метод вставляет новую строку в указанное место в таблице |
УдалитьСтроку() | метод удаляет указанную строку из таблицы |
КоличествоСтрок() | метод возвращает количество строк в таблице |
НайтиЗначение() | метод выполняет поиск значения в ячейках таблицы |
ВыбратьСтроки() | метод формирует последовательную выборку строк таблицы значений |
ПолучитьСтроку() | метод получает следующую строку из ранее сформированной выборки |
ПолучитьСтрокуПоНомеру() | метод позиционирует объект на указанной строке |
* — в таблице перечислены не все методы таблицы значений. |
Хочется отметить, что объекты типа ТаблицаЗначений не хранятся в информационной базе.