Меню

1с таблица формы текущая колонка

Установить текущую колонку в таблице управляемой формы

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

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

Вот фрагмент удаления колонки:

мТЗ = РеквизитФормыВЗначение(«Характеристики», Тип(«ТаблицаЗначений»));

Если 1=0 Тогда
мТЗ = Новый ТаблицаЗначений;
КонецЕсли;

МассивРеквизитов = Новый Массив;
МассивРеквизитов.Добавить(«Характеристики.» + УдаляемаяКолонка);
ИзменитьРеквизиты(, МассивРеквизитов);
ЗначениеВРеквизитФормы(мТЗ, «Характеристики»);

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

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

Понимаю. Опишу:
Таблица формы создана программно. Колонок +50.
Далее пользователь удаляет ненужные колонки, активируя любую строку в удаляемой колонке.

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

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

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

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

Разобрался как позиционировать полосу прокрутки:

Именно если устанавливать свойство АктивироватьПоУмолчанию, пр иперерисовки формы, полоса прокрутки сама перемещается к нужной колонке.

В примере я перемещаю полосу прокрутки к необходимой мне колонке. дальше дело техники. определять номер соседней колонки у удаляемой и делать ее активной.

Источник



Программирование в 1С для всех

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

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

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

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

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

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

ФИО = Новый ТаблицаЗначений ;
ФИО . Колонки . Добавить ( «Фамилия» );
ФИО . Колонки . Добавить ( «Имя» );
ФИО . Колонки . Добавить ( «Отчество» );

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

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

Добавить( , , , )

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

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

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

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

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

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

ОписаниеТиповСтрока = Новый ОписаниеТипов ( «Строка» );
ОписаниеТиповДата = Новый ОписаниеТипов ( «Дата» )

ФИО = Новый ТаблицаЗначений ;
ФИО . Колонки . Добавить ( «Фамилия» , ОписаниеТиповСтрока , «Фамилия» , 50 );
ФИО . Колонки . Добавить ( «Имя» , ОписаниеТиповСтрока , «Имя» , 50 );
ФИО . Колонки . Добавить ( «Отчество» , ОписаниеТиповСтрока , «Отчество» , 50 );
ФИО . Колонки . Добавить ( «ДатаРождения» , ОписаниеТиповДата , «Дата рождения» , 10 );

Читайте также:  Карта бизнес процессов это таблица

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

Вставить( , , , , )

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

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

ФИО . Колонки . Вставить ( 3 , «ФИО» , ОписаниеТиповСтрока , «ФИО» , 50 );

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Более подробно о работе с таблицами значений и другими интересными объектами языка программирования в 1С читайте в моей книге «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

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

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

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

Промо-код на скидку в 15% — 48PVXHeYu


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

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

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Источник

Свойства ТекущиеДанные и ТекущаяСтрока

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

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

Свойство ТекущиеДанные предназначено для получения значений колонок текущей строки, а свойство ТекущаяСтрока для получения и установки текущей строки табличного поля.

Следует понимать, что для объектных данных (Справочник, Документ и т.д.) в качестве значения свойства ТекущаяСтрока используется ссылка на объект базы данных. Соответственно при обращении к свойствам этого значения будет выполняться считывание объекта базы данных.

Читайте также:  Таблица размеров одежды для вязания детям

Типичной ошибкой является обращение к данным строки с использованием свойства ТекущаяСтрока . В этом случае будет выполняться считывание данных объекта из базы данных, что может существенно снизить производительность работы табличного поля. Например, приведенный ниже фрагмент текста программы является неэффективным:

Рекомендуется для обращения к данным объекта использовать свойство ТекущиеДанные . Правильный фрагмент приведен ниже:

Если есть идентификатор текущей строки (т.е. свойство ТекущаяСтрока ), можно получить ТекущиеДанные . И наоборот:

Источник

Таблица значений в 1С 8.3 — примеры работы

Содержание

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

Таблица значений имеет свойства и методы для работы с колонками и строками, которые рассмотрены в ниже.

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

// Создание таблицы значений
ТабЗнач = Новый ТаблицаЗначений;

Добавление колонок

// Добавление колонок в таблицу значений без указания типа
ТабЗнач.Колонки.Добавить(«Сотрудник»);
ТабЗнач.Колонки.Добавить(«Должность»);
ТабЗнач.Колонки.Добавить(«Оклад»);

// Добавление колонки с явным указанием типа значения и заголовком
ОписаниеПремия = Новый ОписаниеТипов(«Число», Новый КвалификаторыЧисла( 10 , 2));
ТабЗнач.Колонки.Добавить(«ПроцентПремии», ОписаниеПремия, «Процент премии»);
ТабЗнач.Колонки.Добавить(«Премия», ОписаниеПремия, «Премия»);

Добавление новой строки, заполнение реквизитов

// Добавление новой строки в таблицу значений
СтрокаТЗ = ТабЗнач.Добавить();

// Заполнение строки по именам реквизитов
СтрокаТЗ.Сотрудник = «Иванов Иван»;
СтрокаТЗ.Должность = «Программист 1С»;
СтрокаТЗ.Оклад = 100000;

СтрокаТЗ = ТабЗнач.Добавить();
// Заполнение строки таблицы значений по индексам колонок
СтрокаТЗ[0] = «Петров Петр»;
СтрокаТЗ[1] = «Тестировщик»;
СтрокаТЗ[2] = 80000;

Обращение к строке таблицы значений по индексу

ТабЗнач.Добавить();
// Обращение к строке таблицы значений по индексу
ТабЗнач[2].Сотрудник = «Федоров Василий»;

// Работа с таблицей как с двумерным массивом
ТабЗнач[2][1] = «Программист 1С»;

// Обращение к строке таблицы значений при помощи метода Получить
ТабЗнач.Получить(2).Оклад = 90000;

Вставить новую строку в нужное место и заполнить значения этой строки

// Вставить новую строку в указанную позицию в таблицу значений
ВставленнаяСтрока = ТабЗнач.Вставить(1);

// Заполнить строку значениями
// В качестве источника данных заполнения могут быть объекты с именованными свойствами
// — Структура, строка таблицы значений, объект, и т.п.
// метод производит сопоставление свойств по именам,
// и заполняет значения у совпавших свойств приемника — в нашем случае строки таблицы значений
ЗаполнитьЗначенияСвойств(ВставленнаяСтрока, СтрокаТЗ);
ВставленнаяСтрока.Сотрудник = «Сидоров Александр»;

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

// Заполнение колонки для всех строк таблицы значений
ТабЗнач.ЗаполнитьЗначения(10.5, «ПроцентПремии»);

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

// Коллекция строк и коллекция колонок по своему поведению похожи на массивы,
// и работать с ними можно схожим образом
// Перебрать все колонки таблицы значений и вывести заголовки,
// а если не заполнен заголовок — то имя колонки
Для Каждого Колонка из ТабЗнач.Колонки Цикл
Сообщить(?(ЗначениеЗаполнено(Колонка.Заголовок),Колонка.Заголовок, Колонка.Имя));
КонецЦикла;

// Перебрать все строки и произвести какие-то вычисления,
// например, посчитать премию, как Оклад * процент премии /100
Для Каждого СтрокаТЗ из ТабЗнач Цикл
СтрокаТЗ.Премия = СтрокаТЗ.Оклад * СтрокаТЗ.ПроцентПремии / 100;
КонецЦикла;

Копирование таблицы значений в 1С — примеры

// Создать полную копию таблицы
КопияТЗ = ТабЗнач.Скопировать();
// Создать копию таблицы значений по нужным колонкам
КопияДолжностиОклады = ТабЗнач.Скопировать(,«Должность,Оклад»);

//Создать копию таблицы значений с отбором нужных строк
Отбор = Новый Структура(«Должность», «Тестировщик»);
КопияТЗТестировщики = ТабЗнач.Скопировать(Отбор);

// Создать пустую таблицу значений с такими же колонками как у исходной
ПустаяКопияТЗ = ТабЗнач.СкопироватьКолонки();

Сортировка таблицы значений в 1С 8

// Сортировать таблицу значений по колонке в 1С 8
КопияТЗ.Сортировать(«Оклад»);

// Сортировать таблицу значений по нескольким колонкам в 1С 8
КопияТЗ.Сортировать(«Должность Убыв, Оклад Возр»);

Свернуть таблицу значений

// Просуммировать значения в одних колонках, свернув таблицу значений в разрезе других колонок
// При использовании метода Свернуть, все не использованные в методе колонки удалятся!
// Первым параметром идет список колонок через запятую, по которым мы хотим получить группировки
// Вторым параметром идет список колонок, значения в которых нужно просуммировать
// В этом примере в таблице значений КопияТЗ останутся только колонки Должность и Оклад
КопияТЗ.Свернуть(«Должность», «Оклад»);

Читайте также:  Погонные параметры линии таблица

Удаление строк табличной части по условию. Обратный обход таблицы значений снизу вверх

// Удаление строк из таблицы значений по условию. Обратный перебор таблицы значений в 1С
КопияДляУдаления = ТабЗнач.Скопировать();ВсегоСтрок = КопияДляУдаления.Количество() — 1;
Для Сч = — ВсегоСтрок по 0 Цикл
Если КопияДляУдаления[-Сч].Оклад > 80000 Тогда
// Удаление строки таблицы значений.
// В качестве параметра может быть как конкретная строка таблицы значений, так и индекс строки.
КопияДляУдаления.Удалить(-Сч);
КонецЕсли;
КонецЦикла;
// В результате останутся только строки, где оклад меньше или равен 80000

// Обратный перебор таблицы значений — второй вариант
КопияДляУдаленияВариант2 = ТабЗнач.Скопировать();
Сч = КопияДляУдаленияВариант2.Количество() — 1;
Пока Сч >= 0 Цикл
Если КопияДляУдаленияВариант2[Сч].Должность = «Тестировщик» Тогда
КопияДляУдаленияВариант2.Удалить(Сч);
КонецЕсли;
Сч = Сч — 1;
КонецЦикла;
// В результате останутся только строки, где должность не равна «Тестировщик»

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

// Найти одну строку в таблице значений по значению во всех колонках.
// Метод целесообразно использовать для поиска уникальных значений
НайденнаяСтрока = ТабЗнач.Найти(«Федоров Василий»);

// Найти строку по значению с поиском по определенным колонкам
// При поиске по неуникальным значениям следует учитывать, что метод вернет первую попавшуюся строку
НайденнаяСтрока = ТабЗнач.Найти(10.5, «Премия, ПроцентПремии»);

Удалить все строки из таблицы значений

// Удалить все строки из таблицы значений
ТабЗнач.Очистить();

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

Источник

Работа со свойством текущие данные 1С

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

Вся информация, представленная в статье, относится только к управляемому приложению.

Так как свойство относится к элементу формы (таблице), данные получаются именно из него, а не из источника. Из этого следует несколько особенностей свойства ТекущиеДанные:

  • Доступно только на клиенте. Его нельзя передавать и использовать на сервере. Поэтому правильно будет получить значения нужных полей в клиентской процедуре и передать их в серверную, при необходимости.
  • Содержит данные реквизитов добавленных на форму, а также данные реквизитов с установленным флагом Использовать всегда. Остальные реквизиты отсутствуют в коллекции.
    Как видно на картинке, в текущих данных представлены реквизиты Номенклатура и Сумма, добавленные в таблицу и реквизит Количество с установленным флагом Использовать всегда.
  • В случае, если таблица формы пустая или у нее нет активизированной строки, свойство ТекущиеДанные будет содержать значение Неопределено. Поэтому, перед использованием свойства, имеет смысл делать проверку. Но только в тех случаях, когда таблица действительно может быть пустой или не активизированной. Например событие ПриАктивизацииСтроки вызывается и для пустой таблицы. А вот событие ПриИзменении колонки таблицы, может вызываться только при наличии активизированной строки. Поэтому в проверке не будет смысла.
  • При помощи свойства ТекущиеДанные можно не только читать, но и изменять информацию. Исключение — таблица формы, источником которой является динамический список. В этом случае изменение текущих данных, не приведет к изменению строки таблицы.

Варианты получения свойства Текущие данные 1С

В общем случае к свойству ТекущиеДанные можно обратиться через элемент формы к которому оно относится.

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

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

Источник

Adblock
detector