1з8 поточний рядок табличної частини. Як програмно заповнити реквізити рядка табличної частини

19.11.2019 Поради

Табличні частини існують у багатьох об'єктів в 1С:

  • Довідники
  • Документи
  • Звіти та обробки
  • Плани рахунків
  • Плани видів характеристик
  • Плани видів розрахунку
  • Бізнес-процеси та завдання

Табличні частини дозволяють зберігати необмежену кількість структурованої інформації, що належить одному об'єкту.

Розглянемо деякі прийоми роботи з табличними частинами.

Як обійти табличну частину

Для обходу табличної частини можна використовувати цикл Для кожного

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

Повідомити(Рядок. РеквізитТаблічноїЧастини) ;

Кінець циклу;

На кожній ітерації у змінну Рядокпередається черговий рядок табличної частини. Значення реквізитів рядка можна отримати виразом Рядок.Ім'яРеквізиту.

Як отримати та обійти виділені рядки табличної частини

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

Для отримання переліку виділених рядків використовується наступний код:

Для того, щоб обійти виділені рядки, використовується цикл Для кожного:

ВиділеніРядки = ЕлементиФорми. Ім'я ТабличногоПоля. Виділені Рядки;

Для кожного Рядок з ВиділеніРядки Цикл

//Вміст циклу

Кінець циклу;

Як програмно виділити рядки табличної частини (табличного поля) та зняти виділення

Щоб програмно зняти виділення рядків табличного поля:

ЕлементиФорми. Ім'я ТабличногоПоля. Виділений Рядки. Очистити();

Щоб програмно виділити всі рядки табличного поля:

Для кожного ПоточнийРядок З ТабличнаЧастина Цикл
ЕлементиФорми. Ім'я ТабличногоПоля. Виділені Рядки. Додати(ПоточнаРядок) ;
Кінець циклу;

Як очистити табличну частину

Таблична частина. Очистити();

Як отримати поточний рядок табличної частини

Поточний рядок — це термін, у якого у користувача в Наразізнаходиться курсор. Щоб її отримати, потрібно звернутися до елемента управління на формі, який пов'язаний із табличною частиною.

Для звичайних форм код виглядатиме так:

ЕлементиФорми. Ім'я ТабличногоПоля. ПоточніДані;

Для керованих форм:

Елементи. Ім'я ТабличногоПоля. ПоточніДані;

Як додати новий рядок до табличної частини

Додавання нового рядка до кінця табличної частини:

НоваРядок= ТабличнаЧастина. Додати ();

Додавання нового рядка в будь-яке місце табличної частини (наступні рядки будуть зсунуті):

НоваРядок= ТабличнаЧастина. Вставити(Індекс)
//Індекс - номер рядка, що додається. Нумерація рядків починається із нуля.

НовийРядок. Реквізит1 = "Значення";

Як програмно заповнити реквізити рядка табличної частини

Якщо потрібно програмно заповнити реквізити рядка табличної частини, яку додає користувач, необхідно використовувати обробник події табличної частини ПриПочаткуРедагування.

Створювана обробником процедура має три параметри:

  • Елемент- Містить елемент управління ТабличнеПоле.
  • НовийРядок- Бульова. Містить значення Істина, якщо додається новий рядоктабличній частині, та Брехня,якщо користувач почав редагувати існуючий рядок.
  • Копіювання- Бульова. Містить значення Істина, якщо користувач копіює рядок, та Брехняв інших випадках.

Розглянемо приклад. Допустимо, нам потрібно заповнити реквізит табличної частини РахунокОбліку, якщо додається новий рядок. Під час редагування наявного рядка змінювати рахунок обліку не потрібно.

Процедура Таблична Частина При Початку Редагування (Елемент, Новий Рядок, Копіювання)

//Якщо користувач редагує існуючий рядок, то нічого не робимо
Якщо НЕ Новий Рядок
Повернення;
КінецьЯкщо ;

//Якщо ж рядок новий, встановлюємо рахунок обліку
ТекРядок = Елемент. ПоточніДані; //Отримали поточний рядок табличної частини
ТекРядок. Рахунки Рахунки = ПланиРахунків. Госпрозрахунки. Потрібний РахунокОбліку;
КінецьПроцедури

Як встановити рядок у 8.2 ( Керовані форми) читайте .

Спочатку хочу нагадати, що дані табличній частині документа (або таблиці значень) і табличне поле – це різні об'єкти. Для того, щоб зробити якісь візуальні дії, ми працюємо з табличним полем. В даному випадку, ми будемо використовувати його властивість "Поточний Рядок", якраз воно і відповідає за те, який рядок активний.

Щоб виділити в табличному полі необхідний рядок знадобиться два кроки:

1. Знайти потрібний нам рядок в об'єкті даних, що відображає табличне поле
Підкреслю, що тут знадобиться саме об'єкт даних. Наприклад, у нас є документ Реалізація ТоварівПослуг у якого є таблична частина «Товари» і ми вирішили зробити активним 2-й рядок на формі документа. Тоді в модулі форми документа ми напишемо:


// У другого рядка індекс дорівнює одному
ПотрібнаРядок = Товари;

Або ми знаємо, що в другому рядку в колонці Номенклатура у елемента Код дорівнює «001» тоді ми використовуємо конструкцію:


// спочатку знаходимо елемент довідника Номенклатура за кодом
// а потім шукаємо його в табличній частині «Товари»
ПотрібнаРядок = Товари.Знайти(Довідники.Номенклатура.ЗнайтиПоКоду(«001»));

2. Встановити значенням поточного рядка знайдений рядок
Тепер нам потрібно присвоїти значення змінної ПотрібнийРядок властивості табличного поля ПоточнийРядок:


// якщо табличне поле у ​​нас теж називається
ЕлементиФорми.Товари.Поточнарядок = ПотрібнаРядок;

// якщо табличне поле називається ТабличнеПоле1

У результаті рядки коду можуть виглядати так:

ПотрібнаРядок = Товари.Знайти(Довідники.Номенклатура.ЗнайтиПоКоду(«001»));
ЕлементиФорми.ТаблічнеПоле1.Поточнарядок = ПотрібнийРядок;

Для початку потрібно усвідомити, що є об'єкт, який містить дані, наприклад Дані Форми, Колекція і є об'єкт, який відображає дані візуально - Таблиця.

У Таблиці є тільки поточний рядок, за допомогою якого не можна дізнатися все існуючі значенняДані Форми Колекція з якими вона пов'язана. У свою чергу Дані Форми Колекція немає поточного рядка. Щоб зв'язати ці об'єкти в 1с використовується Ідентифікатор, адже рядки порядок рядків можна змінити як у візуальній частині так і даних, але зв'язок при цьому не повинна порушитися.

Розглянемо це з прикладу:

Форма має реквізит ТЗ типу (ТаблицяЗначень) - у дужках тому, що фактичний тип - ДаніФормиКолекція

Реквізит виведено форму у вигляді Таблиці.

Визначення рядка Таблиці значень за Поточним рядком Таблиці

Щоб визначити, який рядок ТЗ зараз поточний, потрібно спочатку отримати ідентифікатор рядка в Таблиці, а потім по ньому знайти рядок у ТЗ

ІдентифікаторРядки = Елементи.ТЗ.ПоточнаРядок; // Отримуємо ідентифікатор у Таблиці РядокТЗ = ТЗ.ЗнайтиПоІдентифікатору(ІдентифікаторРядки);

Встановлення поточного рядка у Таблиці

Щоб встановити поточний рядок таблиці, потрібно зробити навпаки. Спочатку одержати ідентифікатор ТЗ, а потім встановити на ньому поточний рядок Таблиці.

РядокТЗ = ДаніФормиКолекція; // Для прикладу візьмемо рядок 1 ІдентифікаторРядки = РядокТЗ.ОтриматиІдентифікатор(); Елементи.ТЗ.ПоточнаРядок = ІдентифікаторРядки;

Для зручнішого розуміння можете завантажити