Как вывести таблицу умножения в 1С: способы от вложенных циклов до одного оператора

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Решение 1: Использование вложенных циклов (классический подход)

Наиболее логичным и интуитивно понятным способом является использование двух циклов: внешнего и внутреннего. Рассмотрим, как это работает. Внешний цикл отвечает за «множимое» (первое число в выражении), а внутренний — за «множитель» (второе число). Проанализируем пример кода:


Для Множимое = 1 По 9 Цикл
    Для Множитель = 1 По 9 Цикл
        Произведение = Множимое * Множитель;
        Сообщить(Строка(Множимое) + " * " + Строка(Множитель) + " = " + Строка(Произведение));
    КонецЦикла;
КонецЦикла;

В этом примере внешний цикл Для Множимое = 1 По 9 запускается 9 раз. Для каждой его итерации внутренний цикл Для Множитель = 1 По 9 также выполняется 9 раз. В итоге в окне сообщений мы увидим ровно 81 строку. Это самый простой способ, который идеально подходит для понимания работы вложенных конструкций в рамках начального курса программирования — для этого есть инструмент пошаговой отладки и просмотра переменных в 1С.

Решение 2: Реализация через один цикл (математический метод)

Иногда перед разработчиком ставится задача реализовать алгоритм в рамках одного цикла. Это требует понимания того, как можно преобразовать порядковый номер итерации в координаты двумерной таблицы. Для этого мы используем функции целочисленного деления Цел() и получения остатка от деления %.

Рассмотрим ситуацию: нам нужно вывести 81 строку (такая математика часто встречается во втором классе). Мы запустим цикл от 0 до 80. Посмотрим на пример кода:


Для Счетчик = 0 По 80 Цикл
    // Вычисляем множимое как целую часть от деления на 9
    Множимое = Цел(Счетчик / 9) + 1;
    // Вычисляем множитель как остаток от деления на 9
    Множитель = (Счетчик % 9) + 1;
    
    Результат = Множимое * Множитель;
    Сообщить(Строка(Множимое) + " * " + Строка(Множитель) + " = " + Строка(Результат));
КонецЦикла;

Выясним причину, почему это работает, ведь подобный генератор математических примеров можно реализовать разными методами. Когда Счетчик равен, например, 10, функция Цел(10 / 9) вернет 1. Прибавив 1, мы получим Множимое = 2. Остаток от деления 10 % 9 равен 1. Прибавив 1, мы получим Множитель = 2. Таким образом, мы имитируем работу двух циклов, используя всего один счетчик. Это отличная демонстрация того, как математика помогает оптимизировать структуру кода.

Решение 3: Формирование таблицы через запрос

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

Мы можем создать временную таблицу с числами от 1 до 9 и соединить её саму с собой без условий связи. Проанализируем фрагмент запроса (в этом поможет универсальная консоль запросов и кода для 1С):


ВЫБРАТЬ
    Ряд1.Число КАК Множимое,
    Ряд2.Число КАК Множитель,
    Ряд1.Число * Ряд2.Число КАК Результат
ИЗ
    (ВЫБРАТЬ 1 КАК Число ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 
     ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 
     ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК Ряд1,
    (ВЫБРАТЬ 1 КАК Число ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 
     ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 
     ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК Ряд2
УПОРЯДОЧИТЬ ПО
    Множимое,
    Множитель

Этот запрос вернет готовую таблицу данных. Программисту останется только обойти результат запроса в цикле и вывести строки в Сообщить(). Важно помнить об инструкции УПОРЯДОЧИТЬ ПО, так как без неё порядок строк в реляционной базе данных не гарантируется.

Решение 4: Красивое форматирование и современные методы

Чтобы таблица не превратилась в «винегрет» и выглядела аккуратно, рекомендуется использовать дополнительные инструменты платформы. Рассмотрим несколько приемов:

  1. Строковая интерполяция: В современных версиях (8.3.18+) можно использовать конструкцию $"", чтобы код выглядел чище: Сообщить($"{Множимое} * {Множитель} = {Множимое * Множитель}");
  2. Функция Формат: Чтобы колонки были ровными, используйте Формат() для выравнивания чисел. Например, чтобы результат всегда занимал 2-3 символа.
  3. СтрСоединить: Постоянный вызов Сообщить() — это ресурсоемкая операция. Гораздо эффективнее собрать все строки в массив, а затем один раз вывести их, используя СтрСоединить(МассивРезультатов, Символы.ПС).

Посмотрим на пример с использованием массива и форматирования для идеального вывода:


СписокСтрок = Новый Массив;
Для Мн1 = 1 По 9 Цикл
    Для Мн2 = 1 По 9 Цикл
        ТекстСтроки = Формат(Мн1, "ЧЦ=1; ЧГ=0") + " * " + Формат(Мн2, "ЧЦ=1; ЧГ=0") + " = " + Формат(Мн1 * Мн2, "ЧЦ=2; ЧГ=0; ЧВН=");
        СписокСтрок.Добавить(ТекстСтроки);
    КонецЦикла;
    СписокСтрок.Добавить(""); // Разделитель между блоками
КонецЦикла;
Сообщить(СтрСоединить(СписокСтрок, Символы.ПС));

В данном коде мы используем Формат с параметром ЧВН= (выводить лидирующие нули или пробелы), чтобы числа стояли строго друг под другом. Использование СтрСоединить позволяет вывести всю таблицу мгновенно, что особенно заметно при больших объемах данных.

Итоги

Мы проанализировали несколько подходов к решению одной задачи. Для учебных целей лучше всего начать с вложенных циклов. Если же вы хотите отточить навыки владения математическими операторами, попробуйте реализовать один цикл с использованием Цел и %. В реальной практике для визуализации данных в 1С чаще применяются ТабличныйДокумент или построители отчетов, но понимание работы циклов — это фундамент, на котором строится вся дальнейшая разработка.

← На главную