Что с чем путают в 1С

Массив, структура и соответствие в 1С:
какую коллекцию выбрать

Если везде использовать одну коллекцию, решение быстро становится неудобным. Разберём три небольшие задачи: список цен, описание услуги и поиск стоимости по коду.

Три коллекции в настоящем модуле формы 1С: массив цен, структура услуги и соответствие по коду
  • Порядок и индекс с нуля
  • Именованные свойства
  • Значение по ключу
  • Повторный ключ и отсутствующее поле
Содержание

Куда вставить пример и как увидеть результат

Для этих опытов достаточно внешней обработки с управляемой формой и кнопкой. Работаем только с числами и коллекциями в памяти: справочники, документы и типовая конфигурация пока не нужны.

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

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

Три коллекции в настоящем модуле формы 1С: массив цен, структура услуги и соответствие по коду
Это модуль настоящей учебной обработки: три примера разнесены по трём клиентским обработчикам. В статье можно проверять их по одному через одну кнопку; на снимке у каждого примера своя команда. Технический путь в заголовке повторять не нужно.

Пока непонятно, где эта процедура?

Сначала добейтесь сообщения от собственной кнопки.

В первой обработке показаны создание команды, назначение действия и открытие файла в Предприятии.

Найти обработчик команды по скриншотам →

Массив: важна последовательность

В массиве цены идут по порядку добавления. Первый элемент имеет индекс 0. Количество элементов и последний индекс различаются на единицу. Для пустого массива последнего элемента вообще нет.

Создайте три числа и обойдите их через Для Каждого. Если не нужен индекс, такой обход проще. В упражнении ожидается сумма 600. Затем очистите массив и проверьте, что сумма осталась нулевой.

Учебный пример 1С
Цены = Новый Массив;
Цены.Добавить(100);
Цены.Добавить(200);
Цены.Добавить(300);
Итог = 0;
Для Каждого Цена Из Цены Цикл
    Итог = Итог + Цена;
КонецЦикла;
Сообщить(Итог);

Структура: у полей есть имена

Одну услугу удобно описать именованными свойствами. «Название» и «Цена» понятнее, чем договорённость «в нулевой ячейке название, в первой цена». Имена ключей структуры должны подходить для имён переменных.

Если поле необязательно, проверяйте Свойство. Нельзя считать, что любая входящая структура содержит цену. Сначала проверьте наличие, затем тип и допустимость значения по правилам вашей задачи. В примере заранее создаём переменную Цена: метод запишет в неё найденное значение через второй параметр.

Учебный пример 1С
Услуга = Новый Структура("Название,Цена", "Чистка", 500);
Цена = Неопределено;
Если Услуга.Свойство("Цена", Цена) Тогда
    Сообщить(Цена);
КонецЕсли;

Соответствие: обращаемся по ключу

Для цен по кодам удобно соответствие. Здесь код «ЧИСТКА» — ключ, а число 500 — значение. Не надо просматривать весь список и сравнивать коды вручную.

Повторная вставка по существующему ключу заменяет значение. Это полезно для обновления, но не подходит для хранения истории цен. Для истории нужно другое устройство данных с датами, а не надежда на повторный ключ.

Учебный пример 1С
Цены = Новый Соответствие;
Цены.Вставить("ЧИСТКА", 500);
Цены.Вставить("ЧИСТКА", 600);
Сообщить(Цены.Получить("ЧИСТКА"));

Отсутствие ключа не равно нулю

Получить у соответствия возвращает Неопределено, если ключ не найден. Но такое значение можно и явно сохранить под ключом. Если вам нужно различать эти случаи, предусмотрите отдельный признак наличия или не допускайте Неопределено как значение по правилам коллекции.

Нулевая цена — отдельный случай. Услуга может быть бесплатной, а неизвестная цена требует уточнения. Не заменяйте все незаполненные значения нулём только ради удобного расчёта.

Результаты трёх примеров в 1С: массив — 600, структура — 500, соответствие — 600
Нажаты по порядку «Массив», «Структура» и «Соответствие». Внизу реальные результаты: 600 — сумма трёх цен; 500 — свойство услуги; 600 — новое значение под прежним ключом. Одинаковое число в первом и третьем опыте получилось разными способами.

Передайте массив в функцию и получите сумму

Теперь отделим расчёт от нажатия кнопки. Процедура собирает исходные цены и показывает ответ, а функция получает массив и возвращает число. Само наличие функции в модуле ещё ничего не запускает: ниже её вызывает строка Сумма = СуммаЦен(Цены).

Этот пример вставьте целиком в модуль формы вместо прежнего обработчика. У действия команды выберите ПроверитьСумму. Обе части выполняются на клиенте. До первого запуска посчитайте 100 + 200 + 300 вручную: ожидаем 600.

Поставьте точку останова перед вызовом функции. Сначала посмотрите состав Цены, затем войдите в функцию командой «Шагнуть в». Внутри она работает с параметром Значения. После Возврат число попадёт в переменную Сумма у вызывающей процедуры. Сообщить только показывает это число — не рассчитывает его.

Проверьте функцию на трёх наборах
Что передалиЧто ожидаемПочему
100, 200, 300600Прибавили каждую цену
Один элемент 100100Один проход цикла
Пустой массив0Цикл не выполнился; начальный итог сохранился
Модуль управляемой формы: кнопка вызывает функцию
&НаКлиенте
Процедура ПроверитьСумму(Команда)
    Цены = Новый Массив;
    Цены.Добавить(100);
    Цены.Добавить(200);
    Цены.Добавить(300);
    Сумма = СуммаЦен(Цены);
    Сообщить(Сумма);
КонецПроцедуры

&НаКлиенте
Функция СуммаЦен(Значения)
    Итог = 0;
    Для Каждого Цена Из Значения Цикл
        Итог = Итог + Цена;
    КонецЦикла;
    Возврат Итог;
КонецФункции

Соберите маленький заказ

Храните строки заказа в массиве. Каждая строка — структура с кодом и количеством. Отдельное соответствие содержит цены по кодам. Для каждой строки найдите цену и рассчитайте стоимость.

Проверьте один код, повтор того же кода в двух строках и неизвестный код. Решите заранее: останавливается ли весь расчёт при неизвестной цене? Объясните это правило до написания цикла. Для первого варианта лучше сообщить об ошибке и не показывать частичный итог как окончательный.

Самопроверка

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

Массив всегда начинается с нуля?

Индексы элементов массива 1С начинаются с нуля. При обходе через Для Каждого индекс обычно не нужен.

Можно хранить ссылку ключом соответствия?

Да, ключом может быть значение, например ссылка на товар. Это удобно для сопоставления данных одного типа.

Структура заменяет справочник?

Нет. Структура — коллекция в памяти, она сама по себе не создаёт постоянные записи в базе.

Первичные источники

Что проверить дополнительно

·

Полезный материал

Поделиться статьёй

Сохраните материал или отправьте его тому, кому он пригодится.

Шаг 2 из 5

Данные в 1С: как выбирать значения, читать и проверять результат

Проверьте три разных случая отсутствия значения. Одна универсальная проверка здесь не заменяет понимания причины.

Следующий шаг

От прочитанного примера — к своему решению

В «1С код» — 153 бесплатные задачи по языку, коллекциям и запросам. Формат похож на LeetCode: небольшое условие, ваше решение и результат проверки. Начните с простой задачи и попробуйте объяснить свой код.

Нужен бесплатный вход. AI-раздел и практика с проверкой ментором имеют отдельные условия доступа. В «1С код» действуют лимиты попыток и восстановление жизней.
Попробовать «1С код» бесплатно →