Имя: Пароль:
1C
1С v8
Таблица значений на форме обработки
0 location
 
naïve
21.11.16
10:30
Добрый день. Есть обработка с созданием колонок динамическим. Вот когда я формирую данные колонки и их заполняю при считывании файла Excel то все хорошо, но когда я данные колонки формирую при открытии, то они отображаются на форме, но уже при считывании в самой ТЗ колонок нет. Есть только колонки в ЭлементыФормы. Подскажите плз как правильно сформировать колонки при открытии. Просто я их типизировал и на этапе когда они создаются при открытии ничего нельзя выбрать. А если при считывании файла создается, то без проблем можно добавить строки в тз на форме и они будут типизированы. Что я делаю не так?
1 FIXXXL
 
21.11.16
10:44
ИзменитьРеквизиты(<ДобавляемыеРеквизиты>, <УдаляемыеРеквизиты>)
Параметры:

<ДобавляемыеРеквизиты> (необязательный)

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

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

Изменяет структуру реквизитов формы.
Сначала выполняется удаление реквизитов. Таким образом массивы добавляемых и удаляемых реквизитов могут содержать реквизиты с одинаковым путём.
Внимание! Действия добавления и удаления выполняются за один вызов. Следует учитывать, что операция изменения состава реквизитов является ресуркоемкой, поэтому операции изменения состава реквизитов формы выполняются пакетным образом.

Доступность:

Сервер, мобильное приложение(сервер).
2 FIXXXL
 
21.11.16
10:45
(0) поищи в своей конфе пример по ИзменитьРеквизиты
3 location
 
naïve
21.11.16
10:53
(2) это управляемые формы? мне нужно обычные
4 Альбатрос
 
21.11.16
11:12
(3) Покажи код ПриОткрытии()
5 DrShad
 
21.11.16
11:17
СоздатьКолонки()
6 location
 
naïve
21.11.16
11:17

Процедура ПриОткрытии()
    
    Валюта = Константы.ВалютаРегламентированногоУчета.Получить();
    Дата = ТекущаяДата();
    
    Товары.Колонки.Добавить("Артикул", Новый ОписаниеТипов("Строка",,,Новый КвалификаторыСтроки(25)),,10);
    Товары.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
    Товары.Колонки.Добавить("ЕдиницаИзмерения", Новый ОписаниеТипов("СправочникСсылка.ЕдиницыИзмерения"),"Ед. изм",7);
    Товары.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число",,,Новый КвалификаторыЧисла(12,2)),,8);
    
    МассивКолонокПоТипамЦен = ПолучитьКолонкиРозничныхТиповЦен();
    
    Для Каждого ЭлементМассива ИЗ МассивКолонокПоТипамЦен Цикл
            НаименованиеКолонки = СтрЗаменить(ЭлементМассива, " ","");
            Товары.Колонки.Добавить(НаименованиеКолонки, Новый ОписаниеТипов("Булево"),Сред(ЭлементМассива,Найти(ЭлементМассива, "ТП")),7);
    КонецЦикла;
    
    ЭлементыФормы.Товары.Значение = Товары;    
    ЭлементыФормы.Товары.СоздатьКолонки();
    Для каждого Колонка ИЗ ЭлементыФормы.Товары.Колонки Цикл
        Колонка.ИзменениеРазмера = ИзменениеРазмераКолонки.НеИзменять;
    КонецЦикла;
    
    
    ЭлементыФормы.Товары.ФиксацияСлева = 4;
    
КонецПроцедуры

7 Альбатрос
 
21.11.16
11:29
(6) Да все ровно вроде.
Поясни поподробнее про, код покажи:
"...но уже при считывании в самой ТЗ колонок нет"
8 location
 
naïve
21.11.16
11:32
(7) ТЗ на форме появляются, но когда я начинаю ее заполнять простым обычным кодом Строка = Товары.Добавить(), то ругается что колонка Наименование не обнаружена. И да я смотрю что в ТЗ Товары Колонок нет, а в ЭлементыФормы.Товары колонки те что я создал есть.
9 location
 
naïve
21.11.16
11:33
(8) не Наименование, а Номенклатура
10 location
 
naïve
21.11.16
11:37
А когда данный код, то все отлично работает. Но нужно вынести чтобы колонки формировались при открытии, с возможностью не только считывать из екселя а и вручную добавлять
Создание колонок закоменчено, но оно работает. и дальше можно вручную добавлять и изменять данные. А когда делаю то же самое при открытии, добавить строку могу, но что то выбрать нет.


    ДобавленоПозиций = 0; ВсегоПозиций = 0; Пропущено = 0;
    
    
    //Товары.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
    //Товары.Колонки.Добавить("ЕдиницаИзмерения", Новый ОписаниеТипов("СправочникСсылка.ЕдиницыИзмерения"),"Ед. изм",7);
    //Товары.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число",,,Новый КвалификаторыЧисла(12,2)),,8);
    //
    МассивКолонокПоТипамЦен = ПолучитьКолонкиРозничныхТиповЦен();
    //
    //Для Каждого ЭлементМассива ИЗ МассивКолонокПоТипамЦен Цикл
    //        НаименованиеКолонки = СтрЗаменить(ЭлементМассива, " ","");
    //        Товары.Колонки.Добавить(НаименованиеКолонки, Новый ОписаниеТипов("Булево"),Сред(ЭлементМассива,Найти(ЭлементМассива, "ТП")),7);
    //КонецЦикла;
    //
    //ЭлементыФормы.Товары.Значение = Товары;    
    //ЭлементыФормы.Товары.СоздатьКолонки();
    //Для каждого Колонка ИЗ ЭлементыФормы.Товары.Колонки Цикл
    //    Колонка.ИзменениеРазмера = ИзменениеРазмераКолонки.НеИзменять;
    //КонецЦикла;
    
    Для ЭксельСтр = НомерПервойСтрокиExcel по НомерПоследнейСтрокиExcel Цикл
        
        Состояние(Строка(ЭксельСтр));           
        
        Наименование         = СокрЛП(ЛистЭкселя.Cells(ЭксельСтр,НомерКолонкиНаименование).Value());
        
        Если НЕ ЗначениеЗаполнено(Наименование) Тогда //закончилась номенклатруа, дальше подписи
            Прервать;
        КонецЕсли;
        
        ВсегоПозиций = ВсегоПозиций + 1;
        
        
            //поиск по артикулу
            
            Артикул = 0;
            Попытка
                Артикул  = СокрЛП(Формат(ЛистЭкселя.Cells(ЭксельСтр,НомерКолонкиАртикул).Value(), "ЧГ="));
            Исключение
            КонецПопытки;
            
            Если Артикул = 0 Тогда
                Сообщить("Не заполнен артикул, невозможно найти товар " + Наименование, СтатусСообщения.Важное);
                Пропущено = Пропущено + 1;
                Продолжить;                                                                
            КонецЕсли;
            
            // проверить по артикулу         
            ТМЦ = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Артикул);
            Если ЗначениеЗаполнено(ТМЦ) Тогда
                Цена = Число(ЛистЭкселя.Cells(ЭксельСтр,НомерКолонкиЦена).Value());
                СтрокаТЗ = Товары.Добавить();
                СтрокаТЗ.Номенклатура = ТМЦ;
                СтрокаТЗ.Артикул = ТМЦ.Артикул;
                СтрокаТЗ.Цена = Цена;
                СтрокаТЗ.ЕдиницаИзмерения = ТМЦ.ЕдиницаХраненияОстатков;
                
                ДобавленоПозиций = ДобавленоПозиций + 1;
            Иначе
                Сообщить("Товар " + Наименование + ", артикул " + Строка(Артикул) + " не найден в базе", СтатусСообщения.Важное);
                Пропущено = Пропущено + 1;
                Продолжить;
            КонецЕсли;                                                    
    КонецЦикла;
11 Альбатрос
 
21.11.16
11:38
(8) Ищи, где-то у тебя по коду дальше.переопределяется ТЗ "Товары".
12 bolder
 
21.11.16
11:39
(9) А где у тебя в (6) есть Наименование то?
13 location
 
naïve
21.11.16
11:41
(11) все спс, натолкнул на мысль, посмотреть где что. косяк нашел. а то уже запарился.