Додати рядок табличної частини 1с 8.3. "Гарячі" клавіші: спільні дії

Для попереднього прикладу можна додати рядки коду:

ЕлементиФорми.ТабличнеПоле1.ДодатиРядок(); стор = ЕлементиФорми.ТаблічнеПоле1.ПоточнаРядок; стор. Перша = 3; стор.Друга = "Борошно"; стор.Кількість = 350;

Як визначити число рядків у таблиці значень 1с 8?

кількість = табл.Кількість (); Повідомити("Кількість рядків у таблиці значень табл = " + кільк Строк);

Результат:

Кількість рядків у таблиці значень табл = 3

Як видалити рядок у таблиці значень 1с 8?

рядокТабл = табл; табл.Видалити (рядок Табл);

Як згорнути таблицю значень 1с 8?

Звертаємо:

табл.Згорнути ("Друга", "Кількість");

Отримуємо після згортки:

Як відсортувати таблицю значень 1с 8?

Сортуємо за другою та третьою колонками:

табл.Сортувати("Друга, Кількість");

Як у табличному полі позиціонуватись на рядку в 1с 8?

На другому стоку:

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

Друкована форма 1с 8

Спочатку робимо макет (ім'я області: виділяємо потрібні рядки макета, у властивостях, у полі Ім'я, вводимо ім'я області), потім виводимо його в табличний документ:

Процедура КоманднаПанель1Друк(Кнопка) перем тд, рс, рс1, макет, код, найм, номен; код = 0; макет = ОтриматиМакет("Товари"); шапка = макет.Отримати Область("Шапка"); шапка.Параметри.дата = ПоточнаДата(); рс = макет.Отримати Область("РС"); рс1 = макет.Отримати Область("РС1"); тд = Новий Табличний Документ; тд. Вивести(шапка); номен = Довідники. Номенклатура; вибірка = номен.ВибратиІєрархічно(); поки вибірка.Наступний() цикл код = код + 1; якщо вибірка.ЦеГрупа = Істина тоді рс1.Параметри.код = код; рс1.Параметры.найм = выборка.Наименование; тд. Вивести(рс1); інакше рс.Параметри.код = код; рс.Параметры.найм = выборка.Наименование; тд. Вивести(рс); кінецьЯкщо; кінецьЦикл; тд.ТількиПерегляд = Істина; тд.Показати("Довідник ""Номенклатура"")); КінецьПроцедури

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

У 1С можливості роботи з рядками запрограмовані у самій платформі. Сьогодні ми розглянемо особливості роботи з рядками 1С у програмах вбудованою мовою 1С.

Значення рядка 1С

1. Почнемо з найпростішого. Створення змінної та надання їй рядкового константного значення виглядає в 1С так:

Змінна = "Привіт, мир!";

Якщо потрібно в константному рядковому значенні 1С вказати символ лапки, його потрібно завдоїти «»

Змінна = "Привіт, "світ"!";

2. Перенесення рядка 1С можна вказати одразу двома способами. Перший – із використанням символу |

Змінна = "Привіт,
| мир! ";

Другий – із використанням системного перерахування Символи. Воно дозволяє додати перенесення рядка 1С, так і інші недруковані символи, наприклад TAB.

Змінна = "Привіт" + Символи. ПС + "світ!";

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

Список мов знаходиться у вікні конфігурації у гілці Загальні/Мови. Кожна мова має короткий ідентифікатор, такий як ruабо eng.

Зрозуміло, що при програмуванні такої конфігурації рядка 1С теж можуть бути багатомовними. Для цього є можливість створити такий рядок 1С, вказавши через; варіанти щодо ідентифікатора мови:

Змінна = "ru=""Привіт, мир!"; en=""Hello, world! """;

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

// Правильно для двомовних конфігурацій
Повідомити(НСтр(Змінна));

Реквізит із типом рядка 1С

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

Якщо Ви вкажете тип реквізиту – рядок 1С, додатково необхідно вказати параметри.

Рядки 1С бувають необмеженої довжини (вказується як довжина = 0) та обмеженої довжини, із зазначенням точної кількості символів. Рядки 1С необмеженої довжини зберігаються в окремій таблиці SQL, тому їх використання є менш продуктивним, ніж обмеженою.

Саме тому використання рядків 1С необмеженої довжини має свої обмеження – не скрізь їх можна використовувати. Наприклад, не можна як номер документа, код довідника, вимірювання.

Робота з рядками 1С

Для роботи з рядками є кілька вбудованих функцій платформи 1С.

  • СокрЛП("Неймовірно, але факт!")
    Забирає з рядка 1С зайві прогалини. Також можна використовувати перетворення будь-яких типів до рядку 1С (наприклад, числа).
  • Змінна = "Вася" + СокрЛП ("плюс") + "Оля"; //буде "Вася плюс Оля"
    Приклад підсумовування кількох рядкових значень 1С. В результаті вийде один рядок 1С.
  • Змінна = Лев ( "Музика", 2); //буде "Му"
    Змінна = Середовище ( "Музика", 2, 2); //буде "зи"
    Змінна = Прав("Музика", 2); //буде "ка"
    Різні варіанти отримання підрядка з рядка 1С.
  • Змінна = Знайти ( "Музика", "Зи"); //буде 3
    Пошук підрядки у рядку 1С, починаючи із символу 1.
  • Змінна = СтрДліна ("Музика"); //буде 6
    Повертає кількість символів у рядку 1С.
  • Повідомити("Привіт") //у вікні повідомлень внизу вікна 1С
    Попередження ("Привіт") // діалогове вікно, що спливає.
    Стан("Привіт") //У рядку відображення стану внизу зліва
    .

Приведення об'єктів до рядка 1С

Як відомо, найпопулярніший формат для обміну структурованою інформацією в даний час – це XML. Навіть остання версія MS Office Word та Excel зберігають файли в цьому форматі (docx та xlsx відповідно, поміняйте розширення на zip, відкрийте в архіваторі).

Платформа 1С обмінюватись даними надає кілька варіантів, основний у тому числі – також XML.

1. Найпростіший метод - використання функції СокрЛП() або Рядок(). У тексті запиту можна використовувати функцію ПРЕДСТАВЛЕННЯ(). Результат їхньої дії той самий – вони генерують рядкове представлення будь-якого об'єкта 1С для користувача.

Для довідника за умовчанням це буде його найменування. Для документа – ім'я документа, номер та дата.

2. Будь-який об'єкт 1С (з обмеженнями) може бути перетворений на XML і назад. Процес перетворення називається серіалізація.

РядокВиглядXml = XMLРядок(Значення); //отримуємо XML зі значення 1С
Значення1С = XMLЗначення(Тип("ДовідникПосилання.Номенклатура"),РядокВидаXml); //отримуємо значення 1С з рядка XML, необхідно вказати тип 1С, який має бути отриманий

3. Існує власний спосіб платформи 1С перетворити на рядок будь-який об'єкт 1С. Він мігрував із версії 1С 7.7. Цей формат не розуміють інші програми, але розуміє інший 1С, що дозволяє легко використовувати його для обміну між базами 1С.

Рядок = Значення ВСрядку Внутр(Значення1С); //отримуємо рядок 1С значення 1С
ЗначенняФайл("C:\MyFile.txt", Значення1С); //інший варіант, отримуємо файл із збереженим рядком із значення 1С
Значення1С = ЗначенняІзрядуВнутрішньо(Рядок); //назад з рядка 1С
Значення1С = ЗначенняІзФайлу("C:\MyFile.txt"); //назад з файлу

Редагування рядків 1С на формі

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

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

Змінна = "";
Рядок = ВвестиЗначення(Змінна, "Введіть ПІБ");

2. Для виведення реквізиту об'єкта 1С (довідника/документа) або реквізиту форми (див.) найчастіше використовують поле введення. Це найпоширеніший у 1С інструмент для роботи користувача з редагуванням полів.

3. Можливості поля введення можна розширити (див. властивості поля введення, правою кнопкою на ньому, докладніше):

  • Галочка Багаторядковий режим редагування
  • Галочка Розширене редагування (доступна, якщо встановлена ​​попередня галочка)
  • Галочка Режим пароля (див. ).

4. Якщо всіх можливостей поля введення Вам не вистачає, є вбудований редактор. Для додавання на форму потрібно в меню Форма/Вставити елемент керування додати Поле текстового документа. У його властивостях можна вказати режим роботи – властивість Розширення.

Поле текстового документа не можна безпосередньо зв'язати з даними. Необхідно в обробнику події Привідкритті() форми (див. ) прописати функцію:

ЕлементиФорми.ІмяЕлементуПолеТекстовогоДокумента.УстановитиТекст(ЗначенняРядок); //тут ЗначенняРядок - це текст отриманий, наприклад з реквізиту

А в обробника збереження – наприклад, у кнопці Зберегти – додати збереження:

ЗначенняРядок = ЕлементиФорми.ІмяЕлементуПолеТекстовогоДокумента.ОтриматиТекст(); //ЗначенняРядок тут - це реквізит, куди ми зберігаємо значення

5. У 1С версії 8.2.11 у керованих формах з'явилася нова можливість подання рядка 1С – поле Форматований документ.


Аналогічно поля текстового документа, необхідно встановлювати при відкритті і записувати при збереженні текст самостійно за допомогою програми.

  • До об'єкта 1С, форму якого ми робимо (довідник, документ, обробка тощо) – додайте реквізит із типом СховищеЗначення
  • У функції Причитанні на сервері () встановимо текст з реквізиту

    //Тут Реквізит - це доданий реквізит об'єкта 1С
    //тут ФорматованийДокумент – це ім'я поля на формі для редагування
    &На сервері

    ФорматованийДокумент = ПоточнийОб'єкт.Реквізит.Отримати();
    КінецьПроцедури

  • У функції ПередЗаписомНа Сервері() або по кнопці запишемо текст з поля

    &На сервері
    Процедура При читанні на сервері (Поточний об'єкт)
    ПоточнийОб'єкт.Реквізит = Новий СховищеЗначення(ФорматованийДокумент);
    КінецьПроцедури

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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