Имя: Пароль:
1C
1С v8
КД из двух табличных частей в одну.
0 Hans
 
26.02.12
16:55
Изменяю типовые правила из БП 2.0 в УТ 11. Загрузка из 2х таб частей в одну не срабатывает и затирается. Код НеОчищать = Истина;    в обработчике "ПередОбработкой" стоит 2й таб части стоит. Такое ощущение что тут это просто не реализовано.. Кто нибудь в курсе?
1 sergey yevsenya
 
26.02.12
17:09
первая таб часть затирается?
2 Hans
 
26.02.12
17:11
да.. Первая.
3 Rie
 
26.02.12
17:12
(0) Флажок для этого имеется - "Не очищать".
4 Hans
 
26.02.12
17:13
Вот код


Имя                = одАтрибут(ФайлОбмена, ТипСтрока, "Имя");
           НеЗамещатьСвойство = одАтрибут(ФайлОбмена, ТипБулево, "НеЗамещать");
           НеОчищать          = одАтрибут(ФайлОбмена, ТипБулево, "НеОчищать");

           Если ОбъектНайден И НеЗамещатьСвойство Тогда
               
               одПропустить(ФайлОбмена, ИмяУзла);
               Продолжить;
               
           КонецЕсли;
           
           Если Объект = Неопределено Тогда
                   
               СоздатьНовыйОбъект(ТипОбъекта, СвойстваПоиска, Объект, Ложь, , НппСсылки, НППГлобальнойСсылки, Правило, ПараметрыОбъекта);
                                   
           КонецЕсли;
                       
           Если ИмяУзла = "ТабличнаяЧасть" Тогда
               
               // загрузка элементов из табличной части
               ЗагрузитьТабличнуюЧасть(Объект, Имя, ИнформацияОТипах, ПараметрыОбъекта, Правило);
               
           ИначеЕсли ИмяУзла = "НаборЗаписей" Тогда
               
               // загрузка движений
               ЗагрузитьДвижения(Объект, Имя, Не НеОчищать, ИнформацияОТипах, ПараметрыОбъекта, Правило);
               
           КонецЕсли;
5 Hans
 
26.02.12
17:15
Ни как походу этот флаг не обрабатывается.
6 Hans
 
26.02.12
17:15
Я их дом труба шатал этих одинесников.
7 sergey yevsenya
 
26.02.12
17:18
Забыли, сволочи
должно быыть так, наверно:

Если ИмяУзла = "ТабличнаяЧасть" Тогда
               
// загрузка элементов из табличной части
ЗагрузитьТабличнуюЧасть(Объект, Имя, Не НеОчищать, ИнформацияОТипах, НужноЗаписатьОбъект, ПараметрыОбъекта, Правило);
8 Hans
 
26.02.12
17:20
(7) в универсальной загрузке XML так и есть, а то что через планы обмена работает - так не работает.
9 sergey yevsenya
 
26.02.12
17:23
а планы обмена разве не через обработку "ОбменДаннымиXML" работают?
10 Hans
 
26.02.12
17:26
Нет, есть какая то обработка "КонвертацияОбъектовИнформационныхБаз" через нее работают.
11 Hans
 
26.02.12
17:55
Может кому нибудь пригодится. я сегодня почти весь выходной   на это убил.
Процедура ПрочитатьОбъект(УникальныйИдентификаторСтрокой = "")
.......
.......
//добавлен посл параметр
               ЗагрузитьТабличнуюЧасть(Объект, Имя, ИнформацияОТипах, ПараметрыОбъекта, Правило, НЕОчищать);
....
....
КонецПроцедуры;    

Сама процедура:

Процедура ЗагрузитьТабличнуюЧасть(Объект, ИмяТабличнойЧасти, ОбщаяИнформацияОТипеДокумента, ПараметрыОбъекта, ПКО, НеОчищать = ЛОЖЬ)
   
   Перем КлючевыеПоляПоиска;
   Перем МассивКлючевыхПолейПоиска;
   
   Результат = ПолучитьКлючевыеПоляПоискаПоТабличнойЧасти(ПКО, ИмяТабличнойЧасти, МассивКлючевыхПолейПоиска, КлючевыеПоляПоиска);
   
   Если Не Результат Тогда
       одПропустить(ФайлОбмена);
       Возврат;
   КонецЕсли;
   
   УникальныйИдентификатор = СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "_");
   
   ИмяПоляСортировки = "ПолеСортировки_[УникальныйИдентификатор]";
   ИмяПоляСортировки = СтрЗаменить(ИмяПоляСортировки, "[УникальныйИдентификатор]", УникальныйИдентификатор);
   
   ИмяКолонкиИтератора = "ПолеИтератора_[УникальныйИдентификатор]";
   ИмяКолонкиИтератора = СтрЗаменить(ИмяКолонкиИтератора, "[УникальныйИдентификатор]", УникальныйИдентификатор);
   
   ТабличнаяЧастьОбъекта = Объект[ИмяТабличнойЧасти];
   
   КоллекцияОбъекта = ТабличнаяЧастьОбъекта.Выгрузить();
   
   КоллекцияФайлаОбмена = КоллекцияОбъекта.СкопироватьКолонки();
   КоллекцияФайлаОбмена.Колонки.Добавить(ИмяПоляСортировки);
   
   ЗаполнитьКоллекциюФайлаОбмена(Объект, КоллекцияФайлаОбмена, ИмяТабличнойЧасти, ОбщаяИнформацияОТипеДокумента, ПараметрыОбъекта, МассивКлючевыхПолейПоиска, ИмяПоляСортировки);
   
   ДобавитьИтераторТаблице(КоллекцияФайлаОбмена, +1, ИмяКолонкиИтератора);
   ДобавитьИтераторТаблице(КоллекцияОбъекта,     -1, ИмяКолонкиИтератора);
   
   КоллекцияГруппировки = ИнициализацияТаблицыПоКлючевымПолям(МассивКлючевыхПолейПоиска);
   КоллекцияГруппировки.Колонки.Добавить(ИмяКолонкиИтератора);
   
   ЗаполнитьЗначенияСвойствТаблицы(КоллекцияФайлаОбмена, КоллекцияГруппировки);
   ЗаполнитьЗначенияСвойствТаблицы(КоллекцияОбъекта,     КоллекцияГруппировки);
   
   КоллекцияГруппировки.Свернуть(КлючевыеПоляПоиска, ИмяКолонкиИтератора);
   
   КоллекцияСортировки = ТабличнаяЧастьОбъекта.ВыгрузитьКолонки();
   КоллекцияСортировки.Колонки.Добавить(ИмяПоляСортировки);
   
   Для Каждого СтрокаКоллекции ИЗ КоллекцияГруппировки Цикл
       
       // получаем структуру отбора
       Отбор = Новый Структура();
       
       Для Каждого ИмяПоля ИЗ МассивКлючевыхПолейПоиска Цикл
           
           Отбор.Вставить(ИмяПоля, СтрокаКоллекции[ИмяПоля]);
           
       КонецЦикла;
       
       ЗначенияПолейСортировки = Неопределено;
       
       Если СтрокаКоллекции[ИмяКолонкиИтератора] = 0 Тогда
           
           //заполняем строки табличной части из старой версии объекта
           СтрокиКоллекцииОбъекта = КоллекцияОбъекта.НайтиСтроки(Отбор);
           
           ЗначенияПолейСортировки = КоллекцияФайлаОбмена.НайтиСтроки(Отбор);
           
       Иначе
           
           // заполняем строки табличной части из коллекции файла обмена
           СтрокиКоллекцииОбъекта = КоллекцияФайлаОбмена.НайтиСтроки(Отбор);
           
       КонецЕсли;
       
       // добавляем строки табличной части объекта
       Для Каждого СтрокаКоллекции ИЗ СтрокиКоллекцииОбъекта Цикл
           
           СтрокаКоллекцииСортировки = КоллекцияСортировки.Добавить();
           
           ЗаполнитьЗначенияСвойств(СтрокаКоллекцииСортировки, СтрокаКоллекции);
           
           Если ЗначенияПолейСортировки <> Неопределено Тогда
               
               СтрокаКоллекцииСортировки[ИмяПоляСортировки] = ЗначенияПолейСортировки[СтрокиКоллекцииОбъекта.Найти(СтрокаКоллекции)][ИмяПоляСортировки];
               
           КонецЕсли;
           
       КонецЦикла;
       
   КонецЦикла;
   
   КоллекцияСортировки.Сортировать(ИмяПоляСортировки);
   
   // Загружаем результат в табличную часть объекта
   Попытка
       //1Сники сволочи
       Если НЕОчищать Тогда
           Для каждого СтрокаКС Из КоллекцияСортировки Цикл
               НоваяСтрока = ТабличнаяЧастьОбъекта.Добавить();
               ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаКС);
           КонецЦикла;
           
       Иначе
           ТабличнаяЧастьОбъекта.Загрузить(КоллекцияСортировки);
       КонецЕсли;
   
   Исключение
       
       Текст = НСтр("ru = 'Имя табличной части: %1'");
       
       ЗП = ПолучитьСтруктуруЗаписиПротокола(83, ОписаниеОшибки());
       ЗП.Объект     = Объект;
       ЗП.ТипОбъекта = ТипЗнч(Объект);
       ЗП.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, ИмяТабличнойЧасти);
       ЗаписатьВПротоколВыполнения(83, ЗП);
       
       одПропустить(ФайлОбмена);
       Возврат;
   КонецПопытки;
   
КонецПроцедуры
12 Bajen
 
17.03.12
14:25
(11), Эти изменения в УТ 11 добавлял?
13 Hans
 
17.03.12
18:28
да в ут добавлял.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан