1с получить идентификатор строки табличной части
Число
Индекс указанной строки таблицы значений.
Описание
Метод Индекс() возвращает индекс указанной строки в коллекции строк таблицы значений. Если строка не найдена, возвращается -1.
Доступность
Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Пример использования
Пример кода с использованием метода Индекс() :
Табличные части существуют у многих объектов в 1С:
- Справочники
- Документы
- Отчеты и обработки
- Планы счетов
- Планы видов характеристик
- Планы видов расчета
- Бизнес-процессы и задачи
Табличные части позволяют хранить неограниченное количество структурированной информации, принадлежащей одному объекту.
Рассмотрим некоторые приемы работы с табличными частями.
Как обойти табличную часть
Для обхода табличной части можно использовать цикл Для каждого
Для каждого Строка из ТабличнаяЧасть Цикл
Сообщить ( Строка . РеквизитТабличнойЧасти ) ;
На каждой итерации в переменную Строка передается очередная строка табличной части. Значения реквизитов строки можно получить выражением Строка.ИмяРеквизита.
Как получить и обойти выделенные строки табличной части
Для вывода информации из табличной части объекта служит элемент формы Табличное поле. Для включения возможности выделения нескольких строк на табличном поле нужно установить значение Множественный у его свойства Режим выделения.
Для получения перечня выделенных строк используется следующий код:
Для того чтобы обойти выделенные строки используется цикл Для каждого:
ВыделенныеСтроки = ЭлементыФормы . ИмяТабличногоПоля . ВыделенныеСтроки ;
Для каждого Строка из ВыделенныеСтроки Цикл
Как программно выделить строки табличной части (табличного поля) и снять выделение
Чтобы программно снять выделение строк табличного поля:
Чтобы программно выделить все строки табличного поля:
Как очистить табличную часть
Как получить текущую строку табличной части
Текущая строка — это срока, в которой у пользователя в данный момент находится курсор. Чтобы ее получить, нужно обратиться к элементу управления на форме, который связан с табличной частью.
Для обычных форм код будет выглядеть так:
Для управляемых форм:
Как добавить новую строку в табличную часть
Добавление новой строки в конец табличной части:
Добавление новой строки в любое место табличной части (последующие строки будут сдвинуты):
НоваяСтрока = ТабличнаяЧасть . Вставить ( Индекс )
//Индекс – номер добавляемой строки. Нумерация строк начинается с нуля.
НоваяСтрока . Реквизит 1 = "Значение" ;
Как программно заполнить реквизиты строки табличной части
Если нужно программно заполнить реквизиты строки табличной части, которую добавляет пользователь, необходимо использовать обработчик события табличной части ПриНачалеРедактирования.
Создаваемая обработчиком процедура имеет три параметра:
- Элемент — содержит элемент управления ТабличноеПоле.
- НоваяСтрока — булево. Содержит значение Истина, если добавляется новая строка табличной части, и Ложь, если пользователь начал редактировать уже существующую строку.
- Копирование — булево. Содержит значение Истина, если пользователь копирует строку, и Ложь в остальных случаях.
Рассмотрим пример. Допустим, нам нужно заполнить реквизит табличной части СчетУчета, в случае, когда добавляется новая строка. При редактировании существующей строки изменять счет учета не нужно.
Процедура ТабличнаяЧастьПриНачалеРедактирования ( Элемент , НоваяСтрока , Копирование )
//Если пользователь редактирует существующую строку, то ничего не делаем
Если НЕ НоваяСтрока Тогда
Возврат ;
КонецЕсли ;
//Если же строка новая, устанавливаем счет учета
ТекСтрока = Элемент . ТекущиеДанные ; //Получили текущую строку табличной части
ТекСтрока . СчетУчета = ПланыСчетов . Хозрасчетый . НужныйСчетУчета ;
КонецПроцедуры
Работа с табличной частью объектов в 1С : 7 комментариев
Приветствую!
Только начал изучать 1С.
Кое что уже знаю, но мало и опыта практически ноль.
Создал свою конфигурацию, пока только для тестов.
В данной конфигурации есть документ, назовем его «Заявка».
В данной заявке, есть табличная часть, в которой есть реквизит «Стоимость».
Получается, что таких документов много и мне нужно сложить все реквизиты «Стоимость» из всех документов «Заявка».
Вопрос.
Как мне это сделать?
Предполагаю, что нужно использовать функцию с экспортом, в которой будет цикл «Для Каждого ……»
Но как это оформить, пока не могу понять…
Сделать это можно по-разному. Цикл Для каждого, на мой взгляд, не очень подходящий вариант, т.к. будет работать слишком долго. Да и надо еще где-то список документов брать.
Спасибо!
Буду пробовать.
А может это подойдет?
Табличная часть (Tabular section)
Итог (Total)
Синтаксис:
Тип: Число; Строка.
Индекс либо имя колонки, по которой подсчитывается итог.
Возвращаемое значение:
Тип: Число; Неопределено.
Суммирует значения всех строк в указанной колонке.
Если в колонке установлен тип и он единственный, то при суммировании будет предприниматься попытка преобразования значения к типу Число.
Если колонке не присвоены типы, то в процессе суммирования будут принимать участие только значения, имеющие тип Число, значения других типов будут игнорироваться.
Если в колонке несколько типов и среди них есть тип Число, то в процессе суммирования будут принимать участие только значения, имеющие тип Число, значения других типов будут игнорироваться.
Если в колонке несколько типов и среди них нет типа Число, то результатом будет значение Неопределено.
Сервер, толстый клиент, внешнее соединение.
Пример:
Это подошло бы, если бы нужно было суммировать колонку в одном документе. А Юрию нужно суммировать колонку Стоимость всех документов.
Добрый день!
Достаточно ли будет обратиться в модуле формы к текущей строке табличной части или в модуле менеджера тоже нужно будет что-то прописать?
Не совсем понял, о чем конкретно вопрос.
Если о том, как получать и работать с текущей строкой табличной части, то в модуле менеджера ничего писать не нужно.
В данном разделе приведен список индексов таблиц базы данных, которые создаются системой 1С:Предприятие 8. Индексы таблиц создаются неявным образом при создании объектов конфигурации, а также при тех или иных настройках объектов конфигурации. Для тех случаев, когда создание индексов зависит от настроек объектов конфигурации приведены условия создания индексов.
В приведенных ниже таблицах имена индексных полей приведены так, как они описаны в разделе документации "Таблицы запросов".
Для измерений, реквизитов и т.д. применяются условные имена Измерение1, Реквизит1 и т.д.
Для общих реквизитов, являющихся разделителями в режиме "независимо», будем использовать имена ОРНР (ОРНР1, ОРНР2, и т.д.).
Для общих реквизитов, являющихся разделителями в режиме "независимо и совместно», будем использовать имена ОРСР.
Если режим разделения не имеет значения, то для общих реквизитов, являющихся разделителями, будем использовать имена ОРР.
Если в конфигурации определены разделители, то в индексы может входит поле, которое содержит значение хэш-функции набора значений разделителей. Такое поле будем обозначать именем ОРРХ.
Те индексные поля, которые не являются обязательными приведены в квадратных скобках, а если в индексе присутствует набор однотипных полей, это описывается многоточием, например: Реквизит + Измерение1 + [Измерение2 +. ].
Данным материалом следует руководствоваться при написании текстов запросов с целью оптимизации времени их исполнения.
Справочник
Основные индексы
[ОРНР1 + . +] Ссылка (Кластерный)
Всегда.
В индекс входят поля независимых разделителей, которые разделяют этот справочник.
[ОРРХ | ОРНР1 +] Код + Ссылка
Свойство "Длина кода" не равно 0.
Если справочник разделяется одним независимым разделителем, тип которого не Строка, то индекс содержит поле этого разделителя.
Если тип разделителя – Строка, или разделитель независимый и совместный, или разделителей больше одного, то индекс содержит поле значения хэш-функции значений разделителей.
Это правило справедливо для всех индексов, в составе которых указано [ОРРХ | ОРНР1 +].
Свойство "Длина наименования" не равно 0.
Для реквизита "Реквизит" свойство "Индексировать" установлено в значение "Индексировать".
[ ОРРХ | ОРНР1 +] Реквизит + Код + Ссылка
Для реквизита "Реквизит" свойство "Индексировать" установлено в значение "Индексировать с доп. упорядочиванием" и при этом свойство "Длина кода" не равно 0, а свойство "Основное представление" равно "В виде кода".
[ ОРРХ | ОРНР1 +] Реквизит + Наименование + Ссылка
Для реквизита "Реквизит" свойство "Индексировать" установлено в значение "Индексировать с доп. упорядочиванием" и при этом свойство "Длина наименования" не равно 0, а свойство "основное представление" равно "В виде наименования".
Справочник включен в критерий отбора через реквизит "Реквизит".
Индекс по идентификатору предопределенного объекта метаданных.
Дополнительные индексы для подчиненного справочника (вне зависимости от иерархичности справочника)
Свойство "Длина кода" равно 0.
[ ОРРХ | ОРНР1 +] Владелец + Код + Ссылка
Свойство "Длина кода" не равно 0.
[ ОРРХ | ОРНР1 +] Владелец + Наименование + Ссылка
Свойство "Длина наименования" не равно 0.
[ ОРРХ | ОРНР1 +] Владелец + Реквизит + Ссылка
Для реквизита "Реквизит" свойство "Индексировать" установлено в значение "Индексировать".
[ ОРРХ | ОРНР1 +] Владелец + Реквизит + Код + Ссылка
Для реквизита "Реквизит" свойство "Индексировать" установлено в значение "Индексировать с доп. упорядочиванием" и при этом свойство "Длина кода" не равно 0, а свойство "Основное представление" равно "В виде кода".
[ ОРРХ | ОРНР1 +] Владелец + Реквизит + Наименование + Ссылка
Для реквизита "Реквизит" свойство "Индексировать" установлено в значение "Индексировать с доп. упорядочиванием" и при этом свойство "Длина наименования" не равно 0, а свойство "основное представление" равно "В виде наименования".
Дополнительные индексы для иерархического неподчиненного справочника
Если для справочника установлено свойство "Размещать группы сверху", то в индексах, наряду с полем Родитель, участвует поле ЭтоГруппа. Состав индексов соответствует приведенной ниже таблице.
[ ОРРХ | ОРНР1 +] Родитель + ЭтоГруппа + Ссылка
Свойство "Длина кода" равно 0 и свойство "Длина наименования" равно 0.
[ ОРРХ | ОРНР1 +] Родитель + ЭтоГруппа + Код + Ссылка
Свойство "Длина кода" не равно 0.
[ ОРРХ | ОРНР1 +] Родитель + ЭтоГруппа + Наименование + Ссылка
Свойство "Длина наименования" не равно 0.
[ ОРРХ | ОРНР1 +] Родитель + ЭтоГруппа + Реквизит + Ссылка
Для реквизита "Реквизит" свойство "Индексировать" установлено в значение "Индексировать".
[ ОРРХ | ОРНР1 +] Родитель + ЭтоГруппа + Реквизит + Код + Ссылка
Для реквизита "Реквизит" свойство "Индексировать" установлено в значение "Индексировать с доп. упорядочиванием" и при этом свойство "Длина кода" не равно 0, а свойство "Основное представление" равно "В виде кода".
[ ОРРХ | ОРНР1 +] Родитель + ЭтоГруппа + Реквизит + Наименование + Ссылка
Для реквизита "Реквизит" свойство "Индексировать" установлено в значение "Индексировать с доп. упорядочиванием" и при этом свойство "Длина наименования" не равно 0, а свойство "основное представление" равно "В виде наименования".
Для справочников без размещения групп сверху состав индексов соответствует приведенной выше таблице, но в индексы при этом не включено поле ЭтоГруппа.
Дополнительные индексы для иерархического подчиненного справочника
Если для справочника установлено свойство "Размещать группы сверху", то в индексах, наряду с полем Родитель, участвует поле ЭтоГруппа. Состав индексов соответствует приведенной ниже таблице.
[ ОРРХ | ОРНР1 +] Владелец + Родитель + ЭтоГруппа + Ссылка
Свойство "Длина кода" равно 0 и свойство "Длина наименования" равно 0.
[ ОРРХ | ОРНР1 +] Владелец + Родитель + ЭтоГруппа + Код + Ссылка
Свойство "Длина кода" не равно 0.
[ ОРРХ | ОРНР1 +] Владелец + Родитель + ЭтоГруппа + Наименование + Ссылка
Свойство "Длина наименования" не равно 0.
[ ОРРХ | ОРНР1 +] Владелец + Родитель + ЭтоГруппа + Реквизит + Ссылка
Для реквизита "Реквизит" свойство "Индексировать" установлено в значение "Индексировать".
[ ОРРХ | ОРНР1 +] Владелец + Родитель + ЭтоГруппа + Реквизит + Код + Ссылка
Для реквизита "Реквизит" свойство "Индексировать" установлено в значение "Индексировать с доп. упорядочиванием" и при этом свойство "Длина кода" не равно 0, а свойство "Основное представление" равно "В виде кода".
[ ОРРХ | ОРНР1 +] Владелец + Родитель + ЭтоГруппа + Реквизит + Наименование + Ссылка
Для реквизита "Реквизит" свойство "Индексировать" установлено в значение "Индексировать с доп. упорядочиванием" и при этом свойство "Длина наименования" не равно 0, а свойство "основное представление" равно "В виде наименования".
Для справочников без размещения групп сверху состав индексов соответствует приведенной выше таблице, но в индексы при этом не включено поле ЭтоГруппа.
Табличное поле предоставляет свойства ТекущиеДанные и ТекущаяСтрока . Отличие между этими свойствами состоит в том, что свойство ТекущиеДанные содержит значения считанных данных текущей строки табличного поля, а свойство ТекущаяСтрока содержит значение, идентифицирующее строку.
Следует отметить, что свойство ТекущиеДанные содержит коллекцию значений текущей строки, соответствующую коллекции колонок отображаемого динамического списка, при этом если нужного поля нет в текущих данных, то его можно добавить в коллекцию полей списка используя метод Добавить() коллекции колонок списка.
Свойство ТекущиеДанные предназначено для получения значений колонок текущей строки, а свойство ТекущаяСтрока для получения и установки текущей строки табличного поля.
Следует понимать, что для объектных данных (Справочник, Документ и т.д.) в качестве значения свойства ТекущаяСтрока используется ссылка на объект базы данных. Соответственно при обращении к свойствам этого значения будет выполняться считывание объекта базы данных.
Типичной ошибкой является обращение к данным строки с использованием свойства ТекущаяСтрока . В этом случае будет выполняться считывание данных объекта из базы данных, что может существенно снизить производительность работы табличного поля. Например, приведенный ниже фрагмент текста программы является неэффективным:
Рекомендуется для обращения к данным объекта использовать свойство ТекущиеДанные . Правильный фрагмент приведен ниже:
Если есть идентификатор текущей строки (т.е. свойство ТекущаяСтрока ), можно получить ТекущиеДанные . И наоборот:
Выполняет поиск элемента списка значений по идентификатору.
Синтаксис
Метод НайтиПоИдентификатору() имеет следующий синтаксис:
А также альтернативный англоязычный синтаксис:
Параметры
Описание параметров метода НайтиПоИдентификатору() :
Имя параметра | Тип | Описание |
---|---|---|
Идентификатор | Число | Идентификатор элемента списка значений. |
Жирным шрифтом выделены обязательные параметры |
Возвращаемое значение
Описание
Метод НайтиПоИдентификатору() выполняет поиск элемента списка значений по идентификатору. Если элемент с указанным идентификатором в списке отсутствует, будет возвращено значение Неопределено .
Доступность
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Пример использования
Пример кода с использованием метода НайтиПоИдентификатору() :
В табличных частях объектов 8.2 имеется возможность создавать реквизиты типа ХранилищеЗначения но сохранеие этих реквизитов в тонком клиенте отрабатывается некорректно, разве что каждый раз после присваивания вызывать метод записи объекта Записать () , что не очень то удобно использовать каждый раз при изменении отдельной строки. Для корректной работы с реквизитами такого типа предлагаю сохранять значения в соответствия, которое в свой черед помещается в реквизит формы типа ХранилищеЗначения. Ключом соответствия является идентификатор строки табличной части
УдалитьДанныеИзСоответствия ( ДанныеСтроки . НомерСтроки );
КонецПроцедуры
Индекс = – 1 ;
Для Каждого Строка Из Объект . ПрикрепленныеФайлы Цикл
Индекс = Макс ( Индекс , Строка . ПолучитьИдентификатор ());
КонецЦикла;
КонецПроцедуры
Для Каждого Строка Из Объект . ПрикрепленныеФайлы Цикл
ИндексТекущейСтроки = Строка . ПолучитьИдентификатор ();
Если Не Соответствие [ ИндексТекущейСтроки ] = Неопределено Тогда
// Записать файл
ТекущийОбъект . ПрикрепленныеФайлы [ Строка . НомерСтроки – 1 ]. Файл = Соответствие [ ИндексТекущейСтроки ];
// Удаление соответствия
Соответствие . Удалить ( ИндексТекущейСтроки );
КонецЕсли;
КонецЦикла;
Хранилище = Новый ХранилищеЗначения ( Соответствие );
КонецПроцедуры
Соответствие = Хранилище . Получить ();
Соответствие . Вставить ( Индекс , Новый ХранилищеЗначения ( Файл ));
Хранилище = Новый ХранилищеЗначения ( Соответствие );
ЗначениеВРеквизитФормы ( СправочникОбъект , "Объект" );
КонецПроцедуры
&НаСервере
Процедура УдалитьДанныеИзСоответствия ( ТекущаяСтрока );
ИндексТекущейСтроки = Объект . ПрикрепленныеФайлы [ ТекущаяСтрока – 1 ]. ПолучитьИдентификатор ();
Соответствие = Хранилище . Получить ();
Соответствие . Удалить ( ИндексТекущейСтроки );
Хранилище = Новый ХранилищеЗначения ( Соответствие );
КонецПроцедуры .
Табличное поле предоставляет свойства ТекущиеДанные и ТекущаяСтрока . Отличие между этими свойствами состоит в том, что свойство ТекущиеДанные содержит значения считанных данных текущей строки табличного поля, а свойство ТекущаяСтрока содержит значение, идентифицирующее строку.
Следует отметить, что свойство ТекущиеДанные содержит коллекцию значений текущей строки, соответствующую коллекции колонок отображаемого динамического списка, при этом если нужного поля нет в текущих данных, то его можно добавить в коллекцию полей списка используя метод Добавить() коллекции колонок списка.
Свойство ТекущиеДанные предназначено для получения значений колонок текущей строки, а свойство ТекущаяСтрока для получения и установки текущей строки табличного поля.
Следует понимать, что для объектных данных (Справочник, Документ и т.д.) в качестве значения свойства ТекущаяСтрока используется ссылка на объект базы данных. Соответственно при обращении к свойствам этого значения будет выполняться считывание объекта базы данных.
Типичной ошибкой является обращение к данным строки с использованием свойства ТекущаяСтрока . В этом случае будет выполняться считывание данных объекта из базы данных, что может существенно снизить производительность работы табличного поля. Например, приведенный ниже фрагмент текста программы является неэффективным:
Рекомендуется для обращения к данным объекта использовать свойство ТекущиеДанные . Правильный фрагмент приведен ниже:
Если есть идентификатор текущей строки (т.е. свойство ТекущаяСтрока ), можно получить ТекущиеДанные . И наоборот:
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Дерево значений представляет из себя некую структуру с иерархией. Каждая строка имеет свойства «Родитель» и «Строки». У каждой строки может быть сколько угодно подчиненных строк. При этом такие операции как поиск, сортировка, подсчет итогов можно проводить с учетом уровня иерархии и подчиненных строк.
Программное создание дерева значений
Как уже упоминалось выше, каждая строка имеет свойство Строки , которое содержит коллекцию дочерних строк. И сам объект ДеревоЗначений имеет свойство Строки , которое содержит коллекцию строк верхнего уровня.
- Добавляет колонку в конец коллекции колонок дерева значений.
- Возвращаемое значение: КолонкаДереваЗначений .
Заполнить табличное поле на форме
Визуальное представление дерева значений на форме обеспечивает элемент Таблица .
Пример программного заполнения дерева значений для управляемых форм:
Результат выполнения запроса очень легко преобразовать в дерево значений, для этого нужно воспользоваться методом Выгрузить() и указать параметр ТипОбхода отличным от того, что стоит по умолчанию, т.е. ПоГруппировкам или ПоГруппировкамСИерархией .
Свернуть и развернуть строки дерева значений
Свернуть и развернуть дочерние строки элемента дерева значений можно с помощью методов Свернуть() и Развернуть() .
- Сворачивает узел в указанной строке дерева.
- ИдектификаторСтроки — идентификатор строки таблицы.
- Разворачивает узел в указанной строке дерева.
- ИдектификаторСтроки — идентификатор строки таблицы.
- СПодчиненными — определяет необходимость раскрытия подчиненных узлов.
- Получает коллекцию элементов дерева верхнего уровня.
- Возвращаемое значение: ДанныеФормыКоллекцияЭлементовДерева .
- Получает коллекцию дочерних элементов.
- Возвращаемое значение: ДанныеФормыКоллекцияЭлементовДерева .
Для представления в форме объектов конфигурации (справочники, документы и т.п.) существуют специальные типы данных:
- ДанныеФормыСтруктура — содержит набор свойств произвольного типа. Свойствами могут быть другие структуры, коллекции или структуры с коллекциями. Таким типом представляется, например, в форме СправочникОбъект .
- ДанныеФормыКоллекция — это список типизированных значений, похожий на массив. Доступ к элементу коллекции осуществляется по индексу или по идентификатору. Доступ по идентификатору может отсутствовать в некоторых случаях. Это обусловлено типом прикладного объекта, который представлен этой коллекцией. Идентификатором может быть любое целое число. Таким типом представляется, например, в форме табличная часть.
- ДанныеФормыСтруктураСКоллекцией — это объект, который представлен в виде структуры и коллекции одновременно. С ним можно обращаться как с любой из этих сущностей. Таким типом представляется, например, в форме набор записей.
- ДанныеФормыДерево — объект предназначен для хранения иерархических данных.
Прикладной объект представлен либо одним, либо несколькими элементами данных формы. Например, документ, содержащий табличную часть, будет представлен объектом типа ДанныеФормыСтруктура (собственно документ), которому подчинен объект типа ДанныеФормыКоллекция (табличная часть документа).
Удалить строку и очистить дерево значений
Поиск в дереве значений
Среди наиболее часто используемых методов стоит отметить метод Найти() коллекции строк дерева значений.
- Значение (обязательный, тип Произвольный ). Искомое значение.
- Колонки (необязательный, тип Строка ). Список имен колонок, в которых будет осуществляться поиск, разделенных запятыми. Если параметр не указан, поиск осуществляется по всем колонкам дерева. Значение по умолчанию — Пустая строка.
- ВключатьПодчиненные (необязательный, тип Булево ). Определяет, будут ли участвовать в поиске строки подчиненных коллекций (если таковые имеются). Если Истина — строки подчиненных коллекций участвуют в поиске. Значение по умолчанию — Ложь .
Метод осуществляет поиск значения в дереве в указанных колонках коллекции строк дерева значений. Возвращает строку (тип СтрокаДереваЗначений ), которая содержит искомое значение. Если значение не найдено, то возвращается значение Неопределено . Предназначен для поиска уникальных значений.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Любая таблица значений состоит из колонок, каждая из которых имеет свой тип и уникальное название, а также из строк. Если таблица значений размещена на управляемой форме в виде элемента Таблица, то колонки создаются изначально на этапе разработки, а строки пользователь может создать самостоятельно, нажав на кнопку «Добавить» в командной панели этой таблицы.
Также пользователь может удалять строки или перемещать. Но, гораздо интереснее программная работа со строками таблицы значений.
Программное добавление строк таблицы значений в 1С
В платформе 1С 8.2 — 8.3 разработчик имеет возможность добавлять строки таблицы значений непосредственно с помощью языка разработки, работая в конфигураторе 1С.
Для того чтобы создать новую строку таблицы значений, используется метод Добавить, данный метод не имеет параметров и является функцией.
Новая строка таблицы значений создается следующим образом:
НоваяСтрока = ФИО.Добавить();
Как видите, с помощью метода Добавить мы создали переменную НоваяСтрока, тип значения которой Строка таблицы значений. Но, просто создать строку мало, нам еще необходимо записать в нее определенные данные. Как получить доступ к колонкам данной строки?
Осуществить это можно двумя способами:
НоваяСтрока.Фамилия = «Иванов»;
НоваяСтрока[1] = «Иван»;
В первом способе мы получаем доступ к колонке как к свойству через точку, во втором — используя оператор квадратные скобки и указывая в них номер индекса колонки. Я предпочитаю первый способ, так как он делает код гораздо лучше читаемым и наглядным.
Допустим, у нас есть некоторая таблица значений ФИО с колонками Фамилия, Имя, Отчество, ФИО и ДатаРождения, то добавить новую строку этой таблицы и заполнить колонки этой строки можно следующим образом.
НоваяСтрока = ФИО . Добавить ();
НоваяСтрока . Фамилия = «Иванов» ;
НоваяСтрока [ 1 ] = «Иван» ;
НоваяСтрока . Отчество = «Петрович» ;
НоваяСтрока . ДатаРождения = ‘19800209’ ;
НоваяСтрока . ФИО = НоваяСтрока . Фамилия + » » +
Лев ( НоваяСтрока . Имя , 1 ) + «.» +
Лев ( НоваяСтрока . Отчество , 1 ) + «.» ;
С помощью метода Добавить мы создаем строку, которая вставляется в конец таблицы значений. Для того чтобы поместить строку в нужное место таблицы значений, необходимо использовать метод Вставить. Параметром данного метода является индекс, на который вставляется данная строка.
Добавим с помощью этого метода еще одну строку в таблицу ФИО. И поставим ее на первое место.
НоваяСтрока = ФИО . Вставить ( 0 );
НоваяСтрока . Фамилия = «Петров» ;
НоваяСтрока . Имя = «Игорь» ;
НоваяСтрока . Отчество = «Андреевич» ;
НоваяСтрока . ФИО = НоваяСтрока . Фамилия + » » + Лев ( НоваяСтрока . Имя , 1 ) + «.» + Лев ( НоваяСтрока . Отчество , 1 ) + «.» ;
НоваяСтрока . ДатаРождения = ‘19850909’ ;
Программный обход строк таблицы значений в 1С
Узнаем как обходить сроки таблицы. Это можно осуществлять с помощью операторов цикла Для каждого…Цикл и Для…Цикл.
Оператор цикла Для каждого…Цикл.
Для Каждого Стр из ФИО цикл
Сообщить ( Стр . ФИО + «, дата рождения » +
Формат ( Стр . ДатаРождения , «ДЛФ = ДД» ));
КонецЦикла;
С помощью этого оператора мы обходим все строки таблицы значений. Переменная Стр принимает значения каждой строки таблицы в порядке обхода. Тип данной переменной — Строка таблицы значений, поэтому мы можем спокойно обращаться к колонкам данной строки, используя точку или квадратные скобки.
Оператор цикла Для…Цикл.
Для н = 0 по ФИО . Количество () — 1 цикл
Сообщить ( ФИО [ н ]. ФИО + «, дата рождения » +
Формат ( ФИО [ н ]. ДатаРождения , «ДЛФ = ДД» ));
КонецЦикла;
В этом цикле нам необходимо получить индексы всех строк, для этого мы осуществляем обход, начиная с нуля и заканчивая значением, которое возвращает метод Количество за минусом единицы.
Когда мы используем квадратные скобки применительно к таблице значений (например, ФИО[н]), то результатом данной операции является строка таблицы с соответствующим индексом.
Индекс строки таблицы значений
Каждая строка имеет свой уникальный индекс. Все индексы идут по порядку и начинаются с 0. Для того, чтобы узнать индекс нужно строки необходимо применить метод Индекс таблицы значений, где в качестве параметра указать нужную строк.
Для Каждого Стр из ФИО цикл
Сообщить ( Стр . ФИО + «, дата рождения » +
Формат ( Стр . ДатаРождения , «ДЛФ = ДД» ));
Инд = ФИО . Индекс ( Стр )
КонецЦикла;
В этом коде в переменную Инд будет записываться индекс строки при каждой итерации цикла.
Программное удаление строк таблицы значений
Для программного удаление определенной строки таблицы значений нужно использовать метод Удалить этой таблицы. В качестве параметра указывается или индекс нужной строки или сама строка.
ФИО . Удалить ( 0 )
У новичков основные сложности возникают, когда нужно удалить несколько строк из таблицы значений. Если делать обход таблицы значений циклом, то данное удаление пройдет не совсем корректно. Я в этом случае поступаю так: сохраняю нужные строки в массиве, а потом обхожу этот массив циклом и уже в нем их все удаляю. Получается примерно так:
МассивДляУдаления = Новый Массив ;
Для Каждого Стр из ФИО цикл
Если тогда //какое-то условие
МассивДляУдаления . Добавить ( Стр );
КонецЕсли
КонецЦикла;
Для Каждого СтрМассива из МассивДляУдаления Цикл
ФИО . Удалить ( стрМассива )
КонецЦикла
Более подробно о работе с таблицами значений и другими интересными объектами языка программирования в 1С читайте в моей книге «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:
Читайте также: