Имя: Пароль:
1C
1С v8
Помогите создать обработку изменения табличных частей документа
0 Радим1987
 
21.12.16
14:16
Документ РеализацияТИУ табличная часть товары заполнен , мне надо с помошью обработки достать эту строку и изменить реквизит интерактивно (Количество,Цена итд) и добавить измененные данные на форму документа вместо предыдущих. весь код должен быть в обработке
1 Звездец
 
21.12.16
14:22
что уже сделал для решения проблемы?
2 Wirtuozzz
 
21.12.16
14:24
(0) В чем проблема? на каком месте затык?
3 Радим1987
 
21.12.16
14:26
При передаче измененных данных на форму документа
4 Радим1987
 
21.12.16
14:27
Ошибка "Нельзя изменять поле, содержащее объект данных формы
"
5 Wirtuozzz
 
21.12.16
14:28
(4) Ясно.
6 Радим1987
 
21.12.16
14:29
ДанныеФормыВЗначение — Преобразует данные формы в объект прикладного типа.
ЗначениеВДанныеФормы — Преобразует объект прикладного типа в универсальный объект данных. не работает та же ошибка
7 Радим1987
 
21.12.16
14:30
копироватьДанныеФормы() работает но только не все реквизиты заполняет
8 Wirtuozzz
 
21.12.16
14:30
а почему бы вам не загрузить тз в табличную часть документа, предварительно ее очистив?
9 Радим1987
 
21.12.16
14:31
Пробывал та же ошибка
10 Радим1987
 
21.12.16
14:32
&НаКлиенте
Процедура ПеренестиВТабличнуюЧасть(Команда)
    
    //ДанныеФормы = ЭтаФорма.ВладелецФормы;
    //ЗаполнитьОбъектФормы(Объект, ДанныеФормы.Объект);
  //   ДанныеФормы.Модифицированность = Истина;
  //ЭтаФорма.Закрыть();

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

    //Если ПеренестиВДокумент Тогда
    //    АдресТоваровВХранилище = АдресТоваровВХранилище(ЭтаФорма.УникальныйИдентификатор);
    //Иначе
    //    АдресТоваровВХранилище = Неопределено;
    //КонецЕсли;
    //ВладелецФормы.Объект.Товары.очистить();
    // ПеренестиНаСервере(ВладелецФормы.Объект,АдресТоваровВХранилище);
    //Закрыть(КодВозвратаДиалога.OK);

    //Ответ = Вопрос("закрыть форму. Продолжить?", РежимДиалогаВопрос.ДаНет);
    //
    //    Если Ответ = КодВозвратаДиалога.Нет Тогда
    //        Возврат;
    //    Иначе
    //        ЭтаФорма.Закрыть();
    //    КонецЕсли;
    
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьОбъектФормы(ОбъектФормыИсточник, ОбъектФормыПриемник)
  

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

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

&НаСервере
Процедура ПеренестиНаСервере(НовыйОбъект,Адрес)
    
    
    ТаблицаТоваров = ПолучитьИзВременногоХранилища(Адрес);
    КэшированныеЗначения = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
    
    
    
    Для каждого СтрокаТовара Из ТаблицаТоваров Цикл
        
        ТекущаяСтрока = НовыйОбъект.Товары.Добавить();
        СписокСвойств = "НоменклатураНабора, ХарактеристикаНабора, Номенклатура, Характеристика, Упаковка, ВидЦены, Цена, КоличествоУпаковок, СрокПоставки, ПроцентРучнойСкидки, Серия";
        //Если ЗначениеЗаполнено(Объект.Склад) Тогда
        //    СписокСвойств = СписокСвойств + ", Склад";
        //КонецЕсли;
        ЗаполнитьЗначенияСвойств(ТекущаяСтрока, СтрокаТовара, СписокСвойств);
        
        //ОбновитьОтклоненияОтЗаказаВСтроке(ТекущаяСтрока, Объект.РеализацияПоЗаказам, Объект.ТребуетсяЗалогЗаТару);
        //
        //СтруктураДействий = Новый Структура;
        //СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
        //СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС", Объект.НалогообложениеНДС);
        //СтруктураДействий.Вставить("ЗаполнитьСтавкуНДСВозвратнойТары", Объект.ВернутьМногооборотнуюТару);
        //СтруктураДействий.Вставить("ЗаполнитьПризнакБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару);
        //ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий, Объект);
        //НаправленияДеятельностиКлиентСервер.СтруктураДействийВставитьПриДобавленииСтроки(ЭтаФорма, СтруктураДействий);
        //
        //ОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
    
    КонецЦикла;

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


&НаСервере
Процедура ПеренестиВТабличнуюЧастьНаСервере(НовыйОбъект)

    //Анализ все ли товары и услуги загружены в табличную часть ТоварыУслуги    
    АнализТабличныхЧастей();
    //Перенос на форму документа
    НовыйОбъект.Товары.Очистить();
    Объект.ТоварыУслуги.Сортировать("Нумерация");
    НовыйОбъект.Товары.Загрузить(Объект.ТоварыУслуги.Выгрузить());     

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

//Ищем строки по идентификатору строки
&НаСервере
Процедура АнализТабличныхЧастей()
    
    Для каждого Строка Из Объект.Товары Цикл
             НоваяСтрока = Объект.ТоварыУслуги.Добавить();
             ЗаполнитьЗначенияСвойств(НоваяСтрока,Строка);
            
         КонецЦикла;
    
КонецПроцедуры
11 Wirtuozzz
 
21.12.16
14:34
(10) это надо удалить пока тебя не избили.
12 Wirtuozzz
 
21.12.16
14:34
Зачем ты этот гемморой сделал?
13 Радим1987
 
21.12.16
14:35

&НаКлиенте
Процедура ПеренестиВТабличнуюЧасть(Команда)

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

&НаСервере
Процедура ПеренестиВТабличнуюЧастьНаСервере(НовыйОбъект)

    //Анализ все ли товары и услуги загружены в табличную часть ТоварыУслуги    
    АнализТабличныхЧастей();
    //Перенос на форму документа
    НовыйОбъект.Товары.Очистить();
    Объект.ТоварыУслуги.Сортировать("Нумерация");
    НовыйОбъект.Товары.Загрузить(Объект.ТоварыУслуги.Выгрузить());     

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


&НаСервере
Процедура АнализТабличныхЧастей()
    
    Для каждого Строка Из Объект.Товары Цикл
             НоваяСтрока = Объект.ТоварыУслуги.Добавить();
             ЗаполнитьЗначенияСвойств(НоваяСтрока,Строка);
            
         КонецЦикла;
    
КонецПроцедуры
14 Радим1987
 
21.12.16
14:37
Таким методом все реквизиты заполняется кроме Справочник.Характеристики
15 Wirtuozzz
 
21.12.16
14:39
А у тебя одинаковые наименования реквизитов в обработке и реквизит Характеристика в ТЧ документа? Типы одинаковые?
16 Радим1987
 
21.12.16
14:39
ВладелецФормы.Объект это ДанныеФормыСтруктура
17 Радим1987
 
21.12.16
14:40
Да одинаковые
18 Wirtuozzz
 
21.12.16
14:43
А что отладчик говорит?
19 Радим1987
 
21.12.16
14:53
Здесь реквизит характеристика заполнен как толко отработает вот эта процедура он затирает

КопироватьДанныеФормы(ДанныеФормы.Товары, ВладелецФормы.Объект.Товары);
21 Радим1987
 
21.12.16
15:21
(20) не понял
22 Радим1987
 
21.12.16
15:22
а есть какой нить другой метод ???
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.