Таблиця значень 1С 8.3 на прикладах
Таблиця значень 1С 8.3 дозволяє будувати динамічні набори значень. При цьому якихось жорстких обмежень на тип даних не накладається. Таблиця значень створюється у пам'яті і зберігається у базі даних, має безліч корисних можливостей і дуже швидко.
Властивістю таблиць значень є:
- індекси (колекція індексів таблиці значень)
- колонки (колекція колонок таблиці значень).
Елементом колекції є рядок таблиці значень. Але потрібно враховувати те що, що з таблицею значень можна працювати лише з сервері.
Робота з таблицею значень 1С 8.3 на прикладах
Створити нову таблицю значень
ТЗ = Новий ТаблицяЗначень;
Додати колонку до таблиці значень
ТЗ.Колонки.Додати("Автомобіль"); ТЗ.Колонки.Додати("Колір"); ТЗ.Колонки.Додати("Клас");
Додати колонку з описом типу
// Необхідно, щоб колонка таблиці значення була строго типізована ОписВага = Новий ОписТипів("Число", Новий КваліфікаториЧисла(10, 0)); ТЗ.Колонки.Додати("ВагАвтомобіля", ОписВага, "Вага Автомобіля");
Додати рядок до таблиці значень
НовийРядок = ТЗ.Додати(); НовийРядок.Автомобіль = "Mitsubishi"; НовийРядок.Колір = "Синій"; НовийРядок.Клас = "C клас"; НовийРядок.Вага = 1500; НовийРядок = ТЗ.Додати(); НовийРядок.Автомобіль = "KIA"; НовийРядок.Колір = "Зелений"; НовийРядок.Клас = "A клас"; НовийРядок.Вага = 1800; НовийРядок = ТЗ.Додати(); НовийРядок.Автомобіль = "BMW"; НовийРядок.Колір = "Зелений"; НовийРядок.Клас = "E клас"; НовийРядок.Вага = 2100;
Заповнити рядок значеннями
/ / Дані Для Заповнення - структура, будівництво іншої таблиці і т.п. //Метод зіставляє імена властивостей і заповнять за ними значення ЗаповнитиЗначенняВластивостей(ТЗ.Додати(), ДаніДляЗаповнення);
Вставити рядок
//Метод вставляє в таблицю значення новий рядок НовийРядок = ТЗ.Вставити(0); // Якщо потрібно змінити значення не всіх колонок, то можна використовувати Новий Рядок = ТЗ[0] НовийРядок.Автомобіль = "Mitsubishi"; НовийРядок.Колір = "Білий"; НовийРядок.Клас = "C клас"; НовийРядок.Вага = 1500;
Сортування
//Сортує таблицю значення за потрібними колонками та напрямки сортування
ТЗ.Сортувати («Колір Убувши, Вага Возр»);
Отримати значення
//Припустимо що у рядку №1 зберігається інформація про автомобіль БМВ. //А колір зберігатися в колонці №2 з ім'ям "Колір" //Завдання - отримати значення кольору з таблиці значень // //Якщо ми знаємо номер рядка та назву властивості: Колір БМВ = ТЗ[0].Колір; //Якщо ми значимо номер рядка та колонки Колір БМВ = ТЗ[0][1]; // * Відлік номера рядків і колонок починається з 0
Видалити рядок
//Видаляємо рядок №1 з таблиці значень ТЗ.Видалити(ТЗ[0]); //Видалити рядки за умовою можна за допомогою перебору (див. Обхід таблиці значень)
Знайти один рядок
//Дозволяє знайти один рядок у таблиці значень. //Шукати можна як по всіх колонках таблиці ШуканийРядок = ТЗ.Знайти("Синій"); //Так і з певної колонці: ШуканийРядок = ТЗ.Знайти("Синій", "Колір"); //*Метод знаходить перший рядок, що їх потрапив, якщо їх кілька //Якщо рядок не знайдено, то поверне "Невизначено"
Знайти кілька рядків
// Дозволяє знайти відразу кілька рядків у таблиці значень //Створюємо структуру для відбору ВідбірПоЗеленомуКвіту = Новий Структура(); ВідбірПоЗеленомуКвіту.Вставити("Колір","Зелений"); //Отримуємо масив рядків із зеленими машинами Масив зі рядками = ТЗ.ЗнайтиРядки(ВідбірПо ЗеленомуКвіту);
Згорнути таблицю значень
//Дозволяє "згорнути" таблицю значень: //1С залишає зазначені колонки в першому параметрі і підсумовує колонки з другого параметра ТЗ.Згорнути("Товар", "Вага");
Копіювати таблицю
//Дозволяє отримати копію таблиці значень. Нова ТЗ = ТЗ.Копіювати(); //Якщо потрібні лише деякі рядки - потрібно вставити масив таких рядків у перший параметр //Якщо потрібні лише деякі колонки - потрібно вставити їх імена через кому в другий параметр
Копіювати таблицю без даних
//Робить копію таблиці, але й без рядків. Тільки колонки Нова ТЗ = ТЗ.КопіюватиКолонки();
Дізнатися кількість рядків
Наша команда надає послуги з консультування, настроювання та впровадження 1С.
Зв'язатися з нами можна за телефоном +7 499 350 29 00.
Послуги та ціни можна побачити за посиланням.
Будемо раді допомогти Вам!
Очистити
//Очищає таблицю значень від рядків ТЗ.Очистити();
Обхід таблиці значення
Обхід колекції з вибором елемента здійснюється за допомогою циклу >, де оператор циклу Для призначений циклічного повторення операторів, що усередині конструкції, у разі таблиці значень. Також можна звертатися до елемента колекції за допомогою оператора [ ] ([аргумент]), де аргументом є індекс рядка. Нумерація індексів рядків починається із нуля [0].
Прямий обхід
Для кожного Стор З ТаблицяЗначень Цикл Повідомити(Стор.Номенклатура); КінецьЦикл;
Зворотний обхід таблиці (знизу догори)
Найчастіше застосовується видалення рядків у таблиці.
//Товари - таблиця значень, де необхідно видалити рядки з "Сума = 0" рах=0; Поки що рахТовари.Кількість() Цикл ПоточнийРядок=Товари[рах]; Якщо ПоточнийРядок.Сума=0 Тоді Товари.Видалити(ПоточнийРядок); рах=рах-1; КінецьЯкщо; рах=рах+1; КінецьЦикл;
Обхід колонок
Можна перерахувати всі колонки в таблиці значень 1с 8.3 за допомогою циклу >:
Для кожного Колонка З ТаблицяЗначень.Колонки Цикл Повідомити(Колонка.Ім'я); КінецьЦикл;
Перетворити структуру на таблицю значень
//Є структура: СтруктураЛогінПароль = Новий Структура; СтруктураЛогінПароль.Вставити("Логін", "root"); СтруктураЛогінПароль.Вставити("Пароль", "1s83.info"); //Створюємо таблицю значень: ТЗ = Новий ТаблицяЗначень; ТЗ.Колонки.Додати("Логін"); ТЗ.Колонки.Додати("Пароль"); //"Перетворюємо" структуру в таблицю значень: Для кожного ПоточнийЕлемент з СтруктураЛогінПароль Цикл НовСтр=ТЗ.Додати(); НовСтр.Логін = ПоточнийЕлемент.Ключ; НовСтр.Пароль = ПоточнийЕлемент.Значення; КінецьЦикл;
Як працювати з таблицею значень 1С 8.3, 1С 8.2 Таблиця значень 1С 8.3, 1С 8.2 Приклади для розробника 1С
Розглянемо основні прийоми роботи з таблицею значень з допомогою вбудованого мови 1С. Приклади будемо орієнтувати на потребу програміста 1С застосовувати ці способи та прийоми у версіях 1С 8.3 та 1С 8.2
Як відомо, таблиця значень є надзвичайно зручний інструмент для оперування з наборами даних.
Розглядатимемо починаючи з найпростішого, поступово ускладнюючи приклади роботи з таблицею значень.
1С Керовані Форми. Програмне створення таблиці значень та динамічного списку (Частина 2)
Перед прочитанням цієї статті рекомендується ознайомитись з першою частиною, в якій описано приклади програмного створення елементів, команд, реквізитів керованої форми, а також опис стандартних можливостей для роботи з ними.
У цій же частині буде розглянуто програмне створення динамічних списків, таблиць значень на формі, їх виведення в елементи форми та стандартні можливості для роботи.
Модифікувати форми рекомендується програмно для зручного оновлення конфігурацій та виключення конфліктів, а також для зручної підтримки коду. Зі статтями про механізми модифікації можна ознайомитись у розділі корисних посилань.
Також всі описані в поточному розділі процедури та функції знаходяться у зовнішній обробці УпрФорми.
Приклади програмного створення елементів, команд, реквізитів керованої форми, а також опис стандартних можливостей для роботи з ними можна буде переглянути у частині 1.
Для запуску обробки в режимі підприємства потрібна наявність об'єктів «Довідники.Номенклатура», підпорядкований йому «Довідники.ХарактеристикиНоменклатури» та «РегістриВідомостей.ЦіниНоменклатури».
Створення реквізиту типу таблиця значень та виведення на форму
&На Сервері Процедура пр_СтворитиТаблицюЗначень() МасивДоданихРеквізитів = Новий Масив; //Додати реквізит ТЗ МасивДодаютьсяРеквізитів.Додати(Новий РеквізитФорми("пр_ТаблицяЗначень", Новий ОписТипів("ТаблицяЗначень")))); //Додати кожну колонку як окремий реквізит МасивДодаютьсяРеквізитів.Додати(Новий РеквізитФорми("Період", Новий ОписТипів("Дата")).Новий КваліфікаториДати(ЧастиниДати.Дата)),"пр_ТаблицяЗначень" ,"Період")); МасивДодаютьсяРеквізитів.Додати(Новий РеквізитФорми("Номенклатура", Новий ОписТипів("ДовідникПосилання.Номенклатура"),"пр_ТаблицяЗначень" ,"Номенклатура")); МасивДодаютьсяРеквізитів.Додати(Новий РеквізитФорми("Характеристика", Новий ОписТипів("ДовідникПосилання.ХарактеристикиНоменклатури"),"пр_ТаблицяЗначень","Характеристика")); МасивДодаютьсяРеквізитів.Додати(Новий РеквізитФорми("ВідЦіни", Новий ОписТипів("ДовідникПосилання.ВідиЦен"),"пр_ТаблицяЗначень", "Вигляд ціни")); МасивДодаютьсяРеквізитів.Додати(Новий РеквізитФорми("Ціна", Новий ОписТипів("Число", ,,Новий КваліфікаториЧисла(15,2)), "пр_ТаблицяЗначень", "Ціна")); ЗмінитиРеквізити(МасивРеквізитів, що додаються); КінецьПроцедури &НаСервере Процедура пр_ВивестиТаблицюЗначень() пр_ВивестиТаблицюНаФорму(ЕтаФорма, "пр_ТаблицяЗначень", Елементи["пр_Сторінка2"], "Таблиця цін"); КінецьПроцедури &НаСервері Процедура пр_ВвестиТаблицюНаФорму(Форма, Ім'яТаблиці, Батько, ЗаголовокТаблиці) Експорт ТаблицяФорми = Форма.Елементи.Додати(Ім'яТаблиці, Тип("ТаблицяФорми"), Батько); ТаблицяФорми.ШляхКДанним = Ім'яТаблиці; ТаблицяФорми.Заголовок = ЗаголовокТаблиці; ТаблицяФорми.ПоложенняЗаголовка = ПоложенняЗаголовкаЕлементуФорми.Верх; ТаблицяФорми.ЗмінюватиПорядокСторок = Брехня; ТаблицяФорми.ЗмінюватиСкладСторок = Брехня; ТаблицяФорми.ДозволитиПочатокПеретягування = Брехня; СтруктураВластивостей = Новий Структура(); пр_ДодатиНовуКолонку(Форма, ТаблицяФорми, Ім'яТаблиці, "Період"); пр_ДодатиНовуКолонку(Форма, ТаблицяФорми, Ім'яТаблиці, "Номенклатура"); пр_ДодатиНовуКолонку(Форма, ТаблицяФорми, Ім'яТаблиці, "Характеристика"); пр_ДодатиНовуКолонку(Форма, ТаблицяФорми, Ім'яТаблиці, "ВідЦіни");пр_ДодатиНовуКолонку(Форма, ТаблицяФорми, Ім'яТаблиці, "Ціна", СтруктураВластивостей); КінецьПроцедури &НаСервері Процедура пр_ДодатиНовуКолонку(Форма, ТаблицяФорми, Ім'яТаблиці, Ім'яКолонки, СтруктураВластивостей = Невизначено) НоваКолонка = Форма.Елементи.Додати(Ім'яТаблиці+Ім'яКолонки, Тип НоваКолонка.Заголовок = Ім'яКолонки; НоваКолонка.ШляхКДаним = Ім'яТаблиці + "." + Ім'яКолонки; НоваКолонка.Вигляд = ВидПоляФорми.ПолеВводу; Якщо НЕ СтруктураВластивостей = Невизначено Тоді Для Кожного КлючЗначення З СтруктураВластивостей Цикл Спроба НоваКолонка[КлючЗначення.Ключ] = СтруктураВластивостей[КлючЗначення.Ключ]; Виняток КінецьСпроби; КінецьЦикл; КінецьЯкщо; КінецьПроцедури
Додавання умовного оформлення таблиці форми
Створюємо умовне оформлення для таблиці:
- якщо реквізит форми Використання (тип Булев) = Істина, тоді дозволяємо змінювати ціну в рядках таб. частини;
- якщо в рядку таб частини ціна не заповнена, то виділятиме фон осередку «Ціна» рожевим.
&На Сервері Процедура пр_ДодатиУОТаблиціФорми() //умовне оформлення форми //якщо реквізит Використання = Істина, то дозволяти змінювати ціну ЕлементОформлення = УмовнеОформлення.Елементи.Додати(); // Створюємо умову відбору у створеній групі: ЕлементВідбору = ЕлементОформлення. ЕлементОтбора.ЛевоеЗначение = Новий ПолеКомпонівкиДаних("пр_Выкористання"); // ім'я поля ЕлементОтбора.Вид Порівняння = ВидПорівнянняКомпонівкиДаних.Рівне; // або задаємо свій ЕлементОтбора.ПравоеЗначение = Брехня; ЕлементОтбору.Використання = Істина; // Установка значення елемента УО ЕлементОформлення.Оформлення.ВстановитиЗначенняПараметра("Доступність", Брехня); ЕлементОформлення. Використання = Істина; ЕлементОформлення.Оформлення.УстановитиЗначенняПараметра("КольорТексту", WebКольори.ЧервоноФіолетовий); ЕлементОформлення. Використання = Істина; // Створюємо поля оформлення ПолеОформлення = ЕлементОформлення.Поля.Елементи.Додати(); //щоб виділити комірку, потрібно вказати ім'я відповідного елемента на формі ПолеОформлення.Поле = Новий ПолеКомпонівкиДаних("пр_ТаблицяЗначеньЦіна"); ПолеОформлення.Використання = Істина; // умовне оформлення форми // якщо в рядку ціна = 0, тоді рядок зафарбовуємо рожевим елементом оформлення = умовне оформлення. елементи. Додати (); // Створюємо умову відбору у створеній групі: ЕлементВідбору = ЕлементОформлення. ЕлементОтбору.ЛівеЗначення = Новий ПолеКомпонівкиДаних("пр_ТаблицяЗначень.Ціна"); // ім'я поля ЕлементОтбору.ВидПорівняння = ВидПорівнянняКомпонівкиДаних.НеЗаполнено; // або задаємо свій ЕлементОтбора.Використання = Істина; // Установка значення елемента УОЕлементОформлення.Оформлення.УстановитиЗначенняПараметра("КолірФона", WebКольори.Рожевий); ЕлементОформлення. Використання = Істина; // Створюємо поля оформлення //щоб виділити весь рядок, потрібно додати всі осередки рядка, поки ж виділимо один осередок "Ціна" ПолеОформлення = ЕлементОформлення.Поля.Елементи.Додати(); ПолеОформлення.Поле = Новий ПолеКомпонівкиДаних("пр_ТаблицяЗначеньЦіна"); ПолеОформлення.Використання = Істина; КінецьПроцедури
У процедуру команди додамо виклик серверної процедури для заповнення таблиці цін залежно від обраної номенклатури та характеристики:
&НаКлієнті Процедура пр_Команда1(Команда) пр_Команда1НаСервері(); КінецьПроцедури &НаСервері Процедура пр_Команда1НаСервері() ЦяФорма["пр_ТаблицяЗначень"].Очистити(); Запит = Новий Запит; Запит.ВстановитиПараметр("Номенклатура", ЕтаФорма.пр_Номенклатура); Запит.ВстановитиПараметр("Характеристика", ЭтаФорма.пр_Характеристика); Запит.Текст = "ВИБРАТИ | ЦіниНоменклатуриСрезОстанніх.Період ЯК Період, | ЦіниНоменклатуриСрезОстанніх.Номенклатура ЯК Номенклатура, | ЦіниНоменклатуриСрезОстанних.Ціна ЯК Ціна |З | Вибірка = Запит.Виконати().Вибрати(); Поки Вибірка.Наступний() Цикл Стор = ЦяФорма["пр_ТаблицяЗначень"].Додати(); ЗаповнитиЗначенняВластивостей(Стор, Вибірка); КінецьЦикл; КінецьПроцедури
Додаємо в процедуру При створенні на сервері процедури:
&НаСервере Процедура пр_ПриСтворенніНаСервері(Відмова, СтандартнаОбробка) //встановимо заголовок форми ЕтаФорма.Заголовок = "Шаблон для програмної роботи з реквізитами, командами та елементами форми"; ЦяФорма.АвтоЗаголовок = Брехня; пр_СтворитиГрупи(); пр_Створити Нову Команду (); пр_Створити Декорацію (); пр_СтворитиРеквізити(); пр_ВидалитиРеквізити(); пр_ВивестиРеквізитиНаФорму(); пр_Створити ТаблицюЗначень(); пр_ВивестиТаблицюЗначень(); пр_ДодатиУОТаблиціФорми(); КінецьПроцедури
Заповнюємо реквізити Номенклатура, Характеристика та заповнюємо ціни у таблиці значень.
Створення реквізиту типу динамічний список із заданими налаштуваннями та виведення на форму
На сторінці 3 створимо динамічний список із виведенням усіх цін вибраної номенклатури та характеристики.
Умовне оформлення динамічного списку 1С програмно
Додамо Умовне Оформлення динамічного списку, відбір та сортування програмно.
&На сервері Процедура пр_Створити Динамічний Список () // Створити дин. список з довільним запитом ТекстЗапроса = "ВИБРАТИ | ЦіниНоменклатури.Період ЯК Період, | ЦіниНоменклатури.Номенклатура ЯК Номенклатура, | ЦіниНоменклатури. Характеристика ЯК Характеристика, | .Реєстратор ЯК Реєстратор | З |РегістрЗведений.ЦіниНоменклатури ЯК ЦіниНоменклатури |ДЕ |Номенклатури. МасивДодаютьсяРеквізитів = Новий Масив; // Створити реквізит дин. списку МасивДодаютьсяРеквізитів.Додати(Новий РеквізитФорми("пр_ДинамічнийСписок", Новий ОписТипів("ДинамічнийСписок")).Брехня)); ЗмінитиРеквізити(МасивРеквізитів, що додаються); РеквізитДинамічнийСписок = ЦяФорма["пр_ДинамічнийСписок"]; //якщо запит не довільний, тоді використовуємо наступний код: //РеквізитДинамічнийСписок.ДовільнийЗапит = Брехня; // Реквізит Динамічний Список. Основна Таблиця = "Регістр Відомостей. Ціни Номенклатури"; Реквізит Динамічний Список. Довільний Запит = Істина; Реквізит Динамічний Список. Основна Таблиця = "Регістр Відомостей. Ціни Номенклатури"; РеквізитДинамічнийСписок.ТекстЗапроса = ТекстЗапроса; РеквізитДинамічнийСписок.Параметры.УстановитьЗначенняПараметра("Номенклатура", ЭтаФорма["пр_Номенклатура"]); РеквізитДинамічнийСписок.Параметры.УстановитьЗначенняПараметра("Характеристика", ЭтаФорма["пр_Характеристика"]); //Не виводитимемо цю колонку в списку, але потрібен до неї доступ завжди РеквізитДинамічнийСписок.ВстановитиОбов'язковеВикористання("Реєстратор", Істина); КінецьПроцедури &НаСервері Процедура пр_ДодатиВідбірДинамічнийСписок() ЕлементВідбору = ЦяФорма["пр_ДинамічнийСписок"]. ЕлементОтбора.ЛевоеЗначение = Новий ПолеКомпонівкиДаних("Період"); ЕлементОтбора.Вид Порівняння = ВидПорівнянняКомпонівкиДаних.Більше; // більше чи менше тощо.ЕлементОтбору.Використання = Істина; ЕлементОтбору.ПравоеЗначення = Дата ('2015.01.01 00:00:00'); КінецьПроцедури &На Сервері Процедура пр_ДодатиУОДинамічнийСписок() //якщо ціна від 4000 до 5000, то виділяти зеленим ЕлементОформлення = ЦяФорма["пр_ДинамічнийСписок"].УмовнеОформлення.Елементи.Додати(); // Спочатку додамо групу І Група Оформлення = Елемент Оформлення. Відбір. Елементи. Група Оформлення. Використання = Істина; ГрупаОформлення.ТипГрупи = ТипГрупиЕлементівВідборуКомпонівкиДаних.ГрупаІ; // Створюємо умову відбору у створеній групі: ціна > 4000 ЕлементВідбору = Група Оформлення. Елементи. ЕлементОтбора.ЛевоеЗначение = Новий ПолеКомпонівкиДаних( "Ціна"); // ім'я поля ЕлементОтбору.Вид Порівняння = ВидПорівнянняКомпонівкиДаних.Більше; // або задаємо свій ЕлементОтбора.ПравоеЗначение = 4000; //правим значенням може виступати ПолеКомпонуванняДаних форми або списку //ЕлементОтбору.ПравоеЗначение = Новий ПолеКомпонівкиДаних(Ім'яПоля); ЕлементОтбору.Використання = Істина; //Другий елемент відбору: ціна < 5000 ЕлементОтбору = ГрупаОформлення. ЕлементОтбора.ЛевоеЗначение = Новий ПолеКомпонівкиДаних("Ціна"); // ім'я поля ЕлементОтбору.Вид Порівняння = ВидПорівнянняКомпонівкиДаних.Менше; // або задаємо свій ЕлементОтбора.ПравоеЗначение = 5000; ЕлементОтбору.Використання = Істина; // Установка значення елемента УО Елемент Оформлення. Оформлення. // Можливе звернення як у індексу і установка через метод //Элемент =ЕлементОформлення.Оформлення.Елементи [0]; //Елемент.Значення = Колір; ЕлементОформлення. Використання = Істина; // Створюємо поля оформлення ПолеОформлення = ЕлементОформлення.Поля.Елементи.Додати(); //щоб виділити комірку, потрібно вказати її ім'я поля ПолеОформлення.Поле = Новий ПолеКомпонівкиДаних("Період"); ПолеОформлення = ЕлементОформлення.Поля.Елементи.Додати(); ПолеОформлення.Поле = Новий ПолеКомпонівкиДаних("Номенклатура"); ПолеОформлення = ЕлементОформлення.Поля.Елементи.Додати(); ПолеОформлення.Поле = Новий ПолеКомпонівкиДаних("Характеристика"); ПолеОформлення = ЕлементОформлення.Поля.Елементи.Додати(); ПолеОформлення.Поле = Новий ПолеКомпонівкиДаних("ВідЦіни"); ПолеОформлення = ЕлементОформлення.Поля.Елементи.Додати(); ПолеОформлення.Поле = Новий ПолеКомпонівкиДаних("Ціна"); ПолеОформлення.Використання = Істина; КінецьПроцедури &НаСервері Процедура пр_ДодатиСортуванняДинамічнийСписок() ЕлементСортування = ЦяФорма["пр_ДинамічнийСписок"].Порядок.Елементи.Додати(Тип("ЕлементПорядкуКомпонуванняДаних")); ЕлементСортування.Поле = Новий ПолеКомпонівкиДаних("Період"); ЕлементСортування.ТипУпорядкування = НапрямокСортуванняКомпонуванняДаних.Зменшений; ЕлементСортування. Використання = Істина; КінецьПроцедури
Вивести динамічний список до елементів керованої форми 1С
Для виведення дин. список скористаємося процедурами, які використовували при виведенні таблиці значень, так як це один тип - Дані Форми Колекція.
&НаСервері Процедура пр_ВивестиДинамічнийСписок() пр_ВивестиДинамічнийСписокНаФорму(ЕтаФорма, "пр_ДинамічнийСписок", Елементи["пр_Сторінка3"], "Таблиця цін"); КінецьПроцедури Процедура пр_ВивестиДинамічнийСписокНаФорму(Форма, Ім'яТаблиці, Батько, ЗаголовокТаблиці) Експорт ТаблицяФорми = Форма.Елементи.Додати(Ім'яТаблиці, Тип("ТаблицяФорми"), Батько); ТаблицяФорми.ШляхКДанним = Ім'яТаблиці; ТаблицяФорми.Заголовок = ЗаголовокТаблиці; ТаблицяФорми.ПоложенняЗаголовка = ПоложенняЗаголовкаЕлементуФорми.Верх; СтруктураВластивостей = Новий Структура("Вид", ВидПоляФорми.ПолеНаписи); //якщо потрібні якісь специфічні властивості колонки, то потрібно їх додати до структури властивостей пр_ДобавітьНовуКолонку(Форма, ТаблицяФорми, Ім'яТаблиці, "Період", СтруктураВластивостей); пр_ДодатиНовуКолонку(Форма, ТаблицяФорми, Ім'яТаблиці, "Номенклатура", СтруктураВластивостей); пр_ДодатиНовуКолонку(Форма, ТаблицяФорми, Ім'яТаблиці, "Характеристика", СтруктураВластивостей); пр_ДодатиНовуКолонку(Форма, ТаблицяФорми, Ім'яТаблиці, "ВідЦіни", СтруктураВластивостей); пр_ДодатиНовуКолонку(Форма, ТаблицяФорми, Ім'яТаблиці, "Ціна", СтруктураВластивостей); КінецьПроцедури
Оновити динамічний список 1С програмно
Розглянемо як оновити параметри динамічного списку 1С програмно. Якщо у запиті дин. списку використовуються параметри, їх необхідно оновлювати при зміні відповідних реквізитів.
&На Сервері Процедура пр_ОновитиПараметрДінСписків(Ім'яЕлементу, ТекПосилання) РеквізитДинамічнийСписок = ЦяФорма["пр_ДинамічнийСписок"]; РеквізитДинамічнийСписок.Параметри.ВстановитиЗначенняПараметра(ІмяЕлементу, ТекПосилання); КінецьПроцедури &НаКлієнті Процедура пр_НоменклатураПриЗміні(Елемент) пр_ОновитиПараметрДінСписків("Номенклатура", ЦяФорма["пр_Номенклатура"]); КінецьПроцедури &НаКлієнті Процедура пр_ХарактеристикаПриЗміні(Елемент) пр_ОновитиПараметрДінСписків("Характеристика", ЦяФорма["пр_Характеристика"]); КінецьПроцедури
Додаємо в процедуру При створенні на сервері процедури:
&НаСервере Процедура пр_ПриСтворенніНаСервері(Відмова, СтандартнаОбробка) //встановимо заголовок форми ЕтаФорма.Заголовок = "Шаблон для програмної роботи з реквізитами, командами та елементами форми"; ЦяФорма.АвтоЗаголовок = Брехня; пр_СтворитиГрупи(); пр_Створити Нову Команду (); пр_Створити Декорацію (); пр_СтворитиРеквізити(); пр_ВидалитиРеквізити(); пр_ВивестиРеквізитиНаФорму(); пр_Створити Динамічний Список (); пр_ДодатиВідбірДинамічнийСписок(); пр_ДодатиСортуванняДинамічнийСписок(); пр_ДодатиУОДинамічнийСписок(); пр_Вивести Динамічний Список (); КінецьПроцедури
Заповнюємо реквізити Номенклатура, Характеристика та заповнюємо ціни у таблиці значень.
Вміст регістру відомостей ЦіниНоменклатури:
Динамічний список на формі:
