Имя: Пароль:
1C
1С v8
1c 8.3 УФ программное создание таблицы
0 illiona
 
naïve
11.10.17
05:47
Добрый день. Ниже представлен код создания таблицы
..............................................................
Группа = Справочники.Склады.НайтиПоНаименованию("КЛ",Истина);
    Запрос = Новый Запрос(
                    "ВЫБРАТЬ
                    |    Номенклатура.Наименование КАК Наименование
                    |ИЗ
                    |    Справочник.Номенклатура КАК Номенклатура
                    |ГДЕ
                    |    Номенклатура.КЛ = &КЛ");
                 Запрос.УстановитьПараметр("КЛ", Истина);
    РезультатЗапроса = Запрос.Выполнить();
    ТЗ1 = Запрос.Выполнить().Выгрузить();
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Номер");
    Для Каждого СтрМассива Из ТЗ1 Цикл
            НаименованиеКолонки = СтрЗаменить(СтрМассива.Наименование," ","");
            ТЗ.Колонки.Добавить(НаименованиеКолонки);
    КонецЦикла;
  
    //Опишем массив реквизитов
      МассивРеквизитов = Новый Массив;
    МассивТипаВыбора = Новый Массив;
    МассивТипаВыбора.Добавить(Тип("ТаблицаЗначений"));
    ОписаниеТипаВыбора = Новый ОписаниеТипов(МассивТипаВыбора);
  
    //Добавим в массив реквизитов таблицу значений
    МассивРеквизитов.Добавить(Новый РеквизитФормы("ДанныеФайла", ОписаниеТипаВыбора));
  
    //Добавим в массив реквизитов колонки таблицы
    Для Каждого Колонка Из ТЗ.Колонки Цикл
        МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, "ДанныеФайла"));
    КонецЦикла;
    
    //Удаляем если существует таблица    
    ЭлементТаблица = Элементы.Найти("ТаблицаДанныхФайла");
    Если ЭлементТаблица <> Неопределено Тогда
        Элементы.Удалить(ЭлементТаблица);
    Иначе
        ИзменитьРеквизиты(МассивРеквизитов);
    КонецЕсли;
    
    //Добавим Таблицу на форму
    ТаблицаДанныхФайла             = Элементы.Добавить("ТаблицаДанныхФайла", Тип("ТаблицаФормы"));
    ТаблицаДанныхФайла.ПутьКДанным = "ДанныеФайла";
    ТаблицаДанныхФайла.Отображение = ОтображениеТаблицы.Список;
    
    
    массивТип = Новый Массив();
    массивТип.Добавить(Тип("Число"));
    ОписаниеТиповСсылка = Новый ОписаниеТипов(массивТип,,,);
    //Добавим колонки
    Для Каждого Колонка Из ТЗ.Колонки Цикл
        НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), ТаблицаДанныхФайла);
        НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
        НовыйЭлемент.ПутьКДанным = "ДанныеФайла." + Колонка.Имя;
    КонецЦикла;  
    
    Запрос1 = Новый Запрос(
    "ВЫБРАТЬ
    |    Склады.Наименование КАК Наименование
    |ИЗ
    |    Справочник.Склады КАК Склады
    |ГДЕ
    |    Склады.Родитель=&Группа");
    Запрос1.УстановитьПараметр("Группа", Группа);
    РезультатЗапроса1 = Запрос1.Выполнить();
    Выборка1 = РезультатЗапроса1.Выбрать();
    //Добавляем строки
    Пока Выборка1.Следующий() Цикл
        Строка = ТЗ.Добавить();
        Строка.Номер = Выборка1.Наименование;
    КонецЦикла;
    ЗначениеВРеквизитФормы(ТЗ,"ДанныеФайла");
.............................................
Не получается ячейке присвоить тип число,постоянно тип нужно выбирать, потом только можно вводить число - это таблица для ввода данных.
Еще попутно вопрос про ячейку в таблице, как можно одну разбить на две для ввода данных
1 perester
 
11.10.17
05:53
ОписаниеЧисла = Новый ОписаниеТипов("Число",
        Новый КвалификаторыЧисла(10, 0))
ТЗ.Колонки.Добавить("Номер", ОписаниеЧисла );
2 illiona
 
naïve
11.10.17
06:08
С типом ячейка получилось. Остался вопрос, как можно одну ячейку разбить на две для ввода данных
3 perester
 
11.10.17
06:16
(2) особо не понял, как это на две для ввода данных?
4 illiona
 
naïve
11.10.17
06:20
да для ввода данных
5 perester
 
11.10.17
06:31
(4) зачем две ячейки? как это должно выглядеть? при чем тут ввод данных?
6 illiona
 
naïve
11.10.17
06:52
Для того чтоб потом на основании этой таблицы потом документ создавался.
Или у колонии две строки под одним названием, в бух 3.0 у документа поступление услуг у номенклатуры так реализовано - там в одной ячейке номенклатура и содержание.
7 Рэйв
 
11.10.17
06:55
(6)Добавь еще колонку.В одно поле все равно не внесешь два значения интерактивно.
8 catena
 
11.10.17
06:56
Скорее всего имеется в виду расположение в той же строке.
9 illiona
 
naïve
11.10.17
07:08
Да в той же строке
10 catena
 
11.10.17
07:14
(9)На сколько я могу судить, в !Ф это решается группой колонок.
11 catena
 
11.10.17
07:14
*в УФ
12 illiona
 
naïve
11.10.17
07:39
а как создать программно группировки?
13 catena
 
11.10.17
07:47
ВсеЭлементыФормы (FormAllItems)
Добавить (Add)
Синтаксис:

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

<Имя> (обязательный)

Тип: Строка.
Уникальное имя добавляемого элемента.
<ТипЭлемента> (обязательный)

Тип: Тип.
Тип добавляемого элемента.
<Родитель> (необязательный)

Тип: ГруппаФормы; ТаблицаФормы; УправляемаяФорма.
Родитель для добавляемого элемента.
Если не указан, то добавляется на верхний уровень.
Возвращаемое значение:

Тип: ДекорацияФормы; ГруппаФормы; КнопкаФормы; ТаблицаФормы; ПолеФормы.

Описание:

Добавляет элемент в коллекцию.
14 perester
 
11.10.17
07:48
а зачем все программно?
15 illiona
 
naïve
12.10.17
05:22
Программно, потому что склады по вертикали, номенклатура по горизонтали, и она может меняться, потому что номенклатура запросом выбирается по условию.
С построением таблица решила.
Теперь другой вопрос появился, после вывода на форму,Названия столбцов всегда разное
Как мне потом обратиться к наименованию колонки, чтоб считать данные?

ЗначениеВРеквизитФормы(ТЗ,"ДанныеФайла");
16 illiona
 
naïve
12.10.17
07:38
Для Каждого ТекСтрока из ЭтаФорма.ДанныеФайла Цикл
Таблица = ЭтаФорма.ДанныеФайла.Выгрузить().Колонки;
i=1;
Пока i < Таблица.Количество() Цикл
НоваяСтрока = ДокПриход.Товары.Добавить();
НазваниеКолонки = Таблица[i].Имя;
Товар = Справочники.Номенклатура.НайтиПоНаименованию(НазваниеКолонки,Истина);
НоваяСтрока.Номенклатура =  Товар.Ссылка;
//НоваяСтрока.Количество = ТекСтрока.   ; // как обратиться к значению в строке
i = i+1;
КонецЦикла;
КонецЦикла

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