Имя: Пароль:
1C
1С v8
УФ. ТЗ в РеквизитФормы и обратно. Теряется ТипЗначения колонки
0 palpetrovich
 
07.08.21
09:34
ТЗ до:
// ТЗ.Колонки.Карточка.ТипЗначения  Строка, Null    
// ТЗ.Колонки.Товар.ТипЗначения.КвалификаторыСтроки.Длина  10

ЗначениеВРеквизитФормы(ТЗ, "ТаблицаДанных");

ТЗ = РеквизитФормыВЗначение("ТаблицаДанных");  // или ТЗ = ТаблицаДанных.Выгрузить() - результат тот же

ТЗ после:
// ТЗ.Колонки.Карточка.ТипЗначения  (пусто)    
// ТЗ.Колонки.Товар.ТипЗначения.КвалификаторыСтроки.Длина  0

Это можно победить?
1 palpetrovich
 
07.08.21
09:37
+(0)
колонки ТаблицаДанных формирую так, ТипЗначения судя по отладчику устанавливается

МассивРеквизитов.Очистить();
Для Каждого Колонка ИЗ ТЗ.Колонки Цикл
        МассивТипов = Новый Массив;
        МассивТипов.Добавить(Колонка.ТипЗначения);
        НоваяКолонка = Новый РеквизитФормы(Колонка.Имя, Новый ОписаниеТипов(МассивТипов), "ТаблицаДанных");
        МассивРеквизитов.Добавить(НоваяКолонка);
КонецЦикла;
ИзменитьРеквизиты(МассивРеквизитов);
2 palpetrovich
 
07.08.21
10:03
+(0)  семерочное УстановитьПараметрыКолонки порешало-бы проблемку ...эх :(
3 palpetrovich
 
07.08.21
10:13
+(0) жертва копи пасте )
// ТЗ.Колонки.Товар.ТипЗначения.КвалификаторыСтроки.Длина
читать как
// ТЗ.Колонки.Карточка.ТипЗначения.КвалификаторыСтроки.Длина
4 acht
 
07.08.21
11:04
(1) >  ТипЗначения судя по отладчику устанавливается
Во что он устанавливается-то?

> МассивТипов.Добавить(Колонка.ТипЗначения);
Здесь ты запихиваешь в массив значение типа ОписаниеТипов, а не Тип, который ожидает конструктор ОписаниеТипов

> НоваяКолонка = Новый РеквизитФормы(Колонка.Имя, Новый ОписаниеТипов(МассивТипов), "ТаблицаДанных");

А здесь ты создаешь описание типа из странного массива и с неявным указанием КвалификаторыСтроки.Длина = 0.
КвалификаторыСтроки ж оно к описанию типа относятся, не к Тип("Строка")
5 palpetrovich
 
07.08.21
11:13
(4) спасибо, попробую.
Не знаю правда когда, админы базу забрали на обновление :)
6 palpetrovich
 
07.08.21
13:20
(4) Я немного сомневался, ведь в Новый ОписаниеТипов(МассивТипов) - МассивТипов тип ОписаниеТипов со всем содержимым, но сработало. Спасибо

    Для Каждого Колонка ИЗ ТаблицаРезультат.Колонки Цикл
        
        КЧ = Новый КвалификаторыЧисла(Колонка.ТипЗначения.КвалификаторыЧисла.Разрядность, Колонка.ТипЗначения.КвалификаторыЧисла.РазрядностьДробнойЧасти);
        КС = Новый КвалификаторыСтроки(Колонка.ТипЗначения.КвалификаторыСтроки.Длина);
        МассивТипов = Новый Массив;
        Если Колонка.ТипЗначения.СодержитТип(Тип("Строка")) Тогда
            МассивТипов.Добавить(Тип("Строка"));
            ОписаниеТиповС = Новый ОписаниеТипов(МассивТипов, , КС);
            НоваяКолонка = Новый РеквизитФормы(Колонка.Имя, ОписаниеТиповС, "ТаблицаДанных");
        ИначеЕсли Колонка.ТипЗначения.СодержитТип(Тип("Число")) Тогда
            МассивТипов.Добавить(Тип("Число"));
            ОписаниеТиповЧ = Новый ОписаниеТипов(МассивТипов, , КЧ);
            НоваяКолонка = Новый РеквизитФормы(Колонка.Имя, ОписаниеТиповЧ, "ТаблицаДанных");
        Иначе    
            МассивТипов.Добавить(Колонка.ТипЗначения);
            НоваяКолонка = Новый РеквизитФормы(Колонка.Имя, Новый ОписаниеТипов(МассивТипов), "ТаблицаДанных");
        КонецЕсли;    
        
        МассивРеквизитов.Добавить(НоваяКолонка);
    КонецЦикла;
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший