Контакти

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

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

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

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

1. Знайти

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

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

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

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


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

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

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


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

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

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

І тільки таблиця значень:

  • Здатна безпосередньо заповнювати табличні частини документів, довідників і обробок;
  • Є результатом виконання запиту;
  • Легко читається і наочно формується;
  • і багато багато іншого.

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

З чого складаються таблиці значень

Всі початківці розробники чітко знають, що у таблиці значень є:

  1. Колонки, що описують структуру таблиці;
  2. Рядки, що наповнюють таблицю інформацією.

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

Але про все по порядку.

На Рис.1 показано, як виглядає таблиця значень, виведена на друк найпростішої процедурою, яка показує їх структуру та наповнення.

Як видно з прикладу, колонок у таблиці 5, за винятком номера рядка за порядком.

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

Якщо в подальшому планується використання таблиці значень в якості джерела даних для запиту, вказівка \u200b\u200bтипу даних необхідно (Рис.2).

Додавання рядка відбувається методом Додати (), з присвоєнням імені нового рядка.

Індекси таблиці значень

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

  • Знайти (повертає перший знайдений елемент по певним параметрам, В іншому випадку значення Не визначено);
  • НайтіСтрокі (повертає масив рядків таблиці, які відповідають певним умовам).

Пошук по великих таблицях сильно «підвішує» систему і може бути тривалий за часом. Саме в цих випадках і треба використовувати індекси.

У першому випадку пошук відбувається по одному значенню і одній колонці, саме її і треба передавати в індекси (Рис.3)

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

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

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

Тут на допомогу знову приходить таблиця значень. У ТЗ, скориставшись методом табличних частин Вивантажити () можна:

  1. Повністю повторити структуру таблиці документа, зі збереженням всієї можливої \u200b\u200bінформації;
  2. Визначити тільки ті колонки і рядки, які необхідні для подальшої роботи, і вивести їх.

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

Слід зазначити, що зіставлення колонок табличній частині і ТЗ відбувається за іменами.

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

рис.4

При цьому будуть збережені колонки таблиці, а інформація і рядки з дубліката будуть видалені.

Таблиця значень і запит

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

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

рис.5

Замінивши «*» на найменування колонок (рядок виду ТЗ.Номенклатура) можна зменшити обсяг вивантажується інформації.

Помилка при виконанні запиту (Рис.5) «Тип не може бути оброблений в запиті», говорить про те, що розробник забув виконати частину коду Рис.2 і не типізував колонки.

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

При переборі рядків таблиці значень методом містить лічильник (Рис. 6), важливо пам'ятати, що початкове значення індексу рядків - 0, а кінцеве значення ітератора повинно бути на 1 менше кількості рядків в таблиці. В іншому випадку є 100% ймовірність виникнення помилки «Значення індексу виходить за межі діапазону»

рис.6

Взагалі ж, перебір рядків ТЗ краще здійснювати через конструкцію «Для каждго ... з», визначивши ім'я ітератора.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

& НаКліенте

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

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

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


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



Післямова.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



Сподобалася стаття? поділіться їй