Задача вывести таблицу умножения в 1С:Предприятие может показаться тривиальной, но на практике она открывает широкие возможности для изучения синтаксиса платформы.hether вы только начинаете осваивать встроенный язык 1С или хотите оптимизировать вывод данных для пользователей — этот пример поможет разобраться с циклами, табличными документами, СКД и даже интерактивными отчётами.
В отличие от классических языков программирования, где таблицу умножения выводят в консоль за 5 строк кода, в 1С есть нюансы: здесь важно учитывать интерфейс пользователя (тонкий клиент, веб, мобильное приложение), версию платформы (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" + РазмерТаблицы);
КонецПроцедуры
🔹 Когда использовать СКД:
- 📋 Нужно интегрировать таблицу в существующий отчёт
- 🔄 Требуются динамические параметры (размер таблицы, стиль оформления)
- 📤 Необходим экспорт в другие форматы с сохранением структуры
4. Вывод в поле HTML-документа (для веб-клиента)
Если ваша конфигурация работает в веб-клиенте или мобильном приложении, классический табличный документ может отображаться некорректно. В этом случае удобно сгенерировать HTML-код и вывести его в поле формы.
Пример кода для формы с полем ПолеHTMLДокумента:
Процедура ВывестиТаблицуУмноженияВHTML(ЭлементФормы)
HTMLТекст = "
";
HTMLТекст = HTMLТекст + "
x ";
// Заголовки столбцов
Для Стл = 1 По 10 Цикл
HTMLТекст = HTMLТекст + "
" + Стл + " ";
КонецЦикла;
HTMLТекст = HTMLТекст + "
";
// Данные таблицы
Для Стр = 1 По 10 Цикл
HTMLТекст = HTMLТекст + "
" + Стр + " ";
Для Стл = 1 По 10 Цикл
HTMLТекст = HTMLТекст + "
" + (Стр * Стл) + " ";
КонецЦикла;
HTMLТекст = HTMLТекст + "
";
КонецЦикла;
HTMLТекст = HTMLТекст + "
";
ЭлементФормы.УстановитьТекст(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С
При работе с таблицей умножения в 1С учитывайте особенности платформы:
🔸 Версия 8.2 vs 8.3:
- В 8.2 нет конструкции
Для Каждого ... Из ... Цикл— используйте классические циклыДляилиПока. - В 8.3 добавлена поддержка
HTML5в поле HTML-документа, что расширяет возможности оформления.
🔸 Производительность:
- Для таблиц больше
20x20избегайте вывода черезСообщить()— используйте табличный документ или СКД. - В веб-клиенте большие таблицы (
50x50) могут подвисать. Решение: реализуйте постраничный вывод.
🔸 Локализация:
- Замените символ умножения
"x"наСимволы.Умножениедля корректного отображения в разных языковых настройках.
⚠️ Внимание: В мобильном клиенте 1С некоторые методы оформления табличных документов (например, ЦветФона) могут не поддерживаться. Всегда тестируйте результат на целевой платформе.
Для кросс-платформенных решений (десктоп + веб + мобильный) оптимально использовать СКД или управляемые формы с таблицей значений.
FAQ: Частые вопросы по выводу таблицы умножения в 1С
Можно ли вывести таблицу умножения в отчёт на СКД без программирования?
Да, но с ограничениями. Вы можете создать внешний отчёт в конфигураторе, где в качестве источника данных использовать запрос вида:
ВЫБРАТЬ
Число1 КАК Строки,
Число2 КАК Столбцы,
Число1 * Число2 КАК Результат
ИЗ
(ВЫБРАТЬ 1 КАК Число1, 1 КАК Число2
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 1, 2
ОБЪЕДИНИТЬ ВСЕ
... // Добавляем все комбинации от 1 до 10
) КАК Числа
Однако такой подход негибкий — для изменения размера таблицы придётся редактировать запрос вручную.
Как сделать, чтобы таблица умножения обновлялась автоматически при изменении размера?
Используйте подписку на событие ПриИзменении для элемента формы (например, поля ввода размера):
Процедура РазмерТаблицыПриИзменении(Элемент)
ТекущийРазмер = Число(ЭлементыФормы.РазмерТаблицы.Значение);
Если ТекущийРазмер > 0 Тогда
ОбновитьТаблицу(ТекущийРазмер);
КонецЕсли;
КонецПроцедуры
Для управляемых форм не забудьте установить свойство АвтоОбновление = Истина у таблицы значений.
Почему в веб-клиенте не отображаются цвета ячеек табличного документа?
В веб-клиенте 1С используется упрощённая версия просмотрщика табличных документов, которая игнорирует:
- Пользовательские цвета (
RGB()) - Сложные границы ячеек
- Некоторые стили шрифтов
🔹 Решение: Используйте предопределённые цвета (Цвет.СветлоСерый) или выводите таблицу через ПолеHTMLДокумента.
Как экспортировать таблицу умножения в Excel с сохранением форматирования?
Для экспорта с форматированием подходит два метода:
- Через табличный документ:
ТабДок.Записать("C:\Temp\Таблица.xlsx", ТипФайлаТабличногоДокумента.XLSX); - Через СКД:
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;ПроцессорВывода.Вывести(РезультатКомпоновки, РезультатВывода);
РезультатВывода.Записать("C:\Temp\Отчёт.xlsx", ТипФайлаТабличногоДокумента.XLSX);
🔹 Важно: В Excel экспортируются только те стили, которые поддерживаются форматом XLSX (например, ЦветФона экспортируется, а ТолщинаГраницы — нет).
Можно ли сделать таблицу умножения кликабельной (с событиями при нажатии на ячейку)?
Да, для этого:
- Создайте управляемую форму с таблицей значений.
- Добавьте обработчик события
ПриАктивизацииСтроки: - Для веб-клиента используйте
ПолеHTMLДокументас JavaScript-обработчиками (требуется знание JS).
Процедура ТаблицаУмноженияПриАктивизацииСтроки(Элемент, Строка, Колонка, СтандартнаяОбработка)
Если Колонка.Имя = "Результат" Тогда
Сообщить("Вы выбрали: " + Строка.Строки + " x " + Строка.Столбцы + " = " + Строка.Результат);
КонецЕсли;
КонецПроцедуры