Вход | Регистрация

1С:Предприятие ::

Метки: 

1c 8.3 УФ программное создание таблицы

Я
   illiona
 
11.10.17 - 05:47
Добрый день. Ниже представлен код создания таблицы
..............................................................
Группа = Справочники.Склады.НайтиПоНаименованию("КЛ",Истина);
    Запрос = Новый Запрос(
                    "ВЫБРАТЬ
                    |    Номенклатура.Наименование КАК Наименование
                    |ИЗ
                    |    Справочник.Номенклатура КАК Номенклатура
                    |ГДЕ
                    |    Номенклатура.КЛ = &КЛ");
                 Запрос.УстановитьПараметр("КЛ", Истина);
    РезультатЗапроса = Запрос.Выполнить();
    ТЗ1 = Запрос.Выполнить().Выгрузить();
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Номер");
    Для Каждого СтрМассива Из ТЗ1 Цикл
            НаименованиеКолонки = СтрЗаменить(СтрМассива.Наименование," ","");
            ТЗ.Колонки.Добавить(НаименованиеКолонки);
    КонецЦикла;
  
    //Опишем массив реквизитов

      МассивРеквизитов = Новый Массив;
    МассивТипаВыбора = Новый Массив;
    МассивТипаВыбора.Добавить(Тип("ТаблицаЗначений"));
    ОписаниеТипаВыбора = Новый ОписаниеТипов(МассивТипаВыбора);
  
    //Добавим в массив реквизитов таблицу значений

    МассивРеквизитов.Добавить(Новый РеквизитФормы("ДанныеФайла", ОписаниеТипаВыбора));
  
    //Добавим в массив реквизитов колонки таблицы

    Для Каждого Колонка Из ТЗ.Колонки Цикл
        МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, "ДанныеФайла"));
    КонецЦикла;
    
    //Удаляем если существует таблица    

    ЭлементТаблица = Элементы.Найти("ТаблицаДанныхФайла");
    Если ЭлементТаблица <> Неопределено Тогда
        Элементы.Удалить(ЭлементТаблица);
    Иначе
        ИзменитьРеквизиты(МассивРеквизитов);
    КонецЕсли; 
    
    //Добавим Таблицу на форму

    ТаблицаДанныхФайла             = Элементы.Добавить("ТаблицаДанныхФайла", Тип("ТаблицаФормы"));
    ТаблицаДанныхФайла.ПутьКДанным = "ДанныеФайла";
    ТаблицаДанныхФайла.Отображение = ОтображениеТаблицы.Список;
    
    
    массивТип = Новый Массив(); 
    массивТип.Добавить(Тип("Число")); 
    ОписаниеТиповСсылка = Новый ОписаниеТипов(массивТип,,,); 
    //Добавим колонки

    Для Каждого Колонка Из ТЗ.Колонки Цикл
        НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), ТаблицаДанныхФайла);
        НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
        НовыйЭлемент.ПутьКДанным = "ДанныеФайла." + Колонка.Имя;
    КонецЦикла;  
    
    Запрос1 = Новый Запрос(
    "ВЫБРАТЬ
    |    Склады.Наименование КАК Наименование
    |ИЗ
    |    Справочник.Склады КАК Склады
    |ГДЕ
    |    Склады.Родитель=&Группа");
    Запрос1.УстановитьПараметр("Группа", Группа);
    РезультатЗапроса1 = Запрос1.Выполнить();
    Выборка1 = РезультатЗапроса1.Выбрать();
    //Добавляем строки

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

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

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

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

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

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

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

Описание:

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

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

i = i+1;
КонецЦикла;
КонецЦикла

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


Список тем форума
  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует