Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Копирование значение табличной части для созданного документа

Копирование значение табличной части для созданного документа
Я
   Александр89
 
01.08.18 - 11:19
Добрый день!
Не подскажите как скопировать значение табличной части для вновь созданного документа (при условии что для него уже скопированы формулы) ))
 
 
   Александр89
 
1 - 01.08.18 - 11:21
&НаКлиенте
Процедура Копировать(Команда)
       
    Если Не ПроверитьЗаполнение() Тогда
        Возврат;
    КонецЕсли;
    
    КопияСсылка = КопироватьРедакция(Объект.Редакция, Объект.Подразделение, Объект.ПериодПланирования, Объект.Статус, Объект.СценарийПланирования  );        
    ОткрытьФорму("Документ.УниверсальнаяФормаОтчетности.ФормаОбъекта", Новый Структура("Ключ", КопияСсылка));
    
    Закрыть();
     
КонецПроцедуры

 
&НаСервереБезКонтекста
Функция КопироватьРедакция(Редакция, Подразделение, ПериодПланирования, Статус, СценарийПланирования )
    
    Копия = Редакция.Скопировать();
    Копия.Наименование = Копия.Наименование + " (Копирование)";
    Копия.Записать();
    //Происходит копирование редакции, установленной в текущем документе.При этом наименование редакции формируется как имеющееся наименование с добавлением  « (Копирование)»;

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

             
         
         
    НовДок = Документы.УниверсальнаяФормаОтчетности.СоздатьДокумент();
    НовДок.Дата = ТекущаяДата();
    НовДок.Подразделение = Подразделение; 
    НовДок.ПериодПланирования = ПериодПланирования; 
    НовДок.Редакция = Копия.Ссылка;
    НовДок.Статус = Статус;     
    
          
    //НовДок.СценарийПланирования = СценарийПланирования;

    НовДок.Записать(РежимЗаписиДокумента.Запись);
    
    //Происходит открытие формы нового документа «Универсальная форма отчетности», при этом создаваемый документ должен быть заполнен аналогично текущему документу 

    //за исключением редакции: для нового документа устанавливается созданная в первом пункте редакция.

    
    Возврат НовДок.Ссылка;
КонецФункции
   aleks_default
 
2 - 01.08.18 - 11:30
Во первых ты вначале создаешь и записываешь Копию редакции, т.е. ссылка на нее уже не будет пустой. Тогда нахрена в цикле ты это условие ставищь
 Если Копия.Пустая () 
            Тогда ?
   Александр89
 
3 - 01.08.18 - 11:36
(2)
Так если пустая тогда и.т.д, а как еще?)
(бывают случаи когда редакция пустая)
   aleks_default
 
4 - 01.08.18 - 11:37
А для того чтобы заполнить ТЧ нового документа из тек документа, ты должен в этой процедуре как-то получить ТЧ текущего документа. Т.е. сначала передать в эту процедуру либо ссылку на тек. документ, чтобы потом запросом к базе данных поучить его ТЧ, либо преобразованную в массив строк его таб. часть.
   Александр89
 
5 - 01.08.18 - 11:41
Получается сделать запрос с ссылкой на данный документ, верно?
   aleks_default
 
6 - 01.08.18 - 11:43
(3)так ты же проверяешь не на пустую редакцию а на пустую копию(записанную!). Почитай в общем про метод Пустая().
   aleks_default
 
7 - 01.08.18 - 11:47
(5)Верно. На документ, с которого нужно сделать копию и ссылка(или таб часть) которого должна быть переданна в процедуру КопироватьРедакция
   Александр89
 
8 - 01.08.18 - 11:51
Запрос = Новый Запрос;
     Запрос.Текст = "ВЫБРАТЬ
                    |    УниверсальнаяФормаОтчетности.Ссылка КАК Ссылка
                    |ИЗ
                    |    Документ.УниверсальнаяФормаОтчетности КАК УниверсальнаяФормаОтчетности";
          ОтборПоказателей = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");

Получается будет еще цикл для строк и колонок, а я думал что это нужно будет писать как так типа НовДОк.Табличнаячасть = ОтборПоказателей.Содержание (хотя не уверен)
   aleks_default
 
9 - 01.08.18 - 12:11
(8)Вобщем,понятно все с вами. Учите матчасть.

Сначала добавь еще один параметр в процедуру
КопияСсылка = КопироватьРедакция(Объект.Редакция, Объект.Подразделение, Объект.ПериодПланирования, Объект.Статус, Объект.СценарийПланирования ,Объект.Ссылка);  

Потом в ней 
после вот этой строки//НовДок.СценарийПланирования = СценарийПланирования;

 пишешь 
Для каждого СтрТекДок из СсылкаНаПереданныйДокумент.НазваниеТабЧасти цикл
НоваяСтрока = НовДок.Добавить();
ЗаполнитьЗначенияСвойств(СтртекДок,НоваяСтрока);
КонецЦикла;
   aleks_default
 
10 - 01.08.18 - 12:12
вернее не так
НоваяСтрока = НовДок.Добавить();

а так
НоваяСтрока = НовДок.НазваниеТабЧасти.Добавить();
 
 Рекламное место пустует
   Александр89
 
11 - 01.08.18 - 12:16
(9) Я только начал изучать 1С )), читаю Радченко, смотрю курсы Чистова, спасибо попробую)) (извиняюсь что чайник в 1С )
   Александр89
 
12 - 01.08.18 - 14:49
(10)  Сделал так, работает, спасибо.
&НаКлиенте
Процедура Копировать(Команда)
       
    Если Не ПроверитьЗаполнение() Тогда
        Возврат;
    КонецЕсли;
    
    КопияСсылка = КопироватьРедакция(Объект.Редакция, Объект.Подразделение, Объект.ПериодПланирования, Объект.Статус, Объект.СценарийПланирования, Объект.Ссылка  );        
    ОткрытьФорму("Документ.УниверсальнаяФормаОтчетности.ФормаОбъекта", Новый Структура("Ключ", КопияСсылка));
    
    Закрыть();
     
КонецПроцедуры

 
&НаСервереБезКонтекста
Функция КопироватьРедакция(Редакция, Подразделение, ПериодПланирования, Статус, СценарийПланирования, Ссылка )
    
     Запрос = Новый Запрос;
     Запрос.Текст = "ВЫБРАТЬ
                    |    УниверсальнаяФормаОтчетности.Ссылка КАК Ссылка
                    |ИЗ
                    |    Документ.УниверсальнаяФормаОтчетности КАК УниверсальнаяФормаОтчетности";
          ОтборПоказателей = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
    
    Копия = Редакция.Скопировать();
    Копия.Наименование = Копия.Наименование + " (Копирование)";
    Копия.Записать();
    //Происходит копирование редакции, установленной в текущем документе.При этом наименование редакции формируется как имеющееся наименование с добавлением  « (Копирование)»;

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

    //        Тогда

    //        НоваяСтрока = НаборЗаписи.Добавить();

    //        ЗаполнитьЗначенияСвойств(НоваяСтрока, Стр);

    //        НоваяСтрока.Редакция = Копия.Ссылка;    

    //    КонецЕсли;                                      

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

    //        Тогда

    //        НоваяСтрока = НаборЗаписи.Добавить();

    //        ЗаполнитьЗначенияСвойств(НоваяСтрока, Стр);

    //        НоваяСтрока.Редакция = Копия.Ссылка;    

    //    КонецЕсли;                                      

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

    //        Тогда

    //        НоваяСтрока = НаборЗаписи.Добавить();

    //        ЗаполнитьЗначенияСвойств(НоваяСтрока, Стр);

    //        НоваяСтрока.Редакция = Копия.Ссылка;    

    //    КонецЕсли;                                          

    КонецЦикла;
    НаборЗаписи.Записать();    
    //Для вновь созданной редакции копируются только формулы, использующие данные текущего документа; 

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

    НовДок.Записать(РежимЗаписиДокумента.Запись);
    
    //Происходит открытие формы нового документа «Универсальная форма отчетности», при этом создаваемый документ должен быть заполнен аналогично текущему документу 

    //за исключением редакции: для нового документа устанавливается созданная в первом пункте редакция.

    
    Возврат НовДок.Ссылка;
   aleks_default
 
13 - 01.08.18 - 14:55
КопироватьРедакция(Редакция, Подразделение, ПериодПланирования, Статус, СценарийПланирования, Ссылка )

Слово "Ссылка" используется во многих контекстах как зарезервированное системой, поэтому не рекомендуется называть так свою внутрипроцедурную переменную. Не привыкай к этому. Лучше назвать как-нибудь с претензией на уникальность, типа: докСсылка, мСсылка, СсылкаНаДокумент и т.п.
   Александр89
 
14 - 01.08.18 - 14:59
Спасибо ))

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует