A1sCode библиотека 1С
📊

A1sVT — Работа с таблицами значений

Современный функциональный подход к работе с таблицами в 1С.
Сократите код на 80-95% с читаемым и поддерживаемым API.

📥 Скачать A1sVT.bsl 📄 README 💡 Примеры оптимизации

Код-дуэль: 🦊 Лис Тинг vs 🐱 Кот Айван

🦊

Лис Тинг — Типовой подход

Функция ТаблицаТоваров()
    Таблица = Новый ТаблицаЗначений;
    Таблица.Колонки.Добавить("Код", 
        Новый ОписаниеТипов("Строка"));
    Таблица.Колонки.Добавить("Наименование", 
        Новый ОписаниеТипов("Строка"));
    Таблица.Колонки.Добавить("Цена", 
        Новый ОписаниеТипов("Число"));
    Таблица.Колонки.Добавить("Активен", 
        Новый ОписаниеТипов("Булево"));
    
    НоваяСтрока = Таблица.Добавить();
    НоваяСтрока.Код = "001";
    НоваяСтрока.Наименование = "Молоко";
    НоваяСтрока.Цена = 75.50;
    НоваяСтрока.Активен = Истина;
    
    НоваяСтрока = Таблица.Добавить();
    НоваяСтрока.Код = "002";
    НоваяСтрока.Наименование = "Хлеб";
    НоваяСтрока.Цена = 45.00;
    НоваяСтрока.Активен = Истина;
    
    Возврат Таблица;
КонецФункции

// 21 строка кода
🐱

Кот Айван — A1sVT

Функция ТаблицаТоваров()
    Возврат A1sVT.Of(
        "Код,Наименование,Цена:Число,Активен:Булево",
        A1sAR.Of(
            A1sDS.Of("Код", "001", "Наименование", "Молоко", 
                     "Цена", 75.50, "Активен", Истина),
            A1sDS.Of("Код", "002", "Наименование", "Хлеб", 
                     "Цена", 45.00, "Активен", Истина)
        )
    );
КонецФункции

// 9 строк кода (-57%)
Результат: Код стал короче на 57%, читаемость улучшилась, поддержка упростилась!

Возможности модуля A1sVT

Создание таблиц

Создавайте таблицы декларативно с типами и данными

// Только колонки
A1sVT.Of("Код,Наименование");

// С типами
A1sVT.Of("Код:Строка,Цена:Число");

// С данными сразу
A1sVT.Of("Код,Имя", 
  A1sAR.Of(
    A1sDS.Of("Код", "1", "Имя", "Товар")
  )
);
🔍

Поиск и фильтрация

Находите нужные данные быстро и удобно

// Найти первую строку
строка = A1sVT.FindRow(таблица, 
    A1sDS.Of("Код", "001"));

// Отфильтровать все строки
активные = A1sVT.Filter(таблица, 
    A1sDS.Of("Активен", Истина));
📝

Добавление строк

Компактное добавление одной или нескольких строк

// Одна строка
A1sVT.AddRow(таблица, 
  A1sDS.Of("Код", "003", "Имя", "Масло"));

// Несколько строк
A1sVT.AddRows(таблица, 
  A1sAR.Of(структура1, структура2));
🔄

Преобразования

Конвертируйте таблицы в массивы и извлекайте колонки

// В массив структур
массив = A1sVT.ToArray(таблица);

// Выгрузить колонку
коды = A1sVT.Column(таблица, "Код");

// Только выбранные колонки
A1sVT.ToArray(таблица, "Код,Имя");
📈

Группировка и сортировка

Агрегируйте и упорядочивайте данные

// Группировка с суммированием
итоги = A1sVT.GroupBy(продажи, 
    "Товар", "Количество,Сумма");

// Сортировка
A1sVT.Sort(таблица, "Цена Убыв");
🛠️

Утилиты

Полезные операции для работы с таблицами

// Подсчет строк
кол = A1sVT.Count(таблица);

// Копирование
копия = A1sVT.Copy(таблица);

// Индекс для быстрого поиска
A1sVT.CreateIndex(таблица, "Код");

Реальный пример: Таблица ЕГАИС

Задача: Создать таблицу соответствия документов ЕГАИС с ~80 записями. Было 550 строк кода!

🦊 Было (550 строк):

Функция ТаблицаСоответствия()
    Таблица = Новый ТаблицаЗначений;
    Таблица.Колонки.Добавить("ТипЕГАИС",
        Новый ОписаниеТипов("Строка"));
    Таблица.Колонки.Добавить("ВидДокумента",
        Новый ОписаниеТипов("ПеречислениеСсылка..."));
    Таблица.Колонки.Добавить("ФорматОбмена",
        Новый ОписаниеТипов("ПеречислениеСсылка..."));
    
    НоваяСтрока = Таблица.Добавить();
    НоваяСтрока.ТипЕГАИС = "WayBillAct";
    НоваяСтрока.ФорматОбмена = 
        Перечисления.ФорматыОбменаЕГАИС.V1;
    НоваяСтрока.ВидДокумента = АктТТН;
    
    НоваяСтрока = Таблица.Добавить();
    НоваяСтрока.ТипЕГАИС = "WayBillAct";
    НоваяСтрока.ФорматОбмена = 
        Перечисления.ФорматыОбменаЕГАИС.V1;
    НоваяСтрока.ВидДокумента = АктТТНОтказ;
    
    // ... ещё 76 аналогичных блоков (4-5 строк каждый)
    
    Возврат Таблица;
КонецФункции

🐱 Стало (30 строк, -95%):

Функция ТаблицаСоответствия()
    Возврат A1sVT.Of(
        "ТипЕГАИС,ВидДокумента,ФорматОбмена",
        A1sAR.Of(
            A1sDS.Of("ТипЕГАИС", "WayBillAct",
                "ФорматОбмена", Перечисления...V1,
                "ВидДокумента", АктТТН),
            A1sDS.Of("ТипЕГАИС", "WayBillAct",
                "ФорматОбмена", Перечисления...V1,
                "ВидДокумента", АктТТНОтказ),
            A1sDS.Of("ТипЕГАИС", "WayBillAct_v2",
                "ФорматОбмена", Перечисления...V2,
                "ВидДокумента", АктТТН),
            // ... ещё 77 записей в таком же стиле
        )
    );
КонецФункции

// Или ещё компактнее с вспомогательной функцией!

📊 Результаты оптимизации:

  • ✓ Код: -95% (550 → 30 строк)
  • ✓ Читаемость: Декларативный стиль, легко понять структуру
  • ✓ Поддержка: Добавить новую запись = одна строка
  • ✓ Ошибки: Меньше копипаста = меньше опечаток

Быстрый справочник API

Создание

Of()Создать таблицу с колонками и данными
WithColumns()Создать пустую таблицу

Добавление

AddRow()Добавить одну строку
AddRows()Добавить несколько строк

Поиск

FindRow()Найти первую строку
Filter()Отфильтровать все строки

Преобразования

ToArray()В массив структур
Column()Значения колонки
Copy()Копировать таблицу

Агрегация

Sort()Сортировать
GroupBy()Группировать и суммировать

Утилиты

Count()Количество строк
IsEmpty()Проверка пустоты
Clear()Очистить строки
HasColumn()Есть ли колонка
DeleteRows()Удалить строки
CreateIndex()Создать индекс

Интеграция с модулями A1sCode

📀

A1sDS — Структуры

Используйте A1sDS.Of() для создания данных строк:

// Создание структур для заполнения
данные = A1sDS.Of(
    "Товар", "Молоко",
    "Цена", 75.50,
    "Количество", 10
);

A1sVT.AddRow(таблица, данные);
📚

A1sAR — Массивы

Используйте A1sAR.Of() для массивов строк:

// Массив строк для добавления
строки = A1sAR.Of(
    A1sDS.Of("Код", "001", "Имя", "Товар 1"),
    A1sDS.Of("Код", "002", "Имя", "Товар 2")
);

A1sVT.AddRows(таблица, строки);
💡 Совет: Комбинируйте A1sVT + A1sDS + A1sAR для максимально компактного и читаемого кода!

Соответствие стандартам A1sCode

📝

XML-документация

Все функции документированы

🏷️

SyntaxMarks

Специальные метки навигации

Автотесты

SelfTest() с 10 тестами

📊

Сложность

CC ≤4 для большинства функций

💡

Примеры

ExamplesAdvanced() с кейсами

🎨

Стиль

CamelCase, консистентное API

Установка и настройка

1. Скачайте модуль

📥 Скачать A1sVT.bsl

2. Добавьте в конфигурацию

Создайте общий модуль с именем A1sVT

Скопируйте содержимое файла A1sVT.bsl в модуль

3. Установите флаги

  • Сервер
  • Внешнее соединение
  • Клиент (управляемое приложение)
  • Глобальный
  • ⚪ Клиент (обычное приложение) — опционально

4. Проверьте работу

// Запустите встроенные тесты
Результат = A1sVT.SelfTest();

// Посмотрите примеры
A1sVT.ExamplesAdvanced();

Производительность

Хорошая новость: Производительность A1sVT близка к нативному коду 1С. Небольшая потеря скорости (~10-20%) полностью компенсируется удобством и сокращением кода.

✓ Быстрые операции

  • FindRow() с индексом — как нативный поиск
  • Filter() — использует .НайтиСтроки()
  • Sort() — использует .Сортировать()
  • GroupBy() — использует .Свернуть()

⚠️ Оптимизация

  • Используйте CreateIndex() для больших таблиц
  • ToArray() создает новые структуры — учитывайте память
  • Для ~1000 строк производительность отличная

Готовы начать?

Скачайте A1sVT и сократите свой код на 80-95%!

📥 Скачать A1sVT.bsl 📄 README 🏠 На главную

🐱 Кот Айван напоминает:

"Запустите A1sVT.SelfTest() чтобы убедиться, что всё работает правильно!"