1с настройка колонок табличной части

Обновлено: 08.07.2024

В предыдущей статье мы научились создавать таблицу значений, как в программном модуле, так и на форме, интерактивно.

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

Программное создание колонок таблицы значений в 1С

У объекта Коллекция колонок таблицы значений существует два метода по созданию новых колонок. Это Добавить и Вставить.

Метод Добавить – добавляет новую колонку в конец коллекции, а метод Вставить – вставляет колонку в нужное место по соответствующему индексу.

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

Рассмотрим синтаксис этого метода

Добавить(<Имя>, <Тип>, <Заголовок>, <Ширина>)

Как видно, у данного метода всего четыре параметра.

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

Параметр Заголовок имеет тип Строка и задает заголовок колонки, который отобразиться пользователю, если она будет создана программно на форме.

Параметр Ширина имеет тип Число и задает длину колонки(количество символов).

Если мы зададим все параметры, то наше создание колонок будет выглядеть следующим образом.

Метод Вставить имеет следующий синтаксис:

Вставить(<Индекс>, <Имя>, <Тип>, <Заголовок>, <Ширина>)

Метод Вставить имеет синтаксис, как и у метода Добавить, но только появился первый параметр Индекс, он указывает тот индекс, на место которого будет вставляться новая колонка.

Доработаем предыдущий код:

В нашем случае колонка ФИО встала точно между Отчеством и Датой рождения.

Создание колонок в таблице значений на форме

Если мы создали таблицу значений на управляемой форме 1С 8.3 в виде реквизита формы, то колонки также можно создать интерактивно. Для этого нужно выделить нужный реквизит, и нажать на кнопку «Добавить колонку реквизита».

Кнопка Добавить колонку реквизита

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

Задаем свойства колонки таблицы на форме

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

Первый способ – перетащить колонку из реквизитов в элементы.

Перетаскиваем колонку из реквизитов формы в элементы

После этого, колонка появиться под таблицей, а сама таблица отобразиться на форме (таблица без колонок на форме не отображается).

Колонка в таблице на форме

Второй способ – создать новое поле «под» таблицей на форме и привязать к нему нужную колонку таблицы значений 1С.

Для того, чтобы создать новое поле, привязанное к таблице на форме 1С, нужно выделить эту таблицу, нажать на кнопку «Добавить» панели управления дерева Элементы, и в открывшемся окне выбрать тип элемента «Поле».

Добавляем новый элемент управляемой формы

После этого нужно задать имя нового поля и связать его с колонкой таблицы значений, используя свойство «ПутьКДанным».

Свойство ПутьКДанным элемента поле управляемой формы

После этого колонка сразу же появиться в таблице на форме 1С.

Колонка в таблице на форме


О работе со строками в таблицах значений читайте в статье по ссылке:
Таблице значений 1С: работа со строками


Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным


Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:

можно оплатить вручную:

Увеличьте высоту шапки, напишите наименование колонки в свойстве "Заголовок", Shift+Enter для переноса слов.

(12) sannt, многострочный режим в заголовках не айс. В методичке по разработке управляемого интерфейса 1С настоятельно рекомендует этого не делать. Лучше сделать короткий заголовок колонки, а полное название вывести в подсказку (13) kser87, Очень интересно. Нет, к сожалению, методички. И как же они объясняют свою настоятельность? (15) kser87, Понятно. Просто сами пишут рекомендации, сами же их игнорируют. Например, не писать запросы в цикле. (16) sannt, Не путайте божий дар с яичницей. Это рекомендации, а не жесткие требования. Есть моменты, когда от этого не уйти. Все пропало и Маня не заработает очередной миллион

(20) sannt, у вас отличный подход к делу:

а, это рекомендация 1С. Можно не читать, они запросы в цикле делают. Могу делать что хочу

(21) kser87, Да не. )) Я не собирался принижать достоинств разработчиков 1С. Просто не понятна Ваша антипатия на использование многострочных заголовков. Я же не призываю везде и вся это делать. Ваши же слова

многострочный режим в заголовках не айс. В методичке по разработке управляемого интерфейса 1С настоятельно рекомендует этого не делать.

Это рекомендации, а не жесткие требования. Есть моменты.

немного перефразирую. "когда ну очень нужно сделать заголовок в 2 строки".

Вот что мне помогло:
1) Всем колонкам назначить короткий заголовок без пробелов, т.к. платформа задает ширину по имени конки, если нет заголовка (например вместо НоменклатураКРезервуЦенаСоСкидкой - дать ЦенаСоСк - уменьшается в три раза)
2)задать размер всех колонок жестко и без "растягивать по горизонтали", кроме одной колонки, которая возьмет все "растягивание" на себя
3) сбросить настройки формы в пользовательском режиме

+ Заметил, что форма запоминает ширину элементов от самого большого монитора, на котором открывалась.

Мучался с этой проблемой минут 20 :) Помогло вот что - Заходим в свойства "табличного поля" и указываем в свойстве "Фиксация слева" количество колонок, которое не хотим растягивать. Надеюсь, кому то окажется полезным :) (25) спасибо помогло!
и более того: убрал фиксацию и теперь нормально отображает! :) ура-а-а, глюк победил! (26) EvgeniuXP, я в притык не вижу свойство фиксация слева. Где оно? (28) забей, там всё-равно слетает :( то ли модуль откорректируешь и сохранишь, форма снова меняется и вылазит. мучал долго, сейчас не помню уже, но плюнул.

более того, даже видимость колонок если программно меняется, последняя колонка не вылезает теперь за пределы, меняет колонку ту, у которой ширина авто - одну всё-таки лучше выставлять авто :)

при фиксации был глюк, что расположил последнюю колонку к крайней левой границе, но активировав другую строку, которая отображала больше колонок всё вылезло за границы снова.

но проблема исправилась!

Аналогично траблы с шириной колонок.
Причем если вид: поле флажка или поле картинки - вообще непонятно какую ширину выдает, и поле задания ширины прячется из свойств! И даже если заголовок сделать в 1 символ - все равно ширина поля флажка равна 5-10 Только что удалось добиться чего-то приличного, покопавшись в настройках формы в пользовательском режиме. Люди, а кто подскажет как отлаженную обработку загрузки в "Универсальном обмене данными в формате XML" запускать впредь автоматически? Делала выгрузку из ТИС 979 в БП 2.0, исправила ошибки загрузки в отладчике, создала вн.обработку, все сработало. А на следующий раз надо все повторять сначала, хотя обработка уже есть. Как ее применять в следующие разы? Ни у кого не было такой ситуации, что сначала форма работает хорошо, а после определённых манипуляций пользователя все поля в табличной части документа начинают жить своей жизнью. Где, например, в "Рознице 8.3" хранятся настройки полей табличной части поступления? Может они как-то ломаются. (39) zemskov, В настройках пользователя, если через "Все действия" - "Изменить форму. " (в Такси "Ещё" - "Изменить форму. ") можно скрыть, добавить (не всегда, но для ссылочных типов можно) элементы формы и изменить их порядок итд. Там же можно вернуть настройки по умолчанию. Ну или сделать чтоб "забылись" все настройки можно почитсить кеш. Спасибо за ответ. Вернуть настройки по умолчанию не помогает. А вот насчёт кэша попробую. Где это только? (41) zemskov, удалить базу из списка баз и добавить снова уберите галочки в полях отбора и будет регулировка нормальная Бух 8.3. Такси. Просмотр движения регистров документа. Под одним пользователем колонки не помещались по ширине на экран и ни в какую не менялась ширина колонок и еще не было видно разделителей колонок. Еще. Изменить форму. не помогло. Баг 8.3, короче. Помогло следующее: Администрирование -> Настройки пользователей и прав -> Очистка настроек. Выбираем все или только нужные. Я выбрал все. Перезашел под этим пользователем, зашел в просмотр движений.
А там все ОК :) Все колоночки на экране. (49) делается проще. Действия - Изменить форму - все действия - "Установить стандартные настройки" Также помогает если в свойствах списка изменить "Отображение списка" с Иерархический список на просто Список.


Здравствуйте! Кто-нибудь знает как получить текущую длину/ширину элемента управления?
Отладчик показывает только заданные значения в конфигураторе.
проблема решается следующим образом: устанавливаете свойство растягивать по горизонтали в значение нет, задаете ширину колонки, применяете изменения, в режиме 1С предприятие заходите в меню изменить форму и жмете кнопку установить стандартные настройки (58) alexskiff, Ваш предложенный способ работает. Но каждый раз при открытии формы платформа (8.3.6.2100) все-равно приказывает колонкам "плясать". Все сбивается нафиг Это издевательство. только в 1С такое может быть. Только сектанты такое могут сделать! =) Тоже намучился, ответ с растягивать в да немного помог.

Частично решил проблему следующим образом, об этом уже немного говорили. У меня в дереве все колонки создаются программно. Если нужно сделать то, что делаю я, только на форме - нужно просто найти эти свойства у колонок.

У всех колонок, кроме последней (пустой) делаю так:

КолонкаМагазина.Ширина = НужнаяШирина;
КолонкаМагазина.ФиксацияВТаблице = ФиксацияВТаблице.Лево;
КолонкаМагазина.РастягиватьПоГоризонтали = Ложь;

У последней, пустой колонки, делаю так:

КолонкаМагазина.Ширина = НужнаяШирина;
КолонкаМагазина.ФиксацияВТаблице = ФиксацияВТаблице.Лево;
КолонкаМагазина.РастягиватьПоГоризонтали = Истина;

Т.о. отличие только в одном значении.

Довольно неплохо помог такой способ. Колонки немного съезжают, но вполне терпимо. Намного лучше, чем было.

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

Рассмотрим некоторые приемы работы с табличными частями.

Как обойти табличную часть

Для обхода табличной части можно использовать цикл Для каждого

Для каждого Строка из ТабличнаяЧасть Цикл

На каждой итерации в переменную Строка передается очередная строка табличной части. Значения реквизитов строки можно получить выражением Строка.ИмяРеквизита.

Как получить и обойти выделенные строки табличной части

Для вывода информации из табличной части объекта служит элемент формы Табличное поле. Для включения возможности выделения нескольких строк на табличном поле нужно установить значение Множественный у его свойства Режим выделения.

Работа с табличной частью объектов в 1С

Для получения перечня выделенных строк используется следующий код:

ВыделенныеСтроки = ЭлементыФормы . ИмяТабличногоПоля . ВыделенныеСтроки ;

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

ВыделенныеСтроки = ЭлементыФормы . ИмяТабличногоПоля . ВыделенныеСтроки ;

Для каждого Строка из ВыделенныеСтроки Цикл

Как программно выделить строки табличной части (табличного поля) и снять выделение

Чтобы программно снять выделение строк табличного поля:

Чтобы программно выделить все строки табличного поля:

Как очистить табличную часть

Как получить текущую строку табличной части

Для обычных форм код будет выглядеть так:

Для управляемых форм:

Как добавить новую строку в табличную часть

Добавление новой строки в конец табличной части:

Добавление новой строки в любое место табличной части (последующие строки будут сдвинуты):

НоваяСтрока . Реквизит 1 = "Значение" ;

Как программно заполнить реквизиты строки табличной части

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

Создаваемая обработчиком процедура имеет три параметра:

Рассмотрим пример. Допустим, нам нужно заполнить реквизит табличной части СчетУчета, в случае, когда добавляется новая строка. При редактировании существующей строки изменять счет учета не нужно.

//Если пользователь редактирует существующую строку, то ничего не делаем
Если НЕ НоваяСтрока Тогда
Возврат ;
КонецЕсли ;

//Если же строка новая, устанавливаем счет учета
ТекСтрока = Элемент . ТекущиеДанные ; //Получили текущую строку табличной части
ТекСтрока . СчетУчета = ПланыСчетов . Хозрасчетый . НужныйСчетУчета ;
КонецПроцедуры

Работа с табличной частью объектов в 1С : 13 комментариев

Сделать это можно по-разному. Цикл Для каждого, на мой взгляд, не очень подходящий вариант, т.к. будет работать слишком долго. Да и надо еще где-то список документов брать.

Спасибо!
Буду пробовать.

А может это подойдет?

Табличная часть (Tabular section)
Итог (Total)
Синтаксис:

Тип: Число; Строка.
Индекс либо имя колонки, по которой подсчитывается итог.
Возвращаемое значение:

Тип: Число; Неопределено.

Суммирует значения всех строк в указанной колонке.
Если в колонке установлен тип и он единственный, то при суммировании будет предприниматься попытка преобразования значения к типу Число.
Если колонке не присвоены типы, то в процессе суммирования будут принимать участие только значения, имеющие тип Число, значения других типов будут игнорироваться.
Если в колонке несколько типов и среди них есть тип Число, то в процессе суммирования будут принимать участие только значения, имеющие тип Число, значения других типов будут игнорироваться.
Если в колонке несколько типов и среди них нет типа Число, то результатом будет значение Неопределено.

Сервер, толстый клиент, внешнее соединение.
Пример:

Это подошло бы, если бы нужно было суммировать колонку в одном документе. А Юрию нужно суммировать колонку Стоимость всех документов.

Добрый день!
Достаточно ли будет обратиться в модуле формы к текущей строке табличной части или в модуле менеджера тоже нужно будет что-то прописать?

Не совсем понял, о чем конкретно вопрос.
Если о том, как получать и работать с текущей строкой табличной части, то в модуле менеджера ничего писать не нужно.

Здравствуйте!
Опишу вкратце ситуацию:
Из документа вызывается команда печати штрихкодов и в обработку печати передается, как я понимаю, весь контекст документа и печатаются этикетки для всех строк документа. Возможно ли в обработке печати получить информацию только о выделенных строках из этого контекста ? Прилагаю код модуля команды ПечатьЭтикеток.
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

&НаСервере
Функция Заполнялка(ДокСсылка) Экспорт
ТабДокумент = Новый ТабличныйДокумент;

ТабДокумент.АвтоМасштаб = истина ;
ТабДокумент.ОтображатьСетку = Ложь;
ТабДокумент.ТолькоПросмотр = Истина;
ТабДокумент.ОтображатьЗаголовки = Ложь;

ЧтоТо = Стр.СерийныйНомер;
ПервыйМодуль.ВывестиШтрихкодДокументаВОбластьМакета(ВнешняяКомпонента,ОбластьМакета,ЧтоТо) ;

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

Значит я на клиенте должен сформировать таблицу выделенных строк и уже ее передавать в обработку печати ?

Доброго времени суток!
Создаю обработку на обычных формах, в которой имеется несколько Табличных частей. Они в свою очередь находят отображение в Форме обработки. И если данные первых 3, меня после закрытия Формы, не интересуют, то данные последней хотелось-бы использовать в дальнейшем, пока открыта обработка. В настоящее время при закрытии Формы Табличные части очищаются. В дальнейшем, в новом сеансе работы с обработкой эти данные не нужны. Насколько я понимаю Функции сохранения Данных Табличной части обработки не существует. Табличную часть в обработке решил использовать из-за возможности сохранить структуру Данных. Как мне сохранить эти данные для использования в других окнах?
Может у Вас есть видео по данному вопросу?

Читайте также: