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

В отличие от классических языков программирования, где таблицу умножения выводят в консоль за 5 строк кода, в есть нюансы: здесь важно учитывать интерфейс пользователя (тонкий клиент, веб, мобильное приложение), версию платформы (8.2 или 8.3) и даже права доступа. В этой статье мы рассмотрим 5 практических способов — от самого простого до профессионального — с примерами кода и пояснениями, когда какой метод уместнее использовать.

⚠️ Внимание: Примеры кода в статье написаны для платформы 1С:Предприятие 8.3.20+. Если вы работаете с версией 8.2, замените конструкции типа Для Каждого ... Из ... Цикл на классические циклы Пока или Для.

1. Вывод в сообщение (самый быстрый способ)

Если вам нужно быстро проверить логику или показать результат без оформления, подойдёт вывод через Сообщить(). Этот метод не требует создания форм или отчётов, но имеет ограничение: текст сообщения обрезается после ~1000 символов.

Пример кода для вывода таблицы умножения на 5 в окно сообщений:

Процедура ВывестиТаблицуУмноженияВСообщение()

Результат = "";

Для Счетчик = 1 По 10 Цикл

Результат = Результат + "5 x " + Счетчик + " = " + (5 * Счетчик) + Символы.ПС;

КонецЦикла;

Сообщить(Результат);

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

Плюсы: минимализм, не требует прав на изменение конфигурации.

Минусы: нет форматирования, ограничение по длине текста, неудобно для больших таблиц (например, 20x20).

💡

Чтобы избежать обрезки текста, разбивайте вывод на несколько сообщений или используйте ПоказатьОповещениеПользователя() с параметром Длительное = Истина

2. Табличный документ: оформление с границами и цветами

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

  • 🎨 Настраивать шрифты, цвета ячеек и границы
  • 📄 Сохранять результат в Excel/PDF
  • 🖱️ Добавлять интерактивность (гиперссылки, группировки)

Пример кода для создания таблицы умножения 10x10 с оформлением:

Процедура ВывестиТаблицуУмноженияВТабличныйДокумент()

ТабДок = Новый ТабличныйДокумент;

ОбластьЯчеек = ТабДок.Область(1, 1, 11, 11);

// Заголовки строк и столбцов

Для НомерСтолбца = 1 По 10 Цикл

ТабДок.Область(1, НомерСтолбца + 1).Текст = ?(НомерСтолбца = 1, "x", НомерСтолбца);

ТабДок.Область(НомерСтолбца + 1, 1).Текст = НомерСтолбца;

ТабДок.Область(1, НомерСтолбца + 1).ГоризонтальноеПоложение = ГоризонтальноеПоложениеТекста.ПоЦентру;

ТабДок.Область(НомерСтолбца + 1, 1).ГоризонтальноеПоложение = ГоризонтальноеПоложениеТекста.ПоЦентру;

КонецЦикла;

// Заполнение таблицы

Для Строки = 1 По 10 Цикл

Для Столбца = 1 По 10 Цикл

ТабДок.Область(Строки + 1, Столбца + 1).Текст = Строки * Столбца;

ТабДок.Область(Строки + 1, Столбца + 1).ГоризонтальноеПоложение = ГоризонтальноеПоложениеТекста.ПоЦентру;

// Чередуем цвета строк для удобства чтения

Если Строки % 2 = 0 Тогда

ТабДок.Область(Строки + 1, Столбца + 1).ЦветФона = RGB(240, 240, 240);

КонецЕсли;

КонецЦикла;

КонецЦикла;

// Настройка границ

ОбластьЯчеек.ТипГраницыЯчейки = ТипГраницыЯчейкиТабличногоДокумента.Все;

ТабДок.Показать();

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

Критическая деталь: В тонком клиенте табличный документ отображается через встроенный просмотрщик, который может игнорировать некоторые параметры оформления (например, RGB()). Для точного контроля используйте Цвет() с предопределёнными значениями:

ТабДок.Область(Строки + 1, Столбца + 1).ЦветФона = Цвет.СветлоСерый;

Создать объект ТабличныйДокумент|Определить область ячеек для заполнения|Настроить заголовки строк/столбцов|Заполнить данные в цикле|Добавить оформление (цвета, границы)|Отобразить документ методом Показать()-->

3. Использование системы компоновки данных (СКД)

Если таблица умножения — часть отчёта с параметрами (например, пользователь выбирает размер таблицы), оптимально использовать СКД. Этот метод требует больше кода, но даёт гибкость:

  • 📊 Динамическое изменение структуры отчёта
  • 🔍 Фильтрация и сортировка
  • 📥 Экспорт в Excel/PDF с сохранением форматирования

Пример создания отчёта с параметром "Размер таблицы":

Процедура ВывестиТаблицуУмноженияЧерезСКД(РазмерТаблицы = 10)

// Создаём схему компоновки данных

СхемаКомпоновки = Новый СхемаКомпоновкиДанных;

СхемаКомпоновки.ИсточникДанных = Новый ОписаниеИсточникаДанных(Новый ИсточникДанныхВыборка);

// Добавляем параметр

ПараметрРазмер = СхемаКомпоновки.ПараметрыДанных.Добавить();

ПараметрРазмер.Имя = "РазмерТаблицы";

ПараметрРазмер.Тип = ТипПараметраКомпоновкиДанных.Значение;

ПараметрРазмер.Значение = РазмерТаблицы;

// Настраиваем набор данных

НаборДанных = СхемаКомпоновки.НаборыДанных.Добавить();

НаборДанных.Имя = "ТаблицаУмножения";

НаборДанных.ИсточникДанных = Новый ОписаниеИсточникаДанных(Новый ИсточникДанныхТаблицаЗначений);

// Формируем таблицу значений с данными

ТЗ = Новый ТаблицаЗначений;

ТЗ.Колонки.Добавить("Строки");

ТЗ.Колонки.Добавить("Столбцы");

ТЗ.Колонки.Добавить("Результат");

Для Стр = 1 По РазмерТаблицы Цикл

Для Стл = 1 По РазмерТаблицы Цикл

НоваяСтрока = ТЗ.Добавить();

НоваяСтрока.Строки = Стр;

НоваяСтрока.Столбцы = Стл;

НоваяСтрока.Результат = Стр * Стл;

КонецЦикла;

КонецЦикла;

НаборДанных.ИсточникДанных.Таблица = ТЗ;

// Настраиваем макет отчёта

Макет = СхемаКомпоновки.Макеты.Добавить();

Макет.Тип = ТипМакетовКомпоновкиДанных.Таблица;

Макет.Имя = "ОсновнойМакет";

ГруппаСтрок = Макет.Структура.Добавить();

ГруппаСтрок.Тип = ТипГруппыКомпоновкиДанных.Группа;

ГруппаСтрок.Поля.Добавить("Строки");

ГруппаКолонок = Макет.Структура.Добавить();

ГруппаКолонок.Тип = ТипГруппыКомпоновкиДанных.Группа;

ГруппаКолонок.Поля.Добавить("Столбцы");

ПолеРезультат = Макет.Структура.Добавить();

ПолеРезультат.Тип = ТипГруппыКомпоновкиДанных.Поле;

ПолеРезультат.Поле = "Результат";

// Выводим отчёт

Настройки = КомпоновщикНастроекКомпоновкиДанных.ПолучитьНастройкиПоУмолчанию(СхемаКомпоновки);

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;

ПроцессорКомпоновки.Инициализировать(СхемаКомпоновки, Настройки);

РезультатКомпоновки = ПроцессорКомпоновки.Выполнить();

РезультатВывода = Новый ТабличныйДокумент;

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

ПроцессорВывода.Вывести(РезультатКомпоновки, РезультатВывода);

РезультатВывода.Показать("Таблица умножения " + РазмерТаблицы + "x" + РазмерТаблицы);

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

🔹 Когда использовать СКД:

  • 📋 Нужно интегрировать таблицу в существующий отчёт
  • 🔄 Требуются динамические параметры (размер таблицы, стиль оформления)
  • 📤 Необходим экспорт в другие форматы с сохранением структуры
📊 Какой метод вывода таблицы умножения в 1С используете чаще?
Сообщение
Табличный документ
СКД (отчёт)
Форма с полем HTML
Другой

4. Вывод в поле HTML-документа (для веб-клиента)

Если ваша конфигурация работает в веб-клиенте или мобильном приложении, классический табличный документ может отображаться некорректно. В этом случае удобно сгенерировать HTML-код и вывести его в поле формы.

Пример кода для формы с полем ПолеHTMLДокумента:

Процедура ВывестиТаблицуУмноженияВHTML(ЭлементФормы)

HTMLТекст = "

";

HTMLТекст = HTMLТекст + "

";

// Заголовки столбцов

Для Стл = 1 По 10 Цикл

HTMLТекст = HTMLТекст + "

";

КонецЦикла;

HTMLТекст = HTMLТекст + "

";

// Данные таблицы

Для Стр = 1 По 10 Цикл

HTMLТекст = HTMLТекст + "

";

Для Стл = 1 По 10 Цикл

HTMLТекст = HTMLТекст + "

";

КонецЦикла;

HTMLТекст = HTMLТекст + "

";

КонецЦикла;

HTMLТекст = HTMLТекст + "

x " + Стл + "
" + Стр + " " + (Стр * Стл) + "
";

ЭлементФормы.УстановитьТекст(HTMLТекст);

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

⚠️ Внимание: При выводе HTML в 1С автоматически экранируются теги для безопасности. Чтобы отключить экранирование, установите свойство поля ТолькоПросмотр = Ложь и HTMLДокумент = Истина в конфигураторе.

Метод вывода Подходит для Сложность реализации Гибкость оформления
Сообщить() Быстрые проверки, отладка ❌ Нет
Табличный документ Локальные отчёты, печать ⭐⭐ ✅ Высокая
СКД Динамические отчёты с параметрами ⭐⭐⭐ ✅ Очень высокая
Поле HTML Веб-клиент, мобильные приложения ⭐⭐ ✅ Средняя (зависит от CSS)

5. Интерактивная таблица на управляемой форме

Для максимальной интерактивности создайте управляемую форму с элементами ТаблицаЗначений и ПолеВвода для выбора размера таблицы. Пользователь сможет:

  • 🔢 Менять размер таблицы "на лету"
  • 🔍 Искать конкретные значения (например, "где результат = 42?")
  • 📥 Копировать данные в Excel

Пример кода для формы:

Перем ТЗТаблицаУмножения;

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

ТЗТаблицаУмножения = Новый ТаблицаЗначений;

ТЗТаблицаУмножения.Колонки.Добавить("Строки", Новый ОписаниеТипов("Число"));

ТЗТаблицаУмножения.Колонки.Добавить("Столбцы", Новый ОписаниеТипов("Число"));

ТЗТаблицаУмножения.Колонки.Добавить("Результат", Новый ОписаниеТипов("Число"));

ОбновитьТаблицу(10);

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

Процедура ОбновитьТаблицу(Размер)

ТЗТаблицаУмножения.Очистить();

Для Стр = 1 По Размер Цикл

Для Стл = 1 По Размер Цикл

НоваяСтрока = ТЗТаблицаУмножения.Добавить();

НоваяСтрока.Строки = Стр;

НоваяСтрока.Столбцы = Стл;

НоваяСтрока.Результат = Стр * Стл;

КонецЦикла;

КонецЦикла;

ЭлементыФормы.ТаблицаУмножения.Значение = ТЗТаблицаУмножения;

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

Процедура РазмерТаблицыИзменение(Элемент)

Размер = Число(Элемент.Значение);

Если Размер > 0 И Размер <= 100 Тогда

ОбновитьТаблицу(Размер);

Иначе

Сообщить("Размер должен быть от 1 до 100!");

КонецЕсли;

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

🔹 Дополнительные возможности:

  • 📌 Добавьте кнопку "Экспорт в Excel" с кодом:
  • ТЗТаблицаУмножения.Записать("C:\Temp\ТаблицаУмножения.xlsx", ТипФайлаТабличногоДокумента.XLSX);
  • 🔍 Реализуйте поиск по результату с помощью метода ТЗТаблицаУмножения.НайтиСтроки().
Как ускорить заполнение большой таблицы (50x50 и более)?

Для ускорения заполнения таблиц большого размера (например, 50x50) используйте метод НачатьИзменение() и ЗакончитьИзменение() для таблицы значений:

ТЗТаблицаУмножения.НачатьИзменение();

Для Стр = 1 По 50 Цикл

Для Стл = 1 По 50 Цикл

НоваяСтрока = ТЗТаблицаУмножения.Добавить();

НоваяСтрока.Строки = Стр;

НоваяСтрока.Столбцы = Стл;

НоваяСтрока.Результат = Стр * Стл;

КонецЦикла;

КонецЦикла;

ТЗТаблицаУмножения.ЗакончитьИзменение();

Это уменьшит количество перерисовок интерфейса и ускорит выполнение в 5-10 раз.

6. Оптимизация и нюансы для разных версий 1С

При работе с таблицей умножения в учитывайте особенности платформы:

🔸 Версия 8.2 vs 8.3:

  • В 8.2 нет конструкции Для Каждого ... Из ... Цикл — используйте классические циклы Для или Пока.
  • В 8.3 добавлена поддержка HTML5 в поле HTML-документа, что расширяет возможности оформления.

🔸 Производительность:

  • Для таблиц больше 20x20 избегайте вывода через Сообщить() — используйте табличный документ или СКД.
  • В веб-клиенте большие таблицы (50x50) могут подвисать. Решение: реализуйте постраничный вывод.

🔸 Локализация:

  • Замените символ умножения "x" на Символы.Умножение для корректного отображения в разных языковых настройках.

⚠️ Внимание: В мобильном клиенте некоторые методы оформления табличных документов (например, ЦветФона) могут не поддерживаться. Всегда тестируйте результат на целевой платформе.

💡

Для кросс-платформенных решений (десктоп + веб + мобильный) оптимально использовать СКД или управляемые формы с таблицей значений.

FAQ: Частые вопросы по выводу таблицы умножения в 1С

Можно ли вывести таблицу умножения в отчёт на СКД без программирования?

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

ВЫБРАТЬ

Число1 КАК Строки,

Число2 КАК Столбцы,

Число1 * Число2 КАК Результат

ИЗ

(ВЫБРАТЬ 1 КАК Число1, 1 КАК Число2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ 1, 2

ОБЪЕДИНИТЬ ВСЕ

... // Добавляем все комбинации от 1 до 10

) КАК Числа

Однако такой подход негибкий — для изменения размера таблицы придётся редактировать запрос вручную.

Как сделать, чтобы таблица умножения обновлялась автоматически при изменении размера?

Используйте подписку на событие ПриИзменении для элемента формы (например, поля ввода размера):

Процедура РазмерТаблицыПриИзменении(Элемент)

ТекущийРазмер = Число(ЭлементыФормы.РазмерТаблицы.Значение);

Если ТекущийРазмер > 0 Тогда

ОбновитьТаблицу(ТекущийРазмер);

КонецЕсли;

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

Для управляемых форм не забудьте установить свойство АвтоОбновление = Истина у таблицы значений.

Почему в веб-клиенте не отображаются цвета ячеек табличного документа?

В веб-клиенте используется упрощённая версия просмотрщика табличных документов, которая игнорирует:

  • Пользовательские цвета (RGB())
  • Сложные границы ячеек
  • Некоторые стили шрифтов

🔹 Решение: Используйте предопределённые цвета (Цвет.СветлоСерый) или выводите таблицу через ПолеHTMLДокумента.

Как экспортировать таблицу умножения в Excel с сохранением форматирования?

Для экспорта с форматированием подходит два метода:

  1. Через табличный документ:
    ТабДок.Записать("C:\Temp\Таблица.xlsx", ТипФайлаТабличногоДокумента.XLSX);
  2. Через СКД:
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    

    ПроцессорВывода.Вывести(РезультатКомпоновки, РезультатВывода);

    РезультатВывода.Записать("C:\Temp\Отчёт.xlsx", ТипФайлаТабличногоДокумента.XLSX);

🔹 Важно: В Excel экспортируются только те стили, которые поддерживаются форматом XLSX (например, ЦветФона экспортируется, а ТолщинаГраницы — нет).

Можно ли сделать таблицу умножения кликабельной (с событиями при нажатии на ячейку)?

Да, для этого:

  1. Создайте управляемую форму с таблицей значений.
  2. Добавьте обработчик события ПриАктивизацииСтроки:
  3. Процедура ТаблицаУмноженияПриАктивизацииСтроки(Элемент, Строка, Колонка, СтандартнаяОбработка)
    

    Если Колонка.Имя = "Результат" Тогда

    Сообщить("Вы выбрали: " + Строка.Строки + " x " + Строка.Столбцы + " = " + Строка.Результат);

    КонецЕсли;

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

  4. Для веб-клиента используйте ПолеHTMLДокумента с JavaScript-обработчиками (требуется знание JS).