A1sVT — Работа с таблицами значений
Современный функциональный подход к работе с таблицами в 1С.
Сократите код на 80-95% с читаемым и поддерживаемым API.
Код-дуэль: 🦊 Лис Тинг 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%) ✅
Возможности модуля 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(таблица, "Код");
Реальный пример: Таблица ЕГАИС
🦊 Было (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(таблица, строки);
Соответствие стандартам A1sCode
XML-документация
Все функции документированы
SyntaxMarks
Специальные метки навигации
Автотесты
SelfTest() с 10 тестами
Сложность
CC ≤4 для большинства функций
Примеры
ExamplesAdvanced() с кейсами
Стиль
CamelCase, консистентное API
Установка и настройка
1. Скачайте модуль
📥 Скачать A1sVT.bsl2. Добавьте в конфигурацию
Создайте общий модуль с именем A1sVT
Скопируйте содержимое файла A1sVT.bsl в модуль
3. Установите флаги
- ✅ Сервер
- ✅ Внешнее соединение
- ✅ Клиент (управляемое приложение)
- ✅ Глобальный
- ⚪ Клиент (обычное приложение) — опционально
4. Проверьте работу
// Запустите встроенные тесты
Результат = A1sVT.SelfTest();
// Посмотрите примеры
A1sVT.ExamplesAdvanced();
Производительность
✓ Быстрые операции
FindRow()с индексом — как нативный поискFilter()— использует .НайтиСтроки()Sort()— использует .Сортировать()GroupBy()— использует .Свернуть()
⚠️ Оптимизация
- Используйте
CreateIndex()для больших таблиц ToArray()создает новые структуры — учитывайте память- Для ~1000 строк производительность отличная
Готовы начать?
Скачайте A1sVT и сократите свой код на 80-95%!
🐱 Кот Айван напоминает:
"Запустите A1sVT.SelfTest()
чтобы убедиться, что всё работает правильно!"