Меню
безкоштовно
Головна  /  Мультимедіа / Заповнення таблиці значень 1с. Які методи існують і як шукати одночасно за кількома значеннями

Заповнення таблиці значень 1с. Які методи існують і як шукати одночасно за кількома значеннями

Ось є для початку невеликий фак - прості приклади роботи з таблицею значень:

1. Створити таблицю значень

ТабліцаЗначеній \u003d Новий ТабліцаЗначеній;


2. Створити колонки таблиці значень:

ТабліцаЗначеній.Колонкі.Добавіть ( "Ім'я");
ТабліцаЗначеній.Колонкі.Добавіть ( "Прізвище");


3. Додати нові рядки використовуючи імена колонок:


НоваяСтрока.Імя \u003d "Василь";
НоваяСтрока.Фамілія \u003d "Пупкін";


4. Як шукати значення в таблиці значень:
Необхідно знайти рядок таблиці містить дані значення.

НайденнаяСтрока \u003d ТабліцаЗначеній.Найті (ІскомоеЗначеніе);


5. Знайти перше входження в певних колонках таблиці значень

НайденнаяСтрока \u003d ТабліцаЗначеній.Найті (ІскомоеЗначеніе, "Постачальник, Покупець");


6. Якщо треба знайти всі входження в таблиці значень:
Використовуємо структуру пошуку.

СтруктураПоіска \u003d Структура ( "Співробітник", ІскомоеЗначеніе);
МассівНайденнихСтрок \u003d ТабліцаЗначеній.НайтіСтрокі (СтруктураПоіска);


Створимо структуру пошуку, кожен елемент якої буде містити ім'я колонки в якості ключа і шукане значення в цій колонці - як значення. Передаємо СтруктуруПоіскав як параметр методу НайтіСтрокі (). В результаті получеем рядків таблиці.
Якщо в структуру пошуку додати пошук потрібного значення, наприклад, ще й в колонці Відповідальний, то в результаті застосування методу НайтіСтрокі () отримаємо всі рядки, де і Співробітник, і Відповідальний рівні згаданої значенням.

7. Як перебрати таблицю значень в довільному порядку

Для Кожного ТекущаяСтрока З ТабліцаЗначеній Цикл
Повідомити (ТекущаяСтрока.Імя);
КонецЦікла;

Теж саме використовуючи індекси:

СтаршійІндекс \u003d ТабліцаЗначеній.Колічество () - 1;
Для Сч \u003d 0 по СтаршійІндекс Цикл
Повідомити (ТабліцаЗначеній [Сч] .Імя);
КонецЦікла;


8. Видалення наявної рядки таблиці значень

ТабліцаЗначеній.Удаліть (УдаляемаяСтрока);

за індексом

ТабліцаЗначеній.Удаліть (0);


9. Видалення наявної колонки таблиці значень

ТабліцаЗначеній.Колонкі.Удаліть (УдаляемаяКолонка);


за індексом

ТабліцаЗначеній.Колонкі.Удаліть (0);

Необхідно враховувати, що видалення рядка (або колонки) «з середини» таблиці значень призведе до зменшення на одиницю індексів рядків, що стояли «після» віддаленої

10. Як заповнити таблицю значень, якщо імена колонок містяться в змінних?

НоваяСтрока \u003d ТабліцаЗначеній.Добавіть ();
НоваяСтрока [ІмяКолонкі] \u003d Значення;


11. Як заповнити всю колонку таблиці значень потрібним значенням?
Колонку ФлагФіскальногоУчета в таблиці значень ТабліцаЗначеній необхідно заповнити значенням Брехня

ТабліцаЗначеній.ЗаполнітьЗначенія (Брехня, "ФлагФіскальногоУчета");


Застосовуємо для таблиці значень метод ЗаполнітьЗначенія (). Першим параметром передаємо заповнюване значення. Другим параметром - ім'я заповнюється колонки.

12. Як таблицю значень «ТабліцаПолучатель» заповнити даними таблиці значень «ІсходнаяТабліца»?

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

ТабліцаПолучатель \u003d ТабліцаІсходная.Скопіровать ();


Варіант другий: таблиця ТабліцаПолучатель існує, і шкода втрачати її колонки і обмеження на типи даних колонок. Але потрібно заповнити дані по колонках, імена яких збігаються з іменами вихідної таблиці.

Часткове перенесення даних для колонок з однаковими іменами:

Для Кожного СтрокаІсходнойТабліци З ІсходнаяТабліца Цикл
ЗаполнітьЗначеніяСвойств (НоваяСтрока, СтрокаІсходнойТабліци);
КонецЦікла


Для кожного рядка вихідної таблиці додається новий рядок в таблицю-одержувач і виконується заповнення значень в тих колонках нової таблиці, імена яких збігаються з іменами колонок у вихідній таблиці

Якщо у таблиць не буде колонок з однаковими іменами, таблиця-одержувач буде в результаті містити стільки ж рядків з порожніми значеннями, скільки рядків було в таблиці-джерелі.
Якщо у якихось однойменних колонок тип значення даних з таблиці-джерела не потрапить в масив дозволених типів колонки таблиці-одержувача, в таких полях отримаємо порожні значення.
Розглянемо третій випадок. У разі однойменних колонок колонку таблиці-одержувача потрібно привести в повну відповідність колонці таблиці-джерела.

Повне копіювання даних для колонок з однаковими іменами

ОдноіменниеКолонкі \u003d Новий Масив ();

Для Кожного Колонка З ІсходнаяТабліца.Колонкі Цикл
СовпадающаяКолонка \u003d ТабліцаПолучатель.Колонкі.Найті (Колонка.Імя);

якщо СовпадающаяКолонка<> Не визначено Тоді

// Отримати властивості колонки.
Ім'я \u003d Колонка.Імя;
ТіпЗначенія \u003d Колонка.ТіпЗначенія;
Тема \u003d Колонка.Заголовок;
Ширина \u003d Колонка.Шіріна;

// Замінити колонки в таблиці-одержувачі.
Індекс \u003d ТабліцаПолучатель.Колонкі.Індекс (СовпадающаяКолонка);

ТабліцаПолучатель.Колонкі.Удаліть (Індекс);
ТабліцаПолучатель.Колонкі.Вставіть (Індекс, Ім'я, ТіпЗначенія, Тема, Ширина);

// Додати чергове ім'я збігаються колонок в масив.
ОдноіменниеКолонкі.Добавіть (Колонка.Імя);

КонецЕсли;

КонецЦікла;

// Цикл перебору рядків вихідної таблиці.
Для кожного СтрокаІсходнойТабліци З ІсходнаяТабліца Цикл

// Додати новий рядок в таблицю-одержувач.
НоваяСтрока \u003d ТабліцаПолучатель.Добавіть ();

// Заповнити значення в співпадаючих осередках.
Для кожного ІмяКолонкі З ОдноіменниеКолонкі Цикл
НоваяСтрока [ІмяКолонкі] \u003d СтрокаІсходнойТабліци [ІмяКолонкі];

КонецЦікла;

КонецЦікла;


Нам доведеться замінити колонку в таблиці-одержувачі на нову, чиї властивості повністю відповідатимуть колонці таблиці-джерела.
Тому в разі виявлення в таблиці-одержувачі однойменної колонки збираємо в змінних все властивості для нової колонки. Далі видаляємо стару і створюємо нову колонку. Потім виконуємо цикл перебору рядків вихідної таблиці.
У циклі додаємо до таблиці-одержувачу новий рядок і відкриваємо цикл перебору імен колонок в масиві співпадаючих колонок.
Усередині цього вкладеного циклу виробляємо заповнення клітинок таблиці-одержувача даними елементи таблиці-джерела.

13. Як додати колонки до таблиці значень «ТабліцаЗначеній» з обмеженнями по типу?

При додаванні колонки можна просто вказати її ім'я, а другий параметр методу Додати () не чіпати. У цьому випадку тип даних колонки - довільний.

Додавання колонки без вказівки типу даних

// Додати колонку без обмежень по типу.
ТабліцаЗначеній.Колонкі.Добавіть ( "Об'єкт");


Можна заповнити значення другого параметра. Туди необхідно передавати опис дозволеного для колонки типу. Сам опис можна отримати за допомогою конструктора, передавши останньому в якості параметра строкове назву типу (якщо багато типів, то через кому) або масив допустимих типів.

Додавання колонки із зазначенням типу даних

// Обмеження за типами даних колонки:
// Тільки елементи довідника "Контрагенти".
ТабліцаЗначеній.Колонкі.Добавіть ( "Контрагент", Новий ОпісаніеТіпов ( "СправочнікСсилка.Контрагенти"));


Якщо серед типів, дозволених до заповнення даних колонки, є рядок, можна обмежити її розрядність (довжину), вказати використання змінної або фіксованої довжини. Все це забезпечується створенням об'єкта за допомогою конструктора КваліфікаториСтрокі. Далі цей об'єкт буде використаний в якості одного з параметрів конструктора ОпісаніеТіпов.

Використання кваліфікаторів для уточнення типу даних колонки таблиці значень

// Підготовка та установка обмежень для даних типу Рядок.
КваліфікаториСтрокі \u003d Новий КваліфікаториСтрокі (20, ДопустімаяДліна.Переменная);
ДопустімиеТіпи \u003d Новий ОпісаніеТіпов ( "Рядок", КваліфікаториСтрокі);
ТабліцаЗначеній.Колонкі.Добавіть ( "ПрімечаніеСтроковоеКороткое", ДопустімиеТіпи);


Аналогічні дії можна здійснювати стосовно кваліфікаторів числа і дати.
Зверніть увагу: опис типів можна будувати конструктором як «з нуля», так і використовувати в якості основи вже існуюче опис типів

Використання існуючих описів типів для вказівки типу даних колонки таблиці значень

// Розширення вже використаного раніше опису типів.
КваліфікаториЧісла \u003d Новий КваліфікаториЧісла (10, 2, ДопустімийЗнак.Неотріцательний);
КваліфікаториДати \u003d Новий КваліфікаториДати (ЧастіДати.Дата);
РасшіренниеДопустімиеТіпи \u003d Новий ОпісаніеТіпов (ДопустімиеТіпи, "Число, Дата", КваліфікаториЧісла, КваліфікаториДати);

ТабліцаЗначеній.Колонкі.Добавіть ( "Примітка", РасшіренниеДопустімиеТіпи);

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

Історично таблиця значень в 1С має подвійне призначення, будучи віртуальним аналогом існуючих таблиць, але при цьому - і елементом управління. З переходом на кероване додаток велика частина цієї функціональності застаріла, але і в даний час вона може бути також елементом користувальницького інтерфейсу, але з низкою суттєвих обмежень.

Структура таблиці значень як об'єкта

Властивості таблиці значень визначаються комбінаціями двох визначених колекцій: її колонок і рядків.

Таблиця значень Колонки

Колонка таблиці значень - її визначальне властивість. Саме набір колонок таблиці визначає її структуру. Колонки відповідають полях фізичних таблиць або знайомим по призначеного для користувача інтерфейсу колонкам табличній частині або журналу документів. Колонка може мати внутрішнє ім'я, тип значення і заголовок, який відображається при інтерактивній роботі з таблицею.

Так як колонки є колекцією об'єктів, то ви можете додавати, видаляти і редагувати колонки.

Рядок таблиці значень

З точки зору програмного інтерфейсу, рядки - це окрема колекція, вбудована в таблицю значень. Вони є аналогом записів фізичних таблиць, тобто звичних для користувача рядків табличної частини або журналу документів. Кожна окремо взята рядок є об'єктом з набором іменованих властивостей, імена яких відповідають іменам колонок таблиці.

Таким чином, взаємодія з рядком дуже схоже на взаємодію з іншими об'єктами. Можна зчитувати і записувати її властивості, в тому числі з використанням визначеної функції «ЗаполнітьЗначеніяСвойств ()». Так як рядки є основною колекцією таблиці значень, то щоб видалити всі рядки таблиці, застосовується метод «Очистити ()».

Створити таблицю значень

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

Створення таблиці конструктором

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

ДемоТабліца \u003d Новий ТабліцаЗначеній; // Насамперед инициализируем ТЗ // Далі визначаємо необхідні параметри для нових колонок і додаємо їх в колекцію // Створення колонки "Номенклатура" Ім'я \u003d "Номенклатура"; ТіпЗначенія \u003d Новий ОпісаніеТіпов ( "СправочнікСсилка.Номенклатура"); Тема \u003d "Номенклатура (товар)"; ДемоТабліца.Колонкі.Добавіть (Їм, ТіпЗначенія, Заголовок); // Створення колонки "Кількість" Ім'я \u003d "Кількість"; ТіпЗначенія \u003d Новий ОпісаніеТіпов ( "Число"); ДемоТабліца.Колонкі.Добавіть (Ім'я, ТіпЗначенія); // В результаті даних маніпуляцій ми створили порожню таблицю з типізований колонками // Якщо вам необхідно використовувати більш точну типізацію примітивних типів, то слід використовувати розширений синтаксис конструктора "ОпісаніеТіпов"

Створення таблиці копіюванням

Якщо у вас під рукою є еталон з відповідною структурою та / або складом, ви можете скопіювати або вивантажити еталонну таблицю значень. Якщо еталоном є інша таблиця, то необхідно застосувати метод «Скопіювати таблиці-еталона». Якщо ви маєте справу з табличній частиною або набором записів регістра, необхідно використовувати метод «вивантажити таблицю значень». Якщо вам необхідна тільки структура, то можна скористатися методом «СкопіроватьКолонкі».

// Варіант з копіюванням з ТЗ-еталона всіх рядків але зі збереженням лише двох зазначених колонок КолонкіЕталона \u003d "Номенклатура, Кількість"; ДемоТабліца \u003d ТабліцаЕталон.Скопіровать (, КолонкіЕталона); // Варіант з копіюванням з ТЗ-еталона попередньо відібраних рядків, зі збереженням двох зазначених колонок СтрокіЕталона \u003d ОтобратьВМассівНужниеНамСтрокіІзТабліциЕталона (); КолонкіЕталона \u003d "Номенклатура, Кількість"; ДемоТабліца \u003d ТабліцаЕталон.Скопіровать (СтрокіЕталона, КолонкіЕталона); // Варіант з копіюванням з ТЗ-еталона рядків за вказаною фільтру, зі збереженням однієї колонки "Номенклатура" // Будуть відібрані всі рядки де значення в колонці Кількість дорівнює 0, в результуючу таблицю потрапить тільки колонка Номенклатура ОтборСтрок \u003d Новий Структура ( "Кількість" , 0); КолонкіЕталона \u003d "Номенклатура"; ДемоТабліца \u003d ТабліцаЕталон.Скопіровать (СтрокіЕталона, КолонкіЕталона); // Варіант з повним копіюванням таблиці і наступному видаленні одного рядка із значенням поля кількість рівним нулю і видаленням цілої колонки "Кількість" ОтборСтрок \u003d Новий Структура ( "Кількість", 0); КолонкіЕталона \u003d "Номенклатура"; ДемоТабліца \u003d ТабліцаЕталон.Скопіровать (СтрокіЕталона, КолонкіЕталона); СтрокаТабліци \u003d ДемоТабліца.Найті (0, "Кількість"); ДемоТабліца.Удаліть (СтрокаТабліци); ДемоТабліца.Колонкі.Удаліть ( "Кількість"); // Аналогічні варіанти і їх модифікації можна застосовувати до табличних частинах і наборах записів регістрів

Створення таблиці запитом

Якщо в базі даних існує еталон необхідної вам таблиці, то можна скористатися запитом для швидкого створення таблиці з потрібною структурою.

// Приклад зі створенням порожній таблиці за зразком структури регістра накопичення // Неважко здогадатися, що таким чином можна отримати і заповнену таблицю Запит \u003d Новий Запит ( "ВИБРАТИ ПЕРШІ 0 * З РегістрНакопленія.ТоваринаСкладе"); РезультатЗапроса \u003d Запрос.Виполніть (); ДемоТабліца \u003d РезультатЗапроса.Вигрузіть (); // Приклад зі створенням порожній таблиці по явно заданим типам і іменах полів Запит \u003d Новий Запит; Запрос.Текст \u003d "ВИБРАТИ ПЕРШІ 0 | Значення (Справочнік.Номенклатура.ПустаяССилка) ЯК Номенклатура, | ВИРАЗИТИ (0 ЯК ЧИСЛО (15, 3)) ЯК Кількість"; РезультатЗапроса \u003d Запрос.Виполніть (); ДемоТабліца \u003d РезультатЗапроса.Вигрузіть (); // ВАЖЛИВО! Не варто забувати, що в типах значень колонок, отриманих із запиту завжди присутній тип Null // Таким чином, ТЗ створена запитом, завжди має складові типи колонок

висновок

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

Для того, щоб враховувати гроші і товари, в бізнесі широко використовують різні таблиці. Майже кожен документ - це таблиця.

В одній таблиці перераховані товари до відвантаження зі складу. В іншій таблиці - зобов'язання по оплаті цих товарів.

Тому в 1С чільне місце займає робота з таблицями.

Таблиці в 1С також називають «табличні частини». Вони є у довідників, документів і інших.

Запит в результаті свого виконання повертає таблицю, доступ до якої можливо отримати двома різними способами.

Перший - більш швидкий - вибірка, отримання рядків з неї можливий тільки один по одному. Другий - вивантаження результату запиту в таблицю значень і далі довільний доступ до неї.

// Варіант 1 - послідовний доступ до результатів запиту

// отримання таблиці
Вибірка \u003d Запрос.Виполніть (). Вибрати ();
// по порядку обходимо всі рядки результату запиту
Поки Виборка.Следующій () Цикл
Повідомити (Виборка.Наіменованіе);
КонецЦікла;

// Варіант 2 - вивантаження в таблицю значень
Запит \u003d Новий запит ( «ВИБРАТИ Найменування ІЗ Справочнік.Номенклатура»);
// отримання таблиці
Таблиця \u003d Запрос.Виполніть (). Вивантажити ().
// далі можемо також обійти всі рядки
Для кожного Рядок з Таблиця Цикл
Повідомити (Строка.Наіменованіе);
КонецЦікла;
// або довільно звертатися до рядків
Рядок \u003d Табліца.Найті ( «Лопата», «Найменування»);

Важлива особливість - в таблиці, яка отримана з результату запиту, все колонки будуть строго типізовані. Це означає, що запросивши поле Найменування з довідника Номенклатура, Ви отримаєте колонку виду Рядок з допустимою довжиною не більше N символів.

Таблиця на формі (товстий клієнт)

Користувач працює з таблицею, коли вона розміщена на формі.

Базові принципи роботи з формами ми з Вами обговорювали в уроці з і в уроці по

Отже, розмістимо таблицю на формі. Для цього можна перетягнути таблицю з панелі елементів управління. Аналогічно можна вибрати в меню Форма / Вставити елемент управління.

Дані можуть зберігатися в конфігурації - тоді потрібно вибрати існуючу (раніше додану) табличну частину того об'єкта конфігурації, форму якого Ви редагуєте.

Натисніть кнопку «...» в властивості Дані. Для того, щоб побачити список табличних частин, потрібно розкрити гілку Об'єкт.

При виборі табличній частині 1С сама додасть колонки у таблиці на формі. Рядки введені користувачем в таку таблицю будуть зберігатися автоматично разом з довідником / документом.

У цьому ж властивості Дані Ви можете ввести довільне ім'я і вибрати тип ТабліцаЗначеній.

Це означає, що обрана довільна таблиця значень. Вона не додасть автоматично колонки, автоматично не зберігатися, а й робити з нею можна все, що завгодно.

Натиснувши правою кнопкою на таблиці Ви можете додати колонку. У властивостях колонки можна вказати його ім'я (для звернення в коді 1С), заголовок колонки на формі, зв'язок з реквізитом табличній частині (останнє - якщо вибрана не довільна таблиця, а таблична частина).

У властивостях таблиці на формі Ви можете вказати - чи доступне користувачеві додавати / видаляти рядки. Більш просунута форма - галочка ТолькоПросмотр. Ці властивості зручно використовувати для організації таблиць призначених для виведення інформації, але не редагування.

Щоб керувати таблицею, потрібно вивести на форму командну панель. Виберіть пункт меню Форма / Вставити елемент управління / Командна панель.

У властивостях командній панелі виберіть галочку Заповнити форму, щоб кнопки на панелі з'явилися автоматично.

Таблиця на формі (тонкий / керований клієнт)

На керованої формі зазначені дії виглядають трохи по іншому. Якщо Вам потрібно розмістити на формі табличну частину - розкрийте гілку Об'єкт і перетягніть одну з табличних частин вліво. І все!

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

Щоб додати колонки, використовуйте меню по правій кнопці миші на цьому реквізиті форми, пункт Додати колонку реквізиту.

Після чого також перетягніть таблицю вліво.

Щоб у таблиці з'явилася командна панель, у властивостях таблиці виберіть значення в секції Використання - Положення командній панелі.

Вивантаження таблиці в Excel

Будь-яку таблицю 1С, розташовану на формі, можна роздрукувати або вивантажити в Excel.

Для цього клацніть правою кнопкою миші на вільному місці в таблиці і виберіть пункт Вивести список.

У керованому (тонкому) клієнт аналогічні дії можна виконати за допомогою пункту меню Всі дії / Вивести список.

Вітаю всіх читачів infostart'a. Дана стаття буде присвячена питанню створення довільної таблиці значень на формі керованого застосування програмним способом.

Особливості завдання.

Кожен, хто програмував в звичайному додатку, Часто стикався з метою отримання довільної таблиці значень на формі. Під довільній таблицею значень розуміється таблиця, кількість і тип колонок якої наперед не відомо. Тобто колонок може бути 3, а може 6, а може 8. У звичайному додатку все просто: можна було на формі обробки розмістити елемент «ТабліцаЗначеній», і потім передати в цей елемент створену таблицю значень програмним способом. Потім простою командою:

ЕлементиФорми.ТаблічноеПоле.СоздатьКолонкі ();

отримати готову таблицю значень на формі. Здавалося б, що може бути простіше.

Це все було в звичайному додатку. У керованому додатку все змінилося. Так просто довільну таблицю чи не створити. Тепер потрібно або жорстко параметризованих таблицю значень на формі, або створювати її програмним способом (описувати, ну, в цьому, власне, і суть самого керованого застосування). Це ми і спробуємо зробити: програмними засобами створити довільну таблицю значень на керованої формі.

Рішення задачі.

Перше, що ми повинні зробити, це визначити, як таблиця з'явиться на формі. Головне, що ніякого елемента форми в обробці створювати не потрібно. Ми його створимо програмним способом, як і всю таблицю. Тобто таблиця буде описана, і створюватися в момент відкриття форми або за допомогою кнопки - це кому як потрібно.

Створення таблиці на формі відбувається через опис таблиці значень як реквізиту:
МассівТіпаВибора \u003d Новий Масив; МассівТіпаВибора.Добавіть (Тип ( "ТабліцаЗначеній")); ОпісаніеТіпаВибора \u003d Новий ОпісаніеТіпов (МассівТіпаВибора); МассівРеквізітов \u003d Новий Масив; МассівРеквізітов.Добавіть (Новий РеквізітФорми ( "ТабліцаРаспісанія", ОпісаніеТіпаВибора, "", "ТЗН")); Тепер ми повинні створити програмну таблицю значень, яка містить дані. Якщо таблиця значень буде отримана із запиту, то все більше - менш порядок. Якщо таблиця створюється вручну, то значення колонок, які будуть містити числа або дати можуть бути створені через «ОпісаніеТіпов». Суть в тому, що колонки в таблиці значень обов'язково повинні мати якийсь тип. Якщо, наприклад, передбачається, що користувач буде заповнювати дані в цих колонках інтерактивно, то не можна додавати колонку таблиці значень просто з ім'ям, вона повинна мати тип. Майте на увазі - це дуже важливо тому ці типи ми передамо в таблицю на формі.
Створюємо таблицю, яка містить кілька колонок:
КД \u003d Новий КваліфікаториДати (ЧастіДати.Время); МассівКД \u003d Новий Масив; МассівКД.Добавіть (Тип ( "Дата")); ОпісаніеТіповВремя \u003d Новий ОпісаніеТіпов (МассівКД, КД); ТЗ \u003d Новий ТабліцаЗначеній;
ТЗ.Колонкі.Добавіть ( "С", ОпісаніеТіповВремя);
ТЗ.Колонкі.Добавіть ( "До", ОпісаніеТіповВремя);
ТЗ.Колонкі.Добавіть ( "ПІБ");
ТЗ.Колонкі.Добавіть ( "Примітка"); // ПІБ і Примітка - рядки Далі ми заповнимо нашу програмну таблицю ТЗ потрібними даними. Отримуємо таблицю ТЗ, яка містить необхідні значення і готова до передачі в створений реквізит форми. Для Кожного Колонка З ТЗ.Колонкі Цикл

МассівРеквізітов.Добавіть (Новий РеквізітФорми (Колонка.Імя, Колонка.ТіпЗначенія, "ТабліцаРаспісанія"));
КонецЦікла;
ІзменітьРеквізіти (МассівРеквізітов);
ТабліцаПолейВибора \u003d Елементи.Добавіть ( "ТЗН", Тип ( "ТабліцаФорми"));
ТабліцаПолейВибора.ПутьКДанним \u003d "ТабліцаРаспісанія";
ТабліцаПолейВибора.Отображеніе \u003d ОтображеніеТабліци.Спісок;

Ось така нехитра комбінація і наша таблиця готова.

Для Кожного Колонка З ТЗ.Колонкі Цикл

НовийЕлемент \u003d Елементи.Добавіть (Колонка.Імя, Тип ( "ПолеФорми"), ТабліцаПолейВибора);
НовийЕлемент.Від \u003d ВідПоляФорми.ПолеВвода;
НовийЕлемент.ПутьКДанним \u003d "ТабліцаРаспісанія." + Колонка.Імя;
НовийЕлемент.Шіріна \u003d 10;
КонецЦікла;

Умовне оформлення, якщо нам потрібно ми також пишемо вручну, командне меню - вручну. Обробники таблиці також пишуться руками. Наприклад, щоб додати оброблювач події таблиці «Вибір»:

ТабліцаПолейВибора.УстановітьДействіе ( "Вибір", "ТЗНВибор");

Для обробки даної події в формі процедури прописується окрема процедура:

& НаКліенте
Процедура ТЗНВибор (ТЗ, ВибраннаяСтрока, Поле, СтандартнаяОбработка)
// команди обробника КонецПроцедури

Зверніть увагу, що обробники таблиці спрацьовують на клієнті і тому повинні мати команду покажчик компілятора

& НаКліенте

Ну, і останнє що хотілося додати, що після всіх цих дій обов'язково не забуваємо передати готову таблицю в реквізит форми:

ЗначеніеВРеквізітФорми (ТЗ, "ТабліцаРаспісанія");

Ось що маємо в результаті:


А ось обробка події "Вибір":



Післямова.

Сподіваюся, стаття надасть допомогу тим програмістам 1С, які починають створювати таблиці на формі програмним способом.

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

Пошук в таблиці значень 1С

Які методи існують і як шукати одночасно за кількома значеннями.

Для пошуку в таблиці значень існує два спеціальних методу:

1. Знайти

ТелевізорГорізонт \u003d Справочнікі.Номенклатура.НайтіПоНаіменованію ( "Телевізор Горизонт");
НайденнаяСтрока \u003d ТЗНоменклатури.Найті (ТелевізорГорізонт);
// також ми можемо вказати в яких колонках шукати, щоб прискорити пошук
НайденнаяСтрока \u003d ТЗНоменклатури.Найті (ТелевізорГорізонт, "Номенклатура");

Даний метод повертає першу знайдену рядок з потрібним значенням або Не визначено, якщо не знаходить. Тому його зручно використовувати для пошуку унікальних значень, тому що інакше доведеться при знаходженні значення видаляти його з таблиці, щоб знайти наступне.

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

2. НайтіСтрокі


СтруктураОтбора.Вставіть ( "Номенклатура", ТелевізорГорізонт); // спочатку вказуємо колонку де шукати, а потім що шукати.

Цей метод завжди повертає масив, але він може бути і порожньою, якщо нічого не знайдено. І ще цей метод також як і попередній повертає самі рядки таблиці значень, а не самі значення в окремому масиві. Тому змінивши значення в рядку масиву або як в попередньому методі у знайденої рядки, Ви поміняєте значення в оброблюваної таблиці значень.

Чим ще хороший цей метод, так це те, що він може шукати відразу за декількома колонкам таблиці значень одночасно:


СтруктураОтбора \u003d Новий Структура;
СтруктураОтбора.Вставіть ( "Номенклатура", ТелевізорГорізонт);
СтруктураОтбора.Вставіть ( "Кількість", 10);
НайденнийМассівСтрок \u003d ТЗНоменклатури.НайтіСтрокі (СтруктураОтбора);

Єдиний мінус, як видно, не можна застосовувати інші види порівняння крім як "одно"