Имя: Пароль:
1C
 
Как осуществить реструктуризацию ТЧ ?
, ,
0 Олеся999
 
12.03.15
08:18
http://lvkr.ru/f/MyNTXK/1280.jpg
Подскажите пожалуйста каким образом можно осуществить ?
Может кто-нибудь сталкивался с подобной задачей?
1 Otkr
 
12.03.15
08:19
Ничего не понял. Чем отличаются то ТЧ?
2 Dilgorp
 
12.03.15
08:21
(1) может быть размером?
3 Dilgorp
 
12.03.15
08:23
(1)Хотя в первой ПозиционноеОбозначение через запятую, видимо это и разбить надо
4 Dilgorp
 
12.03.15
08:23
(0) ПозиционноеОбозначение - Строка?
5 patria0muerte
 
12.03.15
08:27
Цикл по первой таблице, для каждой строки выполняешь что то типа:МассивСтрок =  ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Строка, ",")

Для каждого элемента получившегося массива добавляешь в нижнюю ТЗ новую строку, где ПозиционноеОборудование = ЭлементМассива а остальное - из строки верхней ТЗ.

При условии конечно, что в позиционном оборудовании - строки
6 patria0muerte
 
12.03.15
08:27
РазложитьСтрокуВМассивПодстрок - функция такая есть в каждой типовой конфигурации..
7 Олеся999
 
12.03.15
08:49
(5) Там не ТЗ а ТЧ
8 Dilgorp
 
12.03.15
08:53
(7) считай ТЗ=ТЧ
9 Олеся999
 
12.03.15
09:54
&НаКлиенте
Процедура Реструкторизировать(Команда)
    РазложитьСтрокуВМассив();
КонецПроцедуры


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

Пишет ошибку :{Справочник.СпецификацияТК.Форма.ФормаЭлемента.Форма(219,2)}: Недостаточно фактических параметров (РазложитьСтрокуВМассив)
    <<?>>РазложитьСтрокуВМассив(); (Проверка: Тонкий клиент)
10 palpetrovich
 
12.03.15
10:06
(9) ну дык,  "Недостаточно фактических параметров" :)
чего раскладываешь укажи
11 Олеся999
 
12.03.15
10:21
(10) я вот и понять не могу, где и как указывается ? в примерах тоже не вижу :(
12 Олеся999
 
12.03.15
10:56
&НаКлиенте
Процедура Реструкторизировать(Команда)
    РеструкторизироватьНаСервере();
КонецПроцедуры


&НаСервере
Процедура РеструкторизироватьНаСервере()

НашМассив = РазложитьСтрокуВМассив(Объект.ТаблицаSMD, ",") ;
Объект.ТаблицаSMDТХ.Выгрузить(НашМассив);


КонецПроцедуры


&НаСервере
Функция РазложитьСтрокуВМассив(Знач Стр , Разделитель = ",") Экспорт
    
    МассивСтрок = Новый Массив();
    Если Разделитель = " " Тогда
        Стр = СокрЛП(Стр);
        Пока 1=1 Цикл
            Поз = Найти(Стр,Разделитель);
            Если Поз=0 Тогда
                МассивСтрок.Добавить(Стр);
                Возврат МассивСтрок;
            КонецЕсли;
            МассивСтрок.Добавить(Лев(Стр,Поз-1));
            Стр = СокрЛ(Сред(Стр,Поз));
        КонецЦикла;
    Иначе
        ДлинаРазделителя = СтрДлина(Разделитель);
        Пока 1=1 Цикл
            Поз = Найти(Стр,Разделитель);
            Если Поз=0 Тогда
                МассивСтрок.Добавить(Стр);
                Возврат МассивСтрок;
            КонецЕсли;
            МассивСтрок.Добавить(Лев(Стр,Поз-1));
            Стр = Сред(Стр,Поз+ДлинаРазделителя);
        КонецЦикла;
    КонецЕсли;
    
КонецФункции    
Пишет ошибку : {Справочник.СпецификацияТК.Форма.ФормаЭлемента.Форма(232)}: Ошибка при вызове метода контекста (Выгрузить)
Объект.ТаблицаSMDТХ.Выгрузить(НашМассив);
по причине:
Несоответствие типов (параметр номер '1')
13 D_E_S_131
 
12.03.15
11:06
НашМассив это не массив строк ТЧ.
14 Бледно Золотистый
 
12.03.15
11:09
(12) Все печально (
15 ks_83
 
12.03.15
11:11
Девушка, вы ведь не работаете программистом, да?
16 mikecool
 
12.03.15
11:13
(15) судя по фото -кальяны раскуривает )
17 Zhuravlik
 
12.03.15
11:18
(0) "Реструктуризировать верхнюю ТЧ в нижнюю ТЧ" - хотя бы так. Потом:
1) Цикл по строкам ТЧ
2) Раскладываем на массив подстрок значения поля "Позиционное обозначение". При этом передавать в параметр разделителя необходимо ", " (запятая пробел). Получаем МассивПодстрок (т.е. для строки "R12, R22" вернется массив с двумя элементами "R12" и "R22").
3) Цикл по массиву подстрок. Добавление новой строки в "нижнЕю ТЧ", заполнение этой строки: позиционное обозначение - текущий элемент МассиваПодстрок, остальное - элементы "Верхней" текущей строки ТЧ (из первого цикла).

Как-то так.
18 D_E_S_131
 
12.03.15
11:24

&НаСервере
Процедура РеструкторизироватьНаСервере()

НашМассив = РазложитьСтрокуВМассив(Объект.ТаблицаSMD, ",") ;
Объект.ТаблицаSMDТХ.Выгрузить(НашМассив);

    ТЧ = Объект.ТаблицаSMD;
    
    ТЗ = ТЧ.ВыгрузитьКолонки();
    
    Для каждого СтрТЧ Из ТЧ Цикл
    
        МассивПозОбоз = РазложитьСтрокуВМассив(СтрТЧ.ПозиционноеОбозначение, ",");
        
        Для каждого ЭлементПозОбоз Из МассивПозОбоз Цикл
        
            НовСтр = ТЗ.Добавить();
            
            НовСтр.ПозиционноеОбозначение = ЭлементПозОбоз;
            НовСтр.Количество             = 1;
            
            ЗаполнитьЗначенияСвойств(НовСтр, СтрТЧ, "MyData, Номенклатура");
        
        КонецЦикла;
    
    КонецЦикла;

    ТЧ.Загрузить(ТЗ);

КонецПроцедуры
19 D_E_S_131
 
12.03.15
11:24
+ к (18) удалить строки

НашМассив = РазложитьСтрокуВМассив(Объект.ТаблицаSMD, ",") ;
Объект.ТаблицаSMDТХ.Выгрузить(НашМассив);
20 Олеся999
 
12.03.15
11:53
&НаСервере
Процедура РеструкторизироватьНаСервере()

//НашМассив = РазложитьСтрокуВМассив(Объект.ТаблицаSMD, ",") ;
//Объект.ТаблицаSMDТХ.Выгрузить(НашМассив);

     ТЧ = Объект.ТаблицаSMD;
    
    ТЗ = ТЧ.Выгрузить();     // Тут я поменяла с ТЗ = ТЧ.ВыгрузитьКолонки(); на   ТЗ = ТЧ.Выгрузить();
    Для каждого СтрТЧ Из ТЧ Цикл
    
        МассивПозОбоз = РазложитьСтрокуВМассив(СтрТЧ.ПозиционноеОбозначение, ",");
        
        Для каждого ЭлементПозОбоз Из МассивПозОбоз Цикл
        
            НовСтр = ТЗ.Добавить();
            
            НовСтр.ПозиционноеОбозначение = ЭлементПозОбоз;
            НовСтр.Количество             = 1;
            
            ЗаполнитьЗначенияСвойств(НовСтр, СтрТЧ, "MyData, Номенклатура");
        
        КонецЦикла;
    
    КонецЦикла;

    ТЧ.Загрузить(ТЗ);

КонецПроцедуры



Пишет ошибку : {Справочник.СпецификацияТК.Форма.ФормаЭлемента.Форма(250)}: Поле объекта не обнаружено (ПозиционноеОбозначение)
        МассивПозОбоз = РазложитьСтрокуВМассив(СтрТЧ.ПозиционноеОбозначение, ",");
21 Олеся999
 
12.03.15
11:57
А все разобралась спасибо :)
22 Олеся999
 
12.03.15
12:11
А еще вопросик :)  а как сделать чтобы в Объект.ТаблицаSMDТХ загружалось а не в Объект.ТаблицаSMD; А то она выгружает в ту же ТЧ из которой берет:)
23 Олеся999
 
12.03.15
12:18
(22) Глупый вопрос задала сделала так     Объект.ТаблицаSMDТХ.Загрузить(ТЗ);
24 D_E_S_131
 
12.03.15
14:44
Ну вот, уже самостоятельно получается что-то. А то все "кальяньщица", "кальяньщица" говорят. :)