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

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

Пока непонятно, где эта процедура?
Сначала добейтесь сообщения от собственной кнопки.
В первой обработке показаны создание команды, назначение действия и открытие файла в Предприятии.
Найти обработчик команды по скриншотам →Массив: важна последовательность
В массиве цены идут по порядку добавления. Первый элемент имеет индекс 0. Количество элементов и последний индекс различаются на единицу. Для пустого массива последнего элемента вообще нет.
Создайте три числа и обойдите их через Для Каждого. Если не нужен индекс, такой обход проще. В упражнении ожидается сумма 600. Затем очистите массив и проверьте, что сумма осталась нулевой.
Цены = Новый Массив;
Цены.Добавить(100);
Цены.Добавить(200);
Цены.Добавить(300);
Итог = 0;
Для Каждого Цена Из Цены Цикл
Итог = Итог + Цена;
КонецЦикла;
Сообщить(Итог);Структура: у полей есть имена
Одну услугу удобно описать именованными свойствами. «Название» и «Цена» понятнее, чем договорённость «в нулевой ячейке название, в первой цена». Имена ключей структуры должны подходить для имён переменных.
Если поле необязательно, проверяйте Свойство. Нельзя считать, что любая входящая структура содержит цену. Сначала проверьте наличие, затем тип и допустимость значения по правилам вашей задачи. В примере заранее создаём переменную Цена: метод запишет в неё найденное значение через второй параметр.
Услуга = Новый Структура("Название,Цена", "Чистка", 500);
Цена = Неопределено;
Если Услуга.Свойство("Цена", Цена) Тогда
Сообщить(Цена);
КонецЕсли;Соответствие: обращаемся по ключу
Для цен по кодам удобно соответствие. Здесь код «ЧИСТКА» — ключ, а число 500 — значение. Не надо просматривать весь список и сравнивать коды вручную.
Повторная вставка по существующему ключу заменяет значение. Это полезно для обновления, но не подходит для хранения истории цен. Для истории нужно другое устройство данных с датами, а не надежда на повторный ключ.
Цены = Новый Соответствие;
Цены.Вставить("ЧИСТКА", 500);
Цены.Вставить("ЧИСТКА", 600);
Сообщить(Цены.Получить("ЧИСТКА"));Отсутствие ключа не равно нулю
Получить у соответствия возвращает Неопределено, если ключ не найден. Но такое значение можно и явно сохранить под ключом. Если вам нужно различать эти случаи, предусмотрите отдельный признак наличия или не допускайте Неопределено как значение по правилам коллекции.
Нулевая цена — отдельный случай. Услуга может быть бесплатной, а неизвестная цена требует уточнения. Не заменяйте все незаполненные значения нулём только ради удобного расчёта.
Почему ноль, Неопределено и пустой выбор нельзя обрабатывать одинаково, объяснил в разборе пустых значений.

Передайте массив в функцию и получите сумму
Теперь отделим расчёт от нажатия кнопки. Процедура собирает исходные цены и показывает ответ, а функция получает массив и возвращает число. Само наличие функции в модуле ещё ничего не запускает: ниже её вызывает строка Сумма = СуммаЦен(Цены).
Этот пример вставьте целиком в модуль формы вместо прежнего обработчика. У действия команды выберите ПроверитьСумму. Обе части выполняются на клиенте. До первого запуска посчитайте 100 + 200 + 300 вручную: ожидаем 600.
Поставьте точку останова перед вызовом функции. Сначала посмотрите состав Цены, затем войдите в функцию командой «Шагнуть в». Внутри она работает с параметром Значения. После Возврат число попадёт в переменную Сумма у вызывающей процедуры. Сообщить только показывает это число — не рассчитывает его.
Если пока не получается пройти код по строкам, потренируйтесь на примере с точкой останова и «Табло». Там тоже три цены, но сначала намеренно оставлена ошибка накопления.
| Что передали | Что ожидаем | Почему |
|---|---|---|
| 100, 200, 300 | 600 | Прибавили каждую цену |
| Один элемент 100 | 100 | Один проход цикла |
| Пустой массив | 0 | Цикл не выполнился; начальный итог сохранился |
&НаКлиенте
Процедура ПроверитьСумму(Команда)
Цены = Новый Массив;
Цены.Добавить(100);
Цены.Добавить(200);
Цены.Добавить(300);
Сумма = СуммаЦен(Цены);
Сообщить(Сумма);
КонецПроцедуры
&НаКлиенте
Функция СуммаЦен(Значения)
Итог = 0;
Для Каждого Цена Из Значения Цикл
Итог = Итог + Цена;
КонецЦикла;
Возврат Итог;
КонецФункцииСоберите маленький заказ
Храните строки заказа в массиве. Каждая строка — структура с кодом и количеством. Отдельное соответствие содержит цены по кодам. Для каждой строки найдите цену и рассчитайте стоимость.
Проверьте один код, повтор того же кода в двух строках и неизвестный код. Решите заранее: останавливается ли весь расчёт при неизвестной цене? Объясните это правило до написания цикла. Для первого варианта лучше сообщить об ошибке и не показывать частичный итог как окончательный.
Проверьте чтение похожих фрагментов без запуска в тренажёре чтения кода.
Самопроверка
Частые вопросы
Массив всегда начинается с нуля?
Индексы элементов массива 1С начинаются с нуля. При обходе через Для Каждого индекс обычно не нужен.
Можно хранить ссылку ключом соответствия?
Да, ключом может быть значение, например ссылка на товар. Это удобно для сопоставления данных одного типа.
Структура заменяет справочник?
Нет. Структура — коллекция в памяти, она сама по себе не создаёт постоянные записи в базе.
Первичные источники
Что проверить дополнительно
Полезный материал
Поделиться статьёй
Сохраните материал или отправьте его тому, кому он пригодится.
Шаг 2 из 5
Данные в 1С: как выбирать значения, читать и проверять результат
Проверьте три разных случая отсутствия значения. Одна универсальная проверка здесь не заменяет понимания причины.
Следующий шаг
От прочитанного примера — к своему решению
В «1С код» — 153 бесплатные задачи по языку, коллекциям и запросам. Формат похож на LeetCode: небольшое условие, ваше решение и результат проверки. Начните с простой задачи и попробуйте объяснить свой код.
Нужен бесплатный вход. AI-раздел и практика с проверкой ментором имеют отдельные условия доступа. В «1С код» действуют лимиты попыток и восстановление жизней.