Массивы в БСП 1С: функции ОбщегоНазначенияКлиентСервер

Дата: 09.10.2026 16:59:00
БСП
Массив
Коллекции значений
Программирование 1С
Доработка 1С
Примеры кода
Комментарий:
0
Платформа:
8.3
Конфигурация:
Любая
Формы:
Любые

Для работы с массивами в БСП 1С есть готовые функции: положить значение в массив, дополнить массив другим, убрать дубли, посчитать разность массивов, удалить значение. Почти все они лежат в общем модуле ОбщегоНазначенияКлиентСервер и работают и на клиенте, и на сервере. Ниже — справочник с реальными сигнатурами, пометкой, возвращает функция новый массив или меняет переданный, и примеры из доработок типовых конфигураций.

Сигнатуры сняты с кода БСП 3.1.5.385 (УТ 11.4.14) и БСП 3.1.10.383 (КА 2.5.20); где версии расходятся, это оговорено. Методы самого массива — Добавить, Найти, Удалить — разобраны в статье «Массив в 1С 8.3», устройство библиотеки — в обзоре БСП для программиста.

Где встречается задача

  • Функция ждёт массив, а у вас одна ссылка: из формы документа нужно вызвать то же, что форма списка вызывает для выделенных строк.
  • Номенклатуру из табличной части нужно собрать без повторов и передать в запрос.
  • Из выделенных документов надо отбросить непроведённые или уже обработанные.
  • В ОбработкаПроверкиЗаполнения по условию снимают проверку реквизита, а ПроверяемыеРеквизиты — тоже массив.
  • В типовом коде на каждом шаге встречаются ЗначениеВМассиве и СвернутьМассив, и надо точно знать, что они делают.

Функции БСП 1С для массивов: сигнатуры

Где смотреть: конфигуратор → «Общие» → «Общие модули» → ОбщегоНазначенияКлиентСервер, почти всё — в области «ПрограммныйИнтерфейс» → «Данные». Модуль компилируется на клиенте, на сервере и во внешнем соединении, поэтому директивы для вызова не нужны.

Функция и параметрыЧто делаетРезультат
ЗначениеВМассиве(Значение)Кладёт одно значение в массивНовый массив из одного элемента
ДополнитьМассив(МассивПриемник, МассивИсточник, ТолькоУникальныеЗначения = Ложь)Дописывает элементы источника в конец приёмника. С Истина пропускает значения, которые уже есть в приёмнике или встретились в источнике раньшеПроцедура, меняет МассивПриемник
СвернутьМассив(Знач Массив)Убирает повторы, порядок первых вхождений сохраняетсяНовый массив, исходный не меняется
РазностьМассивов(Знач Массив, Знач МассивВычитания)Оставляет элементы первого массива, которых нет во второмНовый массив
УдалитьЗначениеИзМассива(Массив, Значение)Удаляет первое найденное вхождениеПроцедура, меняет Массив
УдалитьВсеВхожденияЗначенияИзМассива(Массив, Значение)Удаляет все вхождения, обходя массив с концаПроцедура, меняет Массив
УдалитьВсеВхожденияТипаИзМассива(Массив, Тип)Удаляет элементы, у которых ТипЗнч равен ТипПроцедура, меняет Массив
СпискиЗначенийИдентичны(Список1, Список2), в БСП 3.1.10 есть третий параметр СравниватьКоличествоЗначений = ЛожьСравнивает массивы или списки значений по составу, порядок не важен. Без третьего параметра повторы не считает: [1, 1, 2] и [1, 2] для неё одинаковыБулево
ОтмеченныеЭлементы(Список)Собирает значения отмеченных элементов списка значенийНовый массив
ДополнитьТаблицуИзМассива(Таблица, Массив, ИмяПоля)Добавляет строку таблицы значений на каждый элемент массиваПроцедура, меняет Таблица

Перенос массива в таблицу подробно разобран в статье «Массив в таблицу значений», склейка и разбор строк — в статье «Массив в строку».

Серверные функции в ОбщегоНазначения

Модуль ОбщегоНазначения компилируется на сервере, во внешнем соединении и в толстом клиенте обычного приложения. Из управляемой формы его вызывают в процедуре с директивой &НаСервере. Функции из списка — в областях «Данные» и «ДанныеВБазе».

  • ВыгрузитьКолонку(КоллекцияСтрок, ИмяКолонки, ТолькоУникальныеЗначения = Ложь) — новый массив значений поля из любой коллекции, которую можно обойти Для Каждого: табличной части, таблицы значений, массива структур.
  • КоллекцииИдентичны(КоллекцияСтрок1, КоллекцияСтрок2, ИменаКолонок = "", ИсключаяКолонки = "", УчитыватьПоследовательностьСтрок = Ложь) — сравнивает и массивы. Без учёта порядка проверяет только, что количество элементов совпадает и каждый элемент первого есть во втором: [1, 1, 2] и [1, 2, 2] она признает одинаковыми.
  • ФиксированныеДанные(Данные, ВызыватьИсключение = Истина) — делает из массива ФиксированныйМассив вместе с вложенными коллекциями.
  • СкопироватьРекурсивно(Источник, ФиксироватьДанные = Неопределено) — рекурсивная копия коллекции, с Ложь снимает фиксацию. На клиенте есть такая же ОбщегоНазначенияКлиент.СкопироватьРекурсивно.
  • ТаблицаЗначенийВМассив(ТаблицаЗначений) — массив структур по строкам таблицы.
  • УдалитьНепроверяемыеРеквизитыИзМассива(МассивРеквизитов, МассивНепроверяемыхРеквизитов) — для ОбработкаПроверкиЗаполнения, так её вызывает, например, документ «Заказ клиента» в УТ 11.4.
  • ЗначениеРеквизитаОбъектов(МассивСсылок, ИмяРеквизита, ВыбратьРазрешенные = Ложь, …) — реквизит сразу по массиву ссылок, результат — соответствие «ссылка — значение». Подробнее — в статье о ЗначениеРеквизитаОбъекта.

В области «УстаревшиеПроцедурыИФункции» модуля ОбщегоНазначенияКлиентСервер остались СократитьМассив (замена — РазностьМассивов), СкопироватьМассив и СкопироватьРекурсивно этого модуля (замена — СкопироватьРекурсивно из ОбщегоНазначения или ОбщегоНазначенияКлиент). В старом коде они работают, в новых доработках их не используйте.

Шпаргалка: что возвращает каждая функция

Процедуру можно вставить в любой модуль конфигурации на БСП и пройти отладчиком: в комментариях — содержимое массивов после каждой строки.

// Шпаргалка по функциям БСП для массивов.
// Директивы не нужны: модуль ОбщегоНазначенияКлиентСервер доступен
// и на клиенте, и на сервере, и во внешнем соединении.
Процедура ШпаргалкаМассивыБСП() Экспорт

    // ЗначениеВМассиве: новый массив из одного элемента
    Склады = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве("Основной"); // [Основной]

    Поступившие = Новый Массив;
    Поступившие.Добавить("Розница");
    Поступившие.Добавить("Транзит");
    Поступившие.Добавить("Транзит");
    Поступившие.Добавить("Основной");

    // ДополнитьМассив: процедура, дописывает элементы в первый параметр
    ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Склады, Поступившие, Истина);
    // Склады = [Основной, Розница, Транзит]: повторы и уже имеющиеся значения пропущены

    Все = Новый Массив;
    ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Все, Поступившие);
    // Все = [Розница, Транзит, Транзит, Основной]: без третьего параметра добавлено всё

    // СвернутьМассив: новый массив без повторов, исходный не меняется
    Уникальные = ОбщегоНазначенияКлиентСервер.СвернутьМассив(Все);
    // Уникальные = [Розница, Транзит, Основной], в Все по-прежнему четыре элемента

    // РазностьМассивов: новый массив из элементов первого, которых нет во втором
    Исключаемые = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве("Транзит");
    БезТранзита = ОбщегоНазначенияКлиентСервер.РазностьМассивов(Все, Исключаемые);
    // БезТранзита = [Розница, Основной]

    // Процедуры удаления меняют переданный массив
    ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Все, "Транзит");
    // Все = [Розница, Транзит, Основной]: удалено только первое вхождение
    ОбщегоНазначенияКлиентСервер.УдалитьВсеВхожденияЗначенияИзМассива(Все, "Транзит");
    // Все = [Розница, Основной]

    Значения = Новый Массив;
    Значения.Добавить("Основной");
    Значения.Добавить(Неопределено);
    Значения.Добавить(150);
    ОбщегоНазначенияКлиентСервер.УдалитьВсеВхожденияТипаИзМассива(Значения, Тип("Неопределено"));
    // Значения = [Основной, 150]

    // СпискиЗначенийИдентичны: одинаковый состав, порядок не важен
    Совпадают = ОбщегоНазначенияКлиентСервер.СпискиЗначенийИдентичны(Уникальные, Склады);
    // Совпадают = Истина: в обоих массивах Розница, Транзит и Основной

КонецПроцедуры

Серверные функции на одном примере

В параметр передаётся объект заказа клиента или любого документа с табличной частью Товары и колонкой Номенклатура.

// Серверные функции БСП для массивов: общий модуль ОбщегоНазначения.
// Вызывать на сервере: в серверном модуле или в процедуре формы с &НаСервере.
Процедура ШпаргалкаМассивыБСПНаСервере(ЗаказОбъект) Экспорт

    // Колонка табличной части без повторов — одним вызовом
    Номенклатура = ОбщегоНазначения.ВыгрузитьКолонку(ЗаказОбъект.Товары, "Номенклатура", Истина);

    // Так же работает с массивом структур, например прочитанным из JSON
    Строки = Новый Массив;
    Строки.Добавить(Новый Структура("Артикул, Количество", "А-100", 2));
    Строки.Добавить(Новый Структура("Артикул, Количество", "А-200", 1));
    Строки.Добавить(Новый Структура("Артикул, Количество", "А-100", 5));
    Артикулы = ОбщегоНазначения.ВыгрузитьКолонку(Строки, "Артикул", Истина); // [А-100, А-200]

    Обратный = Новый Массив;
    Обратный.Добавить("А-200");
    Обратный.Добавить("А-100");

    // Без учёта порядка — Истина, с учётом порядка (пятый параметр) — Ложь
    БезПорядка = ОбщегоНазначения.КоллекцииИдентичны(Артикулы, Обратный);
    СПорядком = ОбщегоНазначения.КоллекцииИдентичны(Артикулы, Обратный, , , Истина);

    // ФиксированныеДанные: ФиксированныйМассив, методов Добавить и Удалить у него нет
    Фиксированный = ОбщегоНазначения.ФиксированныеДанные(Артикулы);

    // СкопироватьРекурсивно с Ложь снимает фиксацию, в том числе у вложенных коллекций
    Изменяемый = ОбщегоНазначения.СкопироватьРекурсивно(Фиксированный, Ложь);
    Изменяемый.Добавить("А-300");

    // Таблица значений -> массив структур, например чтобы отдать строки на клиент
    Таблица = Новый ТаблицаЗначений;
    Таблица.Колонки.Добавить("Артикул");
    Таблица.Добавить().Артикул = "А-400";
    СтрокиТаблицы = ОбщегоНазначения.ТаблицаЗначенийВМассив(Таблица); // одна структура с ключом Артикул

КонецПроцедуры

Примеры из доработок типовых

Команда списка: только проведённые документы

Типичная доработка формы списка: команда обрабатывает выделенные заказы, но только проведённые. Код повторяет приём, которым БСП фильтрует ссылки в подключаемых командах.

// Модуль формы списка заказов клиентов, команда добавлена доработкой.
// Ищем строки без цены в выделенных проведённых заказах за один серверный вызов.

&НаКлиенте
Процедура ПроверитьЦены(Команда)

    // Копия выделенных строк: свойство таблицы формы не трогаем
    Заказы = Новый Массив;
    ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Заказы, Элементы.Список.ВыделенныеСтроки);

    // При группировке списка среди выделенных бывают строки группировок, а не ссылки
    ОбщегоНазначенияКлиентСервер.УдалитьВсеВхожденияТипаИзМассива(Заказы,
        Тип("СтрокаГруппировкиДинамическогоСписка"));

    Если Заказы.Количество() = 0 Тогда
        ПоказатьПредупреждение(, НСтр("ru = 'Выделите заказы в списке.'"));
        Возврат;
    КонецЕсли;

    Результат = ПроверитьЦеныНаСервере(Заказы);

    Для Каждого Заказ Из Результат.БезЦены Цикл
        ОбщегоНазначенияКлиент.СообщитьПользователю(
            СтрШаблон(НСтр("ru = 'В заказе %1 есть строки без цены'"), Заказ), Заказ);
    КонецЦикла;

    ПоказатьОповещениеПользователя(НСтр("ru = 'Проверка цен'"), ,
        СтрШаблон(НСтр("ru = 'Проверено: %1, без цены: %2, пропущено непроведённых: %3'"),
            Результат.Проверено, Результат.БезЦены.Количество(), Результат.Непроведенных));

КонецПроцедуры

&НаСервереБезКонтекста
Функция ПроверитьЦеныНаСервере(Знач Заказы)

    // Непроведённые отбрасываем: функция БСП возвращает их массивом
    Непроведенные = ОбщегоНазначения.ПроверитьПроведенностьДокументов(Заказы);
    Проведенные = ОбщегоНазначенияКлиентСервер.РазностьМассивов(Заказы, Непроведенные);

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    Товары.Ссылка КАК Ссылка
    |ИЗ
    |    Документ.ЗаказКлиента.Товары КАК Товары
    |ГДЕ
    |    Товары.Ссылка В (&Заказы)
    |    И Товары.Цена = 0
    |    И НЕ Товары.Отменено";
    Запрос.УстановитьПараметр("Заказы", Проведенные);

    Результат = Новый Структура;
    Результат.Вставить("Проверено", Проведенные.Количество());
    Результат.Вставить("Непроведенных", Непроведенные.Количество());
    // Массив ссылок передаётся на клиент без преобразований
    Результат.Вставить("БезЦены", Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"));

    Возврат Результат;

КонецФункции

Если перенести серверную функцию в общий модуль с флажком «Вызов сервера», форма документа вызовет ту же проверку для одного заказа: ПроверитьЦеныНаСервере(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Объект.Ссылка)). Запрос удобно сначала отладить в бесплатной консоли запросов.

Какие позиции добавили и удалили в заказе

Частая просьба: при изменении состава заказа уведомлять склад или вести свой журнал. Две разности массивов дают добавленные и удалённые позиции без вложенных циклов.

// Расширение конфигурации, модуль объекта документа ЗаказКлиента (УТ 11.4).
// Перед записью запоминаем добавленные и удалённые позиции,
// после записи пишем их количество в журнал регистрации.

&После("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

    Если Отказ Или ЭтотОбъект.ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;

    // Состав после редактирования, без повторов
    Новые = ОбщегоНазначения.ВыгрузитьКолонку(ЭтотОбъект.Товары, "Номенклатура", Истина);

    // Состав, который записан в базе сейчас
    Старые = Новый Массив;
    Если Не ЭтотОбъект.ЭтоНовый() Тогда
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ РАЗЛИЧНЫЕ
        |    Товары.Номенклатура КАК Номенклатура
        |ИЗ
        |    Документ.ЗаказКлиента.Товары КАК Товары
        |ГДЕ
        |    Товары.Ссылка = &Ссылка";
        Запрос.УстановитьПараметр("Ссылка", ЭтотОбъект.Ссылка);
        Старые = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номенклатура");
    КонецЕсли;

    ЭтотОбъект.ДополнительныеСвойства.Вставить("Расш1_Добавленные",
        ОбщегоНазначенияКлиентСервер.РазностьМассивов(Новые, Старые));
    ЭтотОбъект.ДополнительныеСвойства.Вставить("Расш1_Удаленные",
        ОбщегоНазначенияКлиентСервер.РазностьМассивов(Старые, Новые));

КонецПроцедуры

&После("ПриЗаписи")
Процедура Расш1_ПриЗаписи(Отказ)

    Если Отказ Или ЭтотОбъект.ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;

    // Значение по умолчанию — пустой массив, проверять наличие ключа не нужно
    Добавленные = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(
        ЭтотОбъект.ДополнительныеСвойства, "Расш1_Добавленные", Новый Массив);
    Удаленные = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(
        ЭтотОбъект.ДополнительныеСвойства, "Расш1_Удаленные", Новый Массив);

    Если Добавленные.Количество() = 0 И Удаленные.Количество() = 0 Тогда
        Возврат;
    КонецЕсли;

    ЗаписьЖурналаРегистрации("Доработка.ИзменениеСоставаЗаказа",
        УровеньЖурналаРегистрации.Информация, ЭтотОбъект.Метаданные(), ЭтотОбъект.Ссылка,
        СтрШаблон("Добавлено позиций: %1, удалено: %2",
            Добавленные.Количество(), Удаленные.Количество()));

КонецПроцедуры

Проверка заполнения по условию

Реквизит, добавленный расширением, с проверкой заполнения «Выдавать ошибку» нужен не всегда. Снимаем проверку, убирая имя реквизита из массива ПроверяемыеРеквизиты.

// Расширение, модуль объекта документа ЗаказКлиента (УТ 11.4).
// Свой реквизит Расш1_ДатаДоставки с проверкой заполнения «Выдавать ошибку»
// обязателен только после согласования заказа.

&Перед("ОбработкаПроверкиЗаполнения")
Процедура Расш1_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)

    Если ЭтотОбъект.Статус = Перечисления.СтатусыЗаказовКлиентов.НеСогласован Тогда
        // Имя реквизита в массиве одно — хватает удаления первого вхождения
        ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(ПроверяемыеРеквизиты, "Расш1_ДатаДоставки");
    КонецЕсли;

КонецПроцедуры

Чего нет в БСП: пересечение и быстрая разность

В модулях ОбщегоНазначенияКлиентСервер и ОбщегоНазначения БСП 3.1.5 и 3.1.10 нет пересечения массивов и сортировки. А РазностьМассивов для каждого элемента вызывает Найти по второму массиву, что заметно на десятках тысяч элементов. Две функции для своего модуля:

// Свой общий модуль, например Расш1_МассивыКлиентСервер
// (флажки: Клиент (управляемое приложение), Сервер, Внешнее соединение).

// Новый массив из элементов первого массива, которые есть во втором.
Функция ПересечениеМассивов(Массив1, Массив2) Экспорт

    ВоВтором = МножествоЗначений(Массив2);
    Результат = Новый Массив;
    Для Каждого Элемент Из Массив1 Цикл
        Если ВоВтором[Элемент] <> Неопределено Тогда
            Результат.Добавить(Элемент);
        КонецЕсли;
    КонецЦикла;
    Возврат Результат;

КонецФункции

// Как ОбщегоНазначенияКлиентСервер.РазностьМассивов, но поиск идёт по соответствию.
Функция РазностьБольшихМассивов(Массив, МассивВычитания) Экспорт

    Вычитаемые = МножествоЗначений(МассивВычитания);
    Результат = Новый Массив;
    Для Каждого Элемент Из Массив Цикл
        Если Вычитаемые[Элемент] = Неопределено Тогда
            Результат.Добавить(Элемент);
        КонецЕсли;
    КонецЦикла;
    Возврат Результат;

КонецФункции

// Соответствие «значение — Истина»: поиск по ключу не перебирает элементы.
Функция МножествоЗначений(Массив)

    Множество = Новый Соответствие;
    Для Каждого Элемент Из Массив Цикл
        Множество.Вставить(Элемент, Истина);
    КонецЦикла;
    Возврат Множество;

КонецФункции

Обе функции возвращают новый массив и сохраняют повторы первого массива. Если повторы не нужны, оберните результат в СвернутьМассив.

Разбор ключевых строк

  • ДополнитьМассив(Заказы, Элементы.Список.ВыделенныеСтроки) — копия выделенных строк в новый массив. Удаляем элементы уже из копии, свойство таблицы формы остаётся как было.
  • Тип("СтрокаГруппировкиДинамическогоСписка") — если пользователь сгруппировал список, среди выделенных окажутся строки группировок, а не ссылки, и функции, которые ждут ссылки на документы, на них споткнутся. БСП в ПодключаемыеКомандыКлиент тоже берёт из выделенных только ссылки нужного типа.
  • ПроверитьПроведенностьДокументов и РазностьМассивов — функция БСП возвращает массив непроведённых, разность с ним оставляет проведённые. Тем же приёмом ПодключаемыеКомандыКлиент убирает из массива ссылок документы, которые не удалось провести. Отбор, запрос и подсчёт идут за один серверный вызов.
  • ВыгрузитьКолонку(ЭтотОбъект.Товары, "Номенклатура", Истина) — одна строка вместо Товары.ВыгрузитьКолонку и СвернутьМассив.
  • Две разности. РазностьМассивов(Новые, Старые) даёт добавленные позиции, РазностьМассивов(Старые, Новые) — удалённые. Исходные массивы при этом не меняются.
  • СвойствоСтруктуры(…, Новый Массив) — если ключа нет, вернётся пустой массив, и Количество() не упадёт на Неопределено.
  • &Перед("ОбработкаПроверкиЗаполнения") — в УТ 11.4 типовой обработчик заказа клиента сам проверяет реквизиты из ПроверяемыеРеквизиты функцией ОбщегоНазначенияУТ.ПроверитьЗаполнениеРеквизитовОбъекта и очищает массив, если до этого не было отказа. В &После убирать реквизит уже поздно.
  • МножествоЗначений — соответствие вместо Найти: поиск по ключу не перебирает элементы. На том же приёме БСП построила ДополнитьМассив с ТолькоУникальныеЗначения = Истина.

Типичные ошибки

  • Результат функции не присвоен. Строка ОбщегоНазначенияКлиентСервер.СвернутьМассив(Массив); выполняется без ошибок, но дубли остаются: функция возвращает новый массив и исходный не трогает. Такой вызов есть даже в типовой УТ 11.4, в функции ОбщегоНазначенияУТ.ИспользуемыеМенеджерыДокументов. Правильно: Массив = ОбщегоНазначенияКлиентСервер.СвернутьМассив(Массив);. То же с РазностьМассивов.
  • Ждали, что ДополнитьМассив вернёт объединение. Это процедура, она меняет первый параметр. Если исходный массив нужен целым, дополните обоими новый пустой массив. Даже с ТолькоУникальныеЗначения = Истина старые дубли приёмника остаются.
  • «Метод объекта не обнаружен (Добавить)». В процедуру, которая меняет массив, передали ФиксированныйМассив: такие возвращают ФиксированныеДанные и многие функции модулей с повторным использованием. Сделайте изменяемую копию: ОбщегоНазначения.СкопироватьРекурсивно(Значение, Ложь) на сервере, ОбщегоНазначенияКлиент.СкопироватьРекурсивно на клиенте или Новый Массив(Значение).
  • «Переменная не определена (ОбщегоНазначения)». Серверный модуль вызван в процедуре с &НаКлиенте. Перенесите вызов в &НаСервере, про контексты — в статье «Форма на сервере 1С».
  • «Слишком много фактических параметров». Код с СпискиЗначенийИдентичны(А, Б, Истина) перенесли из конфигурации на БСП 3.1.10 в конфигурацию на БСП 3.1.5, где у функции два параметра.
  • Одинаковые структуры не сворачиваются. СвернутьМассив, РазностьМассивов и УдалитьЗначениеИзМассива сравнивают структуры и массивы как объекты, а не по содержимому. Сворачивайте по ключевому полю через ВыгрузитьКолонку, а содержимое сравнивайте функцией ОбщегоНазначения.ДанныеСовпадают.
  • Медленно на больших массивах. РазностьМассивов перебирает второй массив для каждого элемента первого: для десятков тысяч элементов берите функцию с соответствием выше или запрос.

Частые вопросы

Как сделать массив из нескольких значений одной строкой?

Литерала массива во встроенном языке нет, а ЗначениеВМассиве принимает одно значение. Для строк хватит СтрРазделить("Основной,Розница,Транзит", ","). В КА 2.5 (БСП 3.1.10) есть ОбщегоНазначенияКлиентСервер.МассивЗначений на четыре значения, но она в области «СлужебныйПрограммныйИнтерфейс» и пропускает Неопределено во втором–четвёртом параметрах, а в УТ 11.4 её нет. В доработках надёжнее ЗначениеВМассиве и Добавить.

Чем СвернутьМассив отличается от ДополнитьМассив с Истина?

СвернутьМассив(Массив) возвращает новый массив без повторов и не трогает исходный. ДополнитьМассив(Приемник, Источник, Истина) меняет приёмник, не добавляет в него уже имеющиеся значения, но и старые дубли приёмника не убирает. Сама СвернутьМассив вызывает ДополнитьМассив с пустым приёмником.

Можно ли вызывать эти функции на клиенте?

Всё из ОбщегоНазначенияКлиентСервер — да. ОбщегоНазначения на тонком и веб-клиенте недоступен, его вызывают в процедуре с &НаСервере или &НаСервереБезКонтекста. Копию на клиенте делает ОбщегоНазначенияКлиент.СкопироватьРекурсивно.

Как узнать версию БСП в своей конфигурации?

В конфигураторе откройте общий модуль ОбновлениеИнформационнойБазыБСП, процедуру ПриДобавленииПодсистемы: строка Описание.Версия содержит номер, например "3.1.5.385" в УТ 11.4.14. Из кода на сервере версию возвращает СтандартныеПодсистемыСервер.ВерсияБиблиотеки().

Как убрать из массива пустые значения?

Неопределено удаляется по типу: УдалитьВсеВхожденияТипаИзМассива(Массив, Тип("Неопределено")). Пустую ссылку конкретного справочника — по значению: УдалитьВсеВхожденияЗначенияИзМассива(Массив, ПредопределенноеЗначение("Справочник.Склады.ПустаяСсылка")). Если в массиве смешаны типы, пройдите его с конца и удаляйте элементы, для которых ЗначениеЗаполнено возвращает Ложь.

Когда проще заказать

Функции БСП экономят строки, но доработка типовой — это ещё расширение, проверка после обновлений и тесты на копии базы. Если нужна готовая обработка, отчёт или изменение логики документа под ваши правила, посмотрите услугу отчёты и обработки 1С или разместите задачу на площадке: оценка бесплатная, ответ — в течение рабочего дня.

По теме

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

Станьте частью сообщества!
Войдите или зарегистрируйтесь, и вы сможете участвовать в обсуждениях.


1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.