1с проверка наличия колонки

Таблица значений в 1С 8.3

Таблица значений — это универсальная коллекция 1С, которая предназначена для хранения данных в табличном виде. Таблица значений хранит ссылки на объекты СтрокаТаблицыЗначений. Помимо строк у таблицы есть колонки. Таблицу значений нельзя создать на клиенте и нельзя передавать между клиентом и сервером.

Создание таблицы значений

Для создания таблицы значений используются конструктор:

В данной таблице не будет ни одной колонки и добавление в нее строк бессмысленно. Для добавления колонок нужно использовать свойство Колонки таблицы значений:

Теперь в таблицу можно добавить несколько строк. Добавление строк выполняется методом Добавить. Данный метод вернет строку таблицу значений. К именам колонок таблицы значений можно обращаться как к свойствам строки:

Типы колонок таблицы значений

В таблицу было добавлено 2 колонки. Тип не был определен и поэтому в эту колонку можно поместить любой тип данных, тип будет определяться в зависимости от типа данных значения в колонке. В примере выше тип колонки Товар — строка, а колонки Цена — число. Если добавить еще одну строку с другим типом, то тип колонки станет составным:

Тип можно указать при добавлении новой колонки, тогда в нее можно будет помещать значения только данного типа, для всех остальных значений будет выполняться преобразование типа:

Работа с колонками таблицы значений

Для проверки наличия необходимой колонки в таблице можно выполнить поиск в коллекции колонок. Если такой колонки нет, то метод Найти вернет Неопределено:

Читайте также:  Как сделать колонки для улицы

Колонку можно переименовать. При этом, значения в данной колонке сохранятся. Изменить тип колонки нельзя.

Колонки можно удалять, соответственно будут удалены и все значения в данной колонке:

Изменение значений в существующих строках

К строкам таблицы значений можно обращаться через оператор индексации [ ]. Индексация строк начинается с нуля, чтобы изменить значение в первой строке нужно использовать индекс 0:

Перебор строк таблицы значений

Перебрать все строки таблицы значений можно с помощью циклов Для Каждого и Для. При необходимости на каждой итерации цикла можно изменить значения колонок строки.

Удаление строк

Удалить строку из таблицы можно методом Удалить. Параметром можно передать индекс строки или саму строку. Для удаления всех строк таблицы можно воспользоваться методом Очистить.

Иногда нужно удалить несколько строк из таблицы по условию. Например, все строки, где цена меньше 100. На первый взгляд это можно сделать так:

Однако после удаления линейка осталась в таблице, хотя ее цена равна 80. Почему так произошло? При удалении строки, таблица как бы сжимается. То есть на первой итерации цикла мы получили первую строку с диваном, его цена больше 100, поэтому строка осталась. Получаем вторую строку с ручкой за 50. Так как цена меньше 100, строка была удалена. И после удаления все строки сдвинулись, третья строка переместилась на вторую позицию, четвертая на третью и т.д. На следующей итерации мы получаем третью строку, а там уже кресло за 2000. Линейка была пропущена, цикл даже не проверял ее цену.

Поэтому правильно удалять строки с конца таблицы. При удалении строки цикл может несколько раз пройти по одной строке, но точно не пропустит ни одну строку:

Источник

Получить список колонок табличной части на упр форме

задача такая, есть табЧать объекта с огромным количеством колонок и строка в упр форме.
и возникла необходимость заполнить колонки для разных строк одинаковыми данными.
т.е. выделяем энное кол-во строк или ячеек строк(ячейки не получилось, выделяются все равно строки), запоняем для одной нажимаем кнопочку и запоняется для всех именно указанная ячейка.
///////////\
решение я вижу таким:
открыть другую форму с одной строкой подобной сроке табчастьобъекта, заполнить её и по ее образу и подобию заполнить выделенные строки.
////////////
вопрос:
как мне это сделать не переписывая ручками весь набор колонок Объект.табЧасть?
////////////
возможно есть другие пути реализации данной задачи?кто как думает?

Добавлено через 17 минут
как получить имена всех колонок табличной части?

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Копирование данных из ячейки одной Табличной Части на форме в такую же ячейку другой Табличной части на этой же форме
Всех с Новым годом и грядущим Рождеством пособите начинающему: затык такой — НА форме есть две.

Автозаполнение табличной части документа из справочника (упр.форма)
Добрый день. Есть документ ТехнологическаяКарта, справочник Детали. В табличной части.

Значение строки табличной части получить в табличной части другого документа
Есть документ ПриходнаяНакладная (товар приходит от поставщика по его цене), с табличной частью.

Перемножение колонок итогов в табличной части
Здравствуйте. Существует ли типовое решение следующего примера? ПоднятыйВес1 =.

Источник

Помогите найти колонку табличного поля по ее имени.

Заполнил колонки ТП реквизитами документа, теперь перебираю метаданные.реквизиты этого документа и хочу заполнить эти колонки строками с данными из документа. не могу сообразить как найти нужную колонку которая бы соответствовала текущему реквизиту документа.

Процедура Документ()
Выборка= БазаИсточник.Документы.РеализацияТоваровУслуг.Выбрать(ДатаНач,ДатаКон);
МедаданОле= БазаИсточник.Метаданные.Документы.РеализацияТоваровУслуг;
ТабОбщая = Новый ТаблицаЗначений;
ТабОбщаяТЧ = Новый ТаблицаЗначений;
метадан = Метаданные.Документы.РеализацияТоваровУслуг;
// вывести реквизиты
Для Каждого РеквДок из метадан.Реквизиты Цикл
ТабОбщая.Колонки.Добавить(РеквДок.Имя, Новый ОписаниеТипов(«Строка»));
КонецЦикла;
// вывести ТЧ
Для Каждого РеквДокТЧ из метадан.ТабличныеЧасти Цикл
ТабОбщаяТЧ.Колонки.Добавить(РеквДокТЧ.Имя, Новый ОписаниеТипов(«Строка»));
КонецЦикла;

Пока Выборка.Следующий() Цикл

Для Каждого РеквДок из МедаданОле.Реквизиты Цикл

//ТУТ ЗАПУТАЛСЯ+++++++++++++++++++++++++++++++++++++++++++++++++++ ­++++++
ТекКолонка = ТабОбщая.Колонки.Найти(РеквДок);
НоваяСтрока = ТабОбщая.Добавить();
НоваяСтрока.ТекущаяКолонка = Выборка.РеквДок;
//ТУТ ЗАПУТАЛСЯ+++++++++++++++++++++++++++++++++++++++++++++++++++ ­+++++++
КонецЦикла;
КонецЦикла;

ТпДоки = ТабОбщая;
ТпДокиТЧ = ТабОбщаяТЧ;
ЭлементыФормы.ТпДоки.СоздатьКолонки();
ЭлементыФормы.ТпДокиТЧ.СоздатьКолонки();

Источник

ТаблицаЗначений и Колонки

Подскажите пожалуйста, почему если у меня на форме есть ТЗ , и я хочу получить количество колонок программно, то это не срабатывает, хотя остальные методы работы с ТЗ вроде как работают 🙂

вот эта строчка не срабатывает:
Кол = ТрудозатратыСотрудника.Колонки.Количество();

а вот эти прекрасно работают :

Для Каждого СтрокаТЗ Из ТрудозатратыСотрудника Цикл
ЧтоЭто=СтрокаТЗ.ТипРабот;
Сообщить(Строка(СтрокаТЗ.ТипРабот));
КонецЦикла;

Так сработает, если на форме табличное поле с типом значения ТаблицаЗначений

Таблица заполняется в модуле формы:

(12)
У вас на форме есть два одноимённых объекта «ТрудозатратыСотрудника»

Первый объект формы — это реквизит формы типа «ДанныеФормыКоллекция». Его назначение — хранить данные. К нему обращаются так: ЭтаФорма.ТрудозатратыСотрудника или просто ТрудозатратыСотрудника. Для этого типа нет возможности обратиться к колонкам. Возможно, это сделано потому, что это универсальный тип, который не обязательно относится к таблице (т.е. колонок может и не быть). Можно использовать функцию ДанныеФормыВЗначение, чтобы из этого объекта получить объект типа ТаблицаЗначений — у такого объекта уже есть возможность обращаться к колонкам.

Второй объект формы — это элемент формы типа «ТаблицаФормы». Его назначение — отображать данные. К нему обращаются так: Элементы.ТрудозатратыСотрудника. У него есть свойство «ПодчиненныеЭлементы», которое содержит коллекцию колонок и групп колонок для отображения на форме.

Источник

ТаблицаЗначений. Проверка дублей.

Потребовалось проверить таблицу значений на наличие дублей строк.

Поначалу, как обычно, в каждом отдельном случае писалась своя функция. Но вот это надоело, и была сделана попытка создать универсальную функцию, помещенную в общий модуль, которая по переданной ей таблице значений, наименованию или списку колонок проверяет наличие дублирующих строк.

В случае, если параметр «КонтролируемаяКолонка» не передан, проверка осуществляется по всем колонкам.

Так же имеется параметр, позволяющий исключить колонку «НомерСтроки» из проверки — подразумевается использование при создании проверяемой таблицы значений на основе табличной части.

Собственно, код ниже.

Буду рад комментариям.

// функция проверяет дубли строк таблицы значений по контролируемым колонкам
// Параметры:
// ТабЧасть — таблица значений
// КонтролируемаяКолонка — строка, списокЗначений — Наименование колонок;
// ТекстВозврата — переменная, куда будет возвращено значение
// УдалятьНомерСтроки — не учитывать колонку НомерСтроки, в случае, если не передан список колонок.
// Возвращаемые значения:
// в случае отсутствия дублей — ложь
// в случае наличия дублей — истина и в параметр «ТекстВозврата» записывается строковое значение дублей

Функция ПроверкаДублей ( ТабЧасть , КонтролируемаяКолонка = Неопределено, ТекстВозврата = «» , УдалятьНомерСтроки = Истина) Экспорт

Если ТипЗнч ( ТабЧасть ) = Тип ( «ТаблицаЗначений» ) тогда

Если ТипЗнч ( КонтролируемаяКолонка ) = Тип ( «Строка» ) тогда
СтрокаСвертки = СокрЛП ( КонтролируемаяКолонка );
ИначеЕсли ТипЗнч ( КонтролируемаяКолонка ) = Тип ( «СписокЗначений» ) тогда
СтрокаСвертки = «» ;
Для индекс = 0 по КонтролируемаяКолонка . Количество ()- 1 Цикл
Если Индекс > 0 тогда
СтрокаСвертки = СтрокаСвертки + «, » ;
КонецЕсли;
СтрокаСвертки = СтрокаСвертки + СокрЛП ( КонтролируемаяКолонка [ Индекс ]);
КонецЦикла;
Иначе
// проверяем на полные дубли
СтрокаСвертки = «» ;
ПерваяКолонка = Истина;
Для индекс = 0 по ТабЧасть . Колонки . Количество ()- 1 Цикл
Если УдалятьНомерСтроки и СокрЛП ( ТабЧасть . Колонки [ Индекс ]. Имя ) = «НомерСтроки» тогда
Продолжить;
КонецЕсли;
Если не ПерваяКолонка тогда
СтрокаСвертки = СтрокаСвертки + «, » ;
КонецЕсли;
СтрокаСвертки = СтрокаСвертки + СокрЛП ( ТабЧасть . Колонки [ Индекс ]. Имя );
ПерваяКолонка = Ложь;
КонецЦикла;
КонецЕсли;

тз = ТабЧасть . Скопировать ();
тз . Колонки . Добавить ( «_КолонкаЕдиницы» , Новый ОписаниеТипов (Новый КвалификаторыЧисла ( 1 , 0 , ДопустимыйЗнак . Неотрицательный )));
тз . ЗаполнитьЗначения ( 1 , «_КолонкаЕдиницы» );
тз . Свернуть ( СтрокаСвертки , «_КолонкаЕдиницы» );

для каждого стр из тз цикл
Если стр . _КолонкаЕдиницы > 1 Тогда
ТекстВозврата = ТекстВозврата + «Дублирование строк: » ;
ЕстьДубли = Истина;
Для ИндексКол = 0 по тз . колонки . Количество () — 1 цикл
Если тз . колонки [ ИндексКол ]. Имя = «_КолонкаЕдиницы» тогда
ТекстВозврата = ТекстВозврата + » — найдено » + стр . _КолонкаЕдиницы + » стр.» + Символы . ПС ;
Иначе
Если ИндексКол > 0 тогда
ТекстВозврата = ТекстВозврата + «; » ;
КонецЕсли;
ТекстВозврата = ТекстВозврата + Строка ( стр [ ИндексКол ]);
КонецЕсли;
Конеццикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;

Источник

Оцените статью