Home 1C 1с внешние приложения 1С Таблица умножения
1С Таблица умножения PDF Печать E-mail
Автор: А.Волос   

Задача

1. Создать в конфигураторе таблицу значений Таблица1 с одной колонкой Таблица.
2. Программно в созданной таблице значений создать матрицу таблицы умножения.

 

 

 

 

 

 

Решение


&НаКлиенте
Процедура СоздатьТаблицуУмножения(Команда)
        СоздатьТаблицуУмноженияСервер();
КонецПроцедуры

&НаСервере
Процедура СоздатьТаблицуУмноженияСервер()

        Таблица1.Очистить();

        Элементы.Таблица1Таблица.Заголовок = " ";
        Элементы.Таблица1Таблица.ЦветФона = ЦветаСтиля.ЦветФонаКнопки;
        
        МассивРеквизитов = ПолучитьРеквизиты("Таблица1");

        // Проверяем, не были ли дополнительные колонки уже созданы
        Если МассивРеквизитов.Количество() = 1 Тогда 
                // В Таблица1 создаём 9 колонок (Число1 .. Число9). Каждая колонка - это реквизит формы с типом данных Число
                МассивДобавляемыхРеквизитов = Новый Массив; 

                Для Счетчик = 1 По 9 Цикл 
                        МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Число" + Счетчик, Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(2, 0, ДопустимыйЗнак.Неотрицательный)), "Таблица1", Строка(Счетчик))); 
                КонецЦикла;

                ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);

                // Добавляем созданные колонки на форму. Каждая колонка - это элемент формы с типом ПолеФормы
                Для Счетчик = 1 По 9 Цикл 
                    НоваяКолонка                = Элементы.Добавить("Таблица1Число" + Счетчик, Тип("ПолеФормы"), Элементы.Таблица1); 
                    НоваяКолонка.ПутьКДанным    = "Таблица1.Число" + Счетчик;
                    НоваяКолонка.Вид            = ВидПоляФормы.ПолеВвода; 
                    НоваяКолонка.ТолькоПросмотр = Истина;
                КонецЦикла;
        КонецЕсли;
        
        // Заполняем таблицу умножения
        Для Счетчик = 1 По 9 Цикл 
                НоваяСтрока = Таблица1.Добавить();
                НоваяСтрока.Таблица = Счетчик;
                НоваяСтрока.Число1 = Счетчик;
                НоваяСтрока.Число2 = Счетчик * 2;
                НоваяСтрока.Число3 = Счетчик * 3;
                НоваяСтрока.Число4 = Счетчик * 4;
                НоваяСтрока.Число5 = Счетчик * 5;
                НоваяСтрока.Число6 = Счетчик * 6;
                НоваяСтрока.Число7 = Счетчик * 7;
                НоваяСтрока.Число8 = Счетчик * 8;
                НоваяСтрока.Число9 = Счетчик * 9;
        КонецЦикла;
КонецПроцедуры

Анализ решения

Поскольку колонки в ТЗ являются реквизитами формы, то программно они добавляется так:

РеквизТЗ = Новый РеквизитФормы("Число" + Счетчик, Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(2, 0, ДопустимыйЗнак.Неотрицательный)), "Таблица1", Строка(Счетчик));

Инструкция:

Новый РеквизитФормы()

Означает, что будет вызван стандартный конструктор для реквизита формы. Синтаксис конструктора и параметры конструктора:

Новый РеквизитФормы(<Имя>, <Тип>, <Путь>, <Заголовок>, <СохраняемыеДанные>)

Имя (реквизита): "Число" + Счетчик
Тип: Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(2, 0, ДопустимыйЗнак.Неотрицательный))
Путь: "Таблица1"
Заголовок: Строка(Счетчик)
Сохраняемые данные: Пусто (не обязательный параметр)

 

Как видим, для типа реквизита так же использован вызов конструктора: Новый ОписаниеТипов(). Тип: Число, и опять же с помощью конструктора Новый Квалификаторы() указан квалификатор числа. Для типа Строка тут было бы что-то другое.

Поскольку добавление колонок в массив у нас происходит в цикле:

Для Счетчик = 1 По 9 Цикл 
       МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Число" + Счетчик, ... )); 
КонецЦикла;

То видим, что у колонок будут отличаться только Имя колонки и Заголовок. Тип и Путь для всех колонок одинаковы.

После того, как колонки созданы и добавлены в массив, вызывается функция: ИзменитьРеквизиты():

ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);

Синтаксис этой функции:


УправляемаяФорма.ИзменитьРеквизиты (ManagedForm.ChangeAttributes)

УправляемаяФорма (ManagedForm)
ИзменитьРеквизиты (ChangeAttributes)
Синтаксис:

ИзменитьРеквизиты(<ДобавляемыеРеквизиты>, <УдаляемыеРеквизиты>) Параметры:

<ДобавляемыеРеквизиты> (необязательный)
Тип: Массив.
Массив, содержащий объекты типа РеквизитФормы. Добавлять можно реквизиты верхнего уровня и вложенные реквизиты, являющиеся колонками. К добавленным реквизитам верхнего уровня из модуля можно обращаться только с помощью конструкции ЭтаФорма.<Имя реквизита>.

<УдаляемыеРеквизиты> (необязательный)
Тип: Массив.
Массив, содержащий строки, описывающие пути к удаляемым реквизитам. Удалять можно только ранее программно добавленные реквизиты.

Описание:

Изменяет структуру реквизитов формы.
Сначала выполняется удаление реквизитов. Таким образом массивы добавляемых и удаляемых реквизитов могут содержать реквизиты с одинаковым путём.

Доступность: Сервер.

В общем эта функция получает массив реквизитов и добавляет реквизиты в объект (не на форму). Далее добавим реквизиты на форму и свяжем их с реквизитами объекта:

                // Добавляем созданные колонки на форму. Каждая колонка - это элемент формы с типом ПолеФормы
        Для Счетчик = 1 По 9 Цикл 
                НоваяКолонка                = Элементы.Добавить("Таблица1Число" + Счетчик, Тип("ПолеФормы"), Элементы.Таблица1); 
                НоваяКолонка.ПутьКДанным    = "Таблица1.Число" + Счетчик;
                НоваяКолонка.Вид            = ВидПоляФормы.ПолеВвода; 
                НоваяКолонка.ТолькоПросмотр = Истина;
        КонецЦикла;

Здесь Таблица1 - это элемент формы, соответственно Таблица1Число1, Таблица1Число2, Таблица1Число3 и тд - это дочерний элемент элемента формы Таблица1. То есть проще говоря это колонки таблицы Таблица1. Для каждой колонки на форме указывается путь к данным! В данном случае это одноименные реквизиты Таблица1Число1, Таблица1Число2, Таблица1Число3 и тд. Ну и далее инициализация созданной таблицы значений:

        // Заполняем таблицу умножения
        Для Счетчик = 1 По 9 Цикл 
                НоваяСтрока = Таблица1.Добавить();
                НоваяСтрока.Таблица = Счетчик;
                НоваяСтрока.Число1 = Счетчик;
                НоваяСтрока.Число2 = Счетчик * 2;
                НоваяСтрока.Число3 = Счетчик * 3;
                НоваяСтрока.Число4 = Счетчик * 4;
                НоваяСтрока.Число5 = Счетчик * 5;
                НоваяСтрока.Число6 = Счетчик * 6;
                НоваяСтрока.Число7 = Счетчик * 7;
                НоваяСтрока.Число8 = Счетчик * 8;
                НоваяСтрока.Число9 = Счетчик * 9;
        КонецЦикла;

В статье использован материал:
http://novichok1c.ru/forum/zadachka

 

Скачать внешнюю обработку: 1С Таблица умножения

 

Обновлено 23.09.2014 15:42