- Бесплатные программы русские. Программирование 1С
- Скачать программы, софт бесплатно. Программирование 1С
- Таблица значений 1С – 3 часть. Метаданные. Перебор колонок таблицы значений 1С
- Таблица значений 1С – 3 часть. Метаданные. Перебор колонок таблицы значений
- Итак, создадим тестовую таблицу значений 1С и заполним ее:
- Первый образец кода — перебор колонок таблицы значений 1С как коллекции.
- Количество колонок в таблице значений 1С
- Получение объекта- колонки по ее номеру (индексу) и перебор колонок при помощи индекса колонок
- Важно никогда не путать свойство объекта и метод объекта.
- Получение данных из таблицы значений 1С при помощи номеров колонок
- Работаем с таблицей значений программно
- Создание таблицы значений
- Колонки таблицы значений
- Свойства колонки таблицы значений
- Методы коллекции колонок таблицы значений
- Строки таблицы значений
- Добавление и удаление строк
- Перебор строк таблицы значений
- Поиск строк
- Все методы таблицы значений:
Бесплатные программы русские. Программирование 1С
Скачать программы, софт бесплатно. Программирование 1С
Таблица значений 1С – 3 часть. Метаданные. Перебор колонок таблицы значений 1С
Таблица значений 1С – 3 часть. Метаданные. Перебор колонок таблицы значений
В этой статье я расскажу как работать с таблицей значений «неизвестной» структуры, как перебирать колонки таблицы значений, как извлекать данные из колонок и строк, не используя названия колонок. (Эта статья относится к циклу статей 1С с нуля; программирование 1с с нуля; таблица значений 1с)
Две предыдущие статьи:
Для объяснения материала и для того, чтобы можно было запустить наши примеры программного кода «в живую», нам необходимая некая тестовая таблица значений 1С. Часть наших примеров будет извлекать данные из таблицы значений, поэтому мы сделаем таблицу с тремя колонками «Фамилия», «Имя», «Отчество» и внесем в нее небольшое количество данных — аж целых 3 строки 🙂
Итак, создадим тестовую таблицу значений 1С и заполним ее:
Наша тестовая таблица состоит из трех колонок: Имя, Фамилия, Отчество; и имеет три заполненных строки с фамилиями героев Гражданской войны.
Номер строки | Фамилия | Имя | Отчество |
0 | Чапаев | Василий | Иванович |
1 | Дзержинский | Феликс | Эдмундович |
2 | Котовский | Григорий | Иванович |
Первый образец кода — перебор колонок таблицы значений 1С как коллекции.
Наш цикл выведет в окно сообщений 1С все имена колонок:
Мы видим, что для перебора колонок применяется специальный цикл перебора коллекции, похожий на цикл перебора строк (в прошлой статье). МояТЗ.Колонки — это коллекция колонок таблицы значений 1С «МояТЗ». Коллекция содержит в себе объекты типа «КолонкаТаблицыЗначений» Каждый объект этого типа и является колонкой таблицы значений, и содержит свойства и методы. Обращаясь к этим свойствам и методам мы получаем нужные сведения об одной колонке или производим какие-то другие действия с ней.
Например, обращаясь к свойству «Имя» (Колонка.Имя) мы получаем имя текущей колонки.
Хочу обратить ваше внимание на заголовок цикла: «Для Каждого Колонка Из МояТЗ.Колонки Цикл» Переменная с именем «Колонка» придумана нами. Необязательно использовать такое же имя. Можно назвать эту переменную как угодно, например «МояТекущаяКолонка» Тогда пример выше будет выглядеть таким образом:
Когда исполняющая подсистема 1С встречает цикл такого вида, при каждом проходе цикла она присваивает переменной с указанным именем один элемент из нашей коллекции, в данном случае — один элемент коллекции колонок таблицы значений МояТЗ.Колонки А далее мы обращаемся к переменной, которая содержит в себе текущую колонку, и используем свойство «Имя».
Предлагаю рядом с именем колонки вывести еще и номер каждой колонки в коллекции колонок:
В окно сообщений 1С будет выведен текст:
Обратим внимание на то, что колонки в таблице значений 1С нумеруются начиная с нуля, так же, как и строки таблицы значений.
Количество колонок в таблице значений 1С
Чтобы узнать количество колонок в таблице значений, мы используем метод «Количество()» у коллекции колонок.
На экране будет выведена цифра «3». Действительно, в нашей таблице три колонки: «Фамилия», «Имя», «Отчество»
Получение объекта- колонки по ее номеру (индексу) и перебор колонок при помощи индекса колонок
Сделаем цикл перебора всех колонок таблицы значений при помощи индексов колонок (номеров). Помним, что нумерация колонок начинается с нуля. Поэтому счетчик цикла «Сч» мы должны наращивать от нуля до числа, равного количеству колонок минус один.
На экране мы получим следующее
Думаю, что этот пример был понятен. Мы обратились к методу Количество() коллекции колонок «МояТЗ.Колонки.Количество()«, получили количество колонок, и запустили цикл со счетчиком от нуля до количество колонок минус один. Внутри цикла мы получаем каждую колонку из коллекции колонок и присваиваем текущий объект-колонку в переменную ТекущаяКолонка Далее, у переменной ТекущаяКолонка мы обращаемся к свойству Имя и выводим значение этого свойства на экран: Сообщить(ТекущаяКолонка.Имя);
Важно никогда не путать свойство объекта и метод объекта.
Свойство — это некая статическая величина и обращение к нему пишется без скобок, например ТекущаяКолонка.Имя. А метод — это по сути, процедура или функция объекта, а вызовы процедур и функций всегда пишутся со скобками (даже если нет входных параметров). Например: МояТЗ.Колонки.Количество()
Если мы обратимся к методу, забыв написать скобки — интерпретатор 1С выдаст нам сообщение об ошибке и не запустит код на выполнение. Так как интерпретатор будет считать, что мы обращаемся не к методу, а к свойству — потому что нет скобок. А свойства с таким именем найти не сможет (потому что с таким именем имеется только метод) — о чем и будет сказано в сообщении об ошибке.
Вот что напишет интерпретатор, если я забуду поставит скобки в вызове метода таким неправильным способом МояТЗ.Колонки.Количество (без скобок после «Количество()»):
Поле объекта не обнаружено (Количество)
В данном случае «поле» и «свойство» следует понимать как синонимы, или неточность терминологии разработчиков 1С. Они используют оба этих слова для обозначения одного и того же понятия. Хотя в других языках программирования эти термины могут означать разные понятия.
Получение данных из таблицы значений 1С при помощи номеров колонок
Предлагаю вам, для начала, простой пример получения данных из первой строки нашей таблицы. Обратите внимание, что мы используем заранее заполненную таблицу из начала статьи. Мы точно знаем, что в таблице есть первая строка, и есть хотя бы одна колонка. Если мы применим этот пример к незаполненной таблице, то произойдет ошибка. Итак:
На экран будет выведено:
Сначала мы получили объект-строку таблицы значений, обратившись к таблице значений при помощи оператора [. ]. (если забыли, как это делается, можно посмотреть предыдущие статьи) Внутрь оператора мы передали аргумент «0». Это индекс первой строки таблицы значений. ПерваяСтрока = МояТЗ[0];
Далее, к объекту-строке мы тоже имеем право обратиться при помощи оператора [. ]. Внутрь этого операторы мы передали номер столбца таблицы значений, в данном случае тоже «0». И, таким образом, мы получили значение столбца с номером «0» для текущей строки таблицы под номером «0». Это значение мы вывели на экран и оно представляет собой строку «Чапаев».
Немного усложним наш пример:
Теперь мы вывели на экран значения из всех трех столбцов первой строки нашей таблицы значений:
Теперь я еще модифицирую этот пример, чтобы нам обойтись без переменной «ПерваяСтрока»
На экране будет тоже самое
Мы увидели в примере выше, что для обращения к значению, находящемуся в конкретной строке и конкретном столбце таблицы значений мы можем использовать последовательный вызов двух операторов [. ] в такой форме: ТаблицаЗначений[ИндексСтроки][ИндексКолонки]
Значит, мы готовы к тому, чтобы создать цикл перебора и получить данные всех строк и всех столбцов при помощи индексов строк и столбцов:
На экран будет выведено следующее:
При помощи двух циклов, один из которых вложен в другой, мы вывели на экран значения всех колонок из всех строк таблицы значений 1С. При этом мы не использовали имена колонок, а обращались к колонкам и строкам по их индексам. Для большего понимания обратите внимание на комментарии внутри примера.
Предлагаю, в заключение, немного изменить наш пример, чтобы он вместо номеров колонок выводил на экран их названия. И дополнительно сделаю более презентабельное оформление выдачи содержимого на экран.
Сейчас, на нашем экране информация стала выглядеть более представительно:
Да, чуть не забыл. При использовании подряд двух операторов [. ][. ], мы можем вместо индекса колонки передавать имя этой колонки: ТаблицаЗначений[ИндексСтроки][ИмяКолонки]
Обратите внимание на строку, отмеченную стрелочкой «
Как научиться программировать в 1С с нуля?
Как работать программистом 1С и получать до 150 000 рублей в месяц?
ЗАПИШИСЬ НА БЕСПЛАТНЫЙ
«ПРОГРАММИРОВАНИЕ в 1С ДЛЯ НОВИЧКОВ»
Курс придет на электронную почту. Стань программистом, выполняя пошаговые задания.
Для участия нужен только компьютер и интернет
Источник
Работаем с таблицей значений программно
ТаблицаЗначений — это программный объект встроенного языка, позволяющий строить произвольные наборы данных в памяти компьютера, отображать их в табличном виде, а также программно и интерактивно манипулировать ими (добавлять, редактировать, удалять и сортировать).
Таблицы состоят из строк и колонок. Строки располагаются вниз по вертикали, а колонки — вправо по горизонтали. Строки и колонки имеют индексы, по которым к ним можно обращаться напрямую (начинаются с 0). Кроме этого, к колонкам можно обращаться по идентификатору.
Пересечения строк и колонок образуют ячейки, в которых содержатся значения. Тип значения определяется типом значения колонки.
Таблица значений является полностью динамическим объектом, т.е. Вы можете манипулировать не только строками таблицы, добавляя и удаляя их, но и колонками.
Таблица значений может использоваться явно при создании в коде необходимого количества переменных типа ТаблицаЗначений , либо неявно: при добавлении элемента управления ТабличноеПоле на обычную форму, и ТаблицаФормы — на управляемую. Здесь мы рассмотрим только программную работу с таблицей значений.
Создание таблицы значений
Как и большинство объектов встроенного языка, новая таблица значений может быть создана с помощью оператора Новый :
Колонки таблицы значений
Прежде чем начать работу с таблицей значений, необходимо создать структуру колонок. Каждая колонка характеризуется следующими свойствами:
- Имя — идентификатор колонки (может содержать только алфавитные символы, цифры и знаки подчеркивания. Причем, начинаться имя колонки может только с буквы или символа подчеркивания);
- Заголовок — представление колонки в диалогах (может содержать произвольные символы);
- ТипЗначения — тип значения содержимого ячеек в этой колонке. Если тип не задан, в ячейке можно хранить значения произвольного типа;
- Ширина — ширина колонки в диалогах;
Доступ к колонкам производится через свойство Колонки объекта ТаблицаЗначений . Для добавления новой колонки используется метод Добавить():
Для того, чтобы определить наличие колонки с нужным именем используется метод Найти():
Перебор колонок выполняется следующим образом:
Для удаления колонки используется метод Удалить():
Свойства колонки таблицы значений
Имя | Тип | Описание |
---|---|---|
Имя | Строка | символьный идентификатор колонки, по которому к ней можно обращаться из кода |
Заголовок | Строка | строковое представление колонки на форме |
ТипЗначения | ОписаниеТипов | свойство органичивает пространство доступных значений, которые можно указать в данной колонке |
Ширина | Число | ширина колонки на форме (выражается в количестве символов) |
Методы коллекции колонок таблицы значений
Вставить() | Вставляет новую колонку в указанную позицию коллекции |
Добавить() | Добавляет новую колонку в конец коллекции |
Количество() | Возвращает количество колонок в коллекции |
Найти() | Ищет колонку в коллекции по имени |
Очистить() | Удаляет все колонки из коллекции |
Сдвинуть() | Сдвигает колонку влево или вправо |
Удалить() | Удаляет колонку из коллекции |
Строки таблицы значений
С колонками разобрались. Давайте теперь разберемся со строками. Строки таблицы значений можно программно добавлять и удалять, перемещать и сортировать, а также выполнять операции поиска и отбора.
Добавление и удаление строк
Для добавления новой строки используется метод Добавить() объекта ТаблицаЗначений . Метод возвращает объект СтрокаТаблицыЗначений , с которым доступны дальнейшие манипуляции:
И только теперь мы можем заполнить строку данными. Для этого обращаемся к ячейкам строки, указывая идентификаторы колонок через точку:
Обратите внимание, что каждая СтрокаТаблицыЗначений ссылается на таблицу значений с помощью метода Владелец():
Для удаления строки используется метод Удалить() объекта ТаблицаЗначений . Строку можно удалить либо передав методу непосредственно строку, либо ее индекс:
Перебор строк таблицы значений
Для перебора строк удобнее всего использовать оператор цикла Для Каждого . В редких случаях оправдано применение цикла Для :
Поиск строк
В отличие от платформы 1С:Предприятие 7.7 в 8-ке расширен функционал работы с таблицей значений. Поиск можно выполнять не только по значению в колонке (в этом случае будет возвращена первая найденная строка), но и по набору свойств (в этом случае возвращается массив строк):
Все методы таблицы значений:
Вставить() | Вставляет строку на указанное место |
ВыбратьСтроку() | Позволяет интерактивно выбрать строку в диалоговом окне |
ВыгрузитьКолонку() | Выгружает значения ячеек указанной колонки в массив значений |
Добавить() | Добавлет новую строку в таблицу значений |
ЗагрузитьКолонку() | Загружает значения в ячейки указанной колонки из массива |
ЗаполнитьЗначения() | Заполняет ячейки указанных колонок определенным значением |
Индекс() | Возвращает индекс строки таблицы значений |
Итог() | Возвращает просуммированный итог по колонке таблицы значений |
Количество() | Возвращает количество строк в таблице значений |
Найти() | Выполняет поиск строки по значению |
НайтиСтроки() | Выполняет поиск строк по указанным параметрам |
Очистить() | Очищает строки таблицы значений |
Получить() | Возвращает строку по ее индексу |
Свернуть() | Выполняет сжатие строк и колонок таблицы значений |
Сдвинуть() | Сдвигает строку вверх или вниз по таблице |
Скопировать() | Создает новую таблицу значений копированием текущей |
СкопироватьКолонки() | Создает новую пустую таблицу значений путем копирования колонок текущей таблицы |
Сортировать() | Выполняет сортировку строк таблицы значений по указанным колонкам |
Удалить() | Удаляет строку таблицы значений |
Иерархию свойств и типов значений, связанных с таблицей значений, схематически можно представить в виде дерева:
Источник