Имя: Пароль:
1C
1С v8
ширина и высота колонок и строк в ТЗ на форме
0 inkvizitr
 
13.11.18
09:29
Возможно ли задать ширину и высоту колонок и строк в ТЗ на форме? тут решился написать для себя обработку сапер, немного бывает свободного времени, не пойму как программно задать размеры колонок и строк, ниже текст кода

&НаКлиенте
Процедура Играть(Команда)
    КолонкиИгровогоПоля = Колонки;
    СтрокиИгровогоПоля = Строки;
    БомбыНаИгровомПоле = КолБомб;
    СгенерироватьИгровоеПоле(КолонкиИгровогоПоля, СтрокиИгровогоПоля, БомбыНаИгровомПоле);
КонецПроцедуры

&НаСервере
Процедура СгенерироватьИгровоеПоле(Колонки, Строки, Бомбы)
    ТЗИгровогоПоля = СформируемИгровоеПолеСБомбами(Колонки, Строки, Бомбы);
    ПоместитьТЗИгровогоПоляВРеквизитФормы(ЭтаФорма, "ИгровоеПоле", ТЗИгровогоПоля);
    
    ЗначениеВРеквизитФормы(ТЗИгровогоПоля, "ИгровоеПоле");
КонецПроцедуры    
    
Функция СформируемИгровоеПолеСБомбами(Колонки, Строки, Бомбы)
    
    ТЗИгровогоПоля = Новый ТаблицаЗначений;
    
    // Создаю колонки игрового поля
    Для ИндексКолонки = 1 По Строки Цикл
        ТЗИгровогоПоля.Колонки.Добавить("К" + ИндексКолонки);
    КонецЦикла;    
    
    // Создаю строки игрового поля
    Для ИндексСтрока = 0 По Строки Цикл
        НоваяСтрока = ТЗИгровогоПоля.Добавить();
        Для ИндексКолонки = 0 ПО Колонки - 1 Цикл
            НоваяСтрока.Установить(ИндексКолонки, 0);
        КонецЦикла;    
    КонецЦикла;

    // Подключаю генератор
    ГенСлучЧисел = Новый ГенераторСлучайныхЧисел;
    КолВоБомб = 10;
    РазмерПоля_Х = Строки;
    РазмерПоля_У = Колонки;
    // Разбрасываю по полю бомбы
    СчГенБомб = 1;    
    Пока СчГенБомб <= КолВоБомб Цикл
        
        // Ищим свободную ячейку и вставляем бомбу
        Пока Истина Цикл        
            БомбаПоХ = ГенСлучЧисел.СлучайноеЧисло(0, РазмерПоля_Х - 1);
            БомбаПоУ = ГенСлучЧисел.СлучайноеЧисло(0, РазмерПоля_У - 1);            
            Если ТЗИгровогоПоля[БомбаПоХ][БомбаПоУ] = 0 Тогда                           
                ТЗИгровогоПоля[БомбаПоХ][БомбаПоУ] = Истина;  
                СчГенБомб = СчГенБомб + 1;
                Прервать; // Бомбу вставили, цель достигнута
            КонецЕсли;             
        КонецЦикла;
    КонецЦикла;
    
    Возврат ТЗИгровогоПоля;
    
КонецФункции    

&НаСервере
Процедура ПоместитьТЗИгровогоПоляВРеквизитФормы(Форма, ИмяРеквизитаФормы, ТаблицаЗначений)
    МассивДобавляемыхРеквизитов = Новый Массив;
    МассивДобавляемыхПолей = Новый Массив;
    Для каждого Колонка Из ТаблицаЗначений.Колонки Цикл
        Колонка.Ширина = 2;
        МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения,ИмяРеквизитаФормы , Колонка.Заголовок));  
        НоваяКолонка = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), Элементы[ИмяРеквизитаФормы]);
        МассивДобавляемыхПолей.Добавить(НоваяКолонка);
    КонецЦикла;
    
    ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);

    Для каждого ПолеФормы Из МассивДобавляемыхПолей Цикл
        ПолеФормы.Заголовок = ПолеФормы.Имя;
        ПолеФормы.ПутьКДанным = ИмяРеквизитаФормы +"."+ПолеФормы.Имя;
        ПолеФормы.Вид = ВидПоляФормы.ПолеВвода;
        ПолеФормы.Ширина = 2;
    КонецЦикла;
КонецПроцедуры
1 inkvizitr
 
13.11.18
09:49
Разобрался, спасибо
Закон Брукера: Даже маленькая практика стоит большой теории.