Получить A1sCode
Выберите удобный способ — полная конфигурация или отдельные модули:
Добавить в конфигурацию
Два способа — через объединение конфигурации или вручную:
Вариант A: через .cf (рекомендуется)
a1scode.cfВариант B: вручную через .bsl
A1sDSСервер, ВызовСервераA1sDP_DS — это Fluent-интерфейс для цепочек вызововA1sAR (модуль) и A1sDP_AR (обработка). Без обработки цепочки .On().Filter()… не работают.
Справочники: find-or-create за одну строку
A1sCode — DSL для бизнес-логики в 1С. Самый наглядный пример: операция «найти или создать элемент справочника» — вместо 10 строк запроса и условий.
// Найти или создать группу Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ Ссылка |ИЗ Справочник.Номенклатура |ГДЕ НаименованиеПолное = &Имя | И ЭтоГруппа = Истина"; Запрос.УстановитьПараметр("Имя", "Корпус А"); Рез = Запрос.Выполнить().Выгрузить(); Если Рез.Количество() = 0 Тогда Гр = Справочники.Номенклатура.СоздатьГруппу(); Гр.Наименование = "Корпус А"; Гр.Записать(); Ссылка = Гр.Ссылка; Иначе Ссылка = Рез[0].Ссылка; КонецЕсли;
// DSL — декларативный стиль Гр = A1sCatalogs.EnsureGroup( "Номенклатура", "Корпус А"); // Пакетная загрузка из Excel A1sCatalogs.EnsureBatch( "Номенклатура", Имена, A1sDS.Of("Родитель", Гр));
Другие методы A1sCatalogs:
// Upsert: найти / создать / обновить Ссылка = A1sCatalogs.EnsureUpdate( "Контрагенты", A1sDS.Of("ИНН", "7707083893"), // ключ поиска A1sDS.Of("Наименование", "ООО Ромашка", // поля для обновления "КПП", "770701001")); // Проверить существование Есть = A1sCatalogs.Exists("Номенклатура", "Корпус А"); // Получить список ссылок Ссылки = A1sCatalogs.Refs("Номенклатура", Имена);
Документы: создать и провести за одну цепочку
A1sCode описывает операции как цепочки действий, а не как вложенные процедуры. Типичный паттерн «создать документ → заполнить табличную часть → провести»:
// Прежде — 40 строк. Теперь: A1sDocs.On("ВыпускПродукцииУслуг", A1sDS.Of( "Дата", '20260201', "Организация", МояОрг, "Склад", Склад)) .LoadRows("Продукция", ДанныеExcel) .Post();
Пакетное проведение с отчётом об ошибках:
// Провести пачку документов — получить отчёт Отчёт = A1sDocs.PostAll(МассивДокументов); // Отчёт: сколько прошло, сколько с ошибкой Сообщить("Проведено: " + Отчёт.Успешно + " / Ошибок: " + Отчёт.Ошибки.Количество());
Массивы и структуры: строительные блоки
A1sCode упрощает работу с коллекциями — без ручных циклов и шаблонных конструкций:
// Вместо: Новый Структура + N вызовов Вставить Параметры = A1sDS.Of( "Дата", '20260101', "Организация", МояОрг, "Склад", Склад); // Merge двух структур Итог = A1sDS.Merge(Базовые, Дополнительные); // Defaults: заполнить только пустые поля Итог = A1sDS.Defaults(Входящие, Умолчания);
// Создать массив литералом Товары = A1sAR.Of("Хлеб", "Молоко", "Масло"); // Set-операции А = A1sAR.Of(1, 2, 3); Б = A1sAR.Of(3, 4, 5); Объединение = A1sAR.Union(А, Б); // [1,2,3,4,5] Пересечение = A1sAR.Intersection(А, Б); // [3] Разность = A1sAR.Difference(А, Б); // [1,2] // Разбить на пачки по 100 для пакетной обработки Пачки = A1sAR.Chunk(МассивДокументов, 100);
Цепочки вызовов (Fluent API)
В A1sCode операции над данными описываются как цепочки действий, а не как последовательность команд.
Для сложных трансформаций — Fluent API через .On():
// Фильтрация, трансформация, ограничение Результат = A1sAR.On(ИсходныйМассив) .Filter("v.Цена > 1000") // отфильтровать .Map("v.Наименование") // взять одно поле .Sort() // отсортировать .Take(10) // первые 10 .Value(); // получить результат // Fluent для документа A1sDocs.On("РеализацияТоваровУслуг", A1sDS.Of("Контрагент", Клиент)) .Set("Комментарий", "Автозаказ") .LoadRows("Товары", ТаблицаТоваров) .Post();
.Value(), .Unload() или .ToArray(). Без него метод вернёт объект-обёртку, а не данные.
A1sQ — запросы без шаблонного кода
Самая частая задача — выполнить запрос и получить таблицу. A1sCode снижает количество ошибок за счёт декларативного подхода:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Наименование, Код |ИЗ | Справочник.Номенклатура"; Результат = Запрос.Выполнить(); Таблица = Результат.Выгрузить();
Таблица = A1sQ.Unload(" ВЫБРАТЬ Наименование, Код ИЗ Справочник.Номенклатура ");
// Запрос с параметрами Таблица = A1sQ.Unload(" ВЫБРАТЬ * ИЗ Справочник.Номенклатура ГДЕ Родитель = &Группа И Цена > &Мин ", A1sDS.Of("Группа", Гр, "Мин", 1000)); // Получить одно значение Количество = A1sQ.ValueQ("ВЫБРАТЬ КОЛИЧЕСТВО(*) ИЗ Документ.Заказы"); // Проверить существование (автоматически TOP 1) Есть = A1sQ.ExistsQ("ВЫБРАТЬ ПЕРВЫЕ 1 * ИЗ Справочник.Клиенты ГДЕ ИНН = &ИНН", A1sDS.Of("ИНН", "7707083893"));