![]() |
![]() |
![]() |
|
Копирование значение табличной части для созданного документа | ☑ | ||
---|---|---|---|---|
0
Александр89
01.08.18
✎
11:19
|
Добрый день!
Не подскажите как скопировать значение табличной части для вновь созданного документа (при условии что для него уже скопированы формулы) )) |
|||
1
Александр89
01.08.18
✎
11:21
|
&НаКлиенте
Процедура Копировать(Команда) Если Не ПроверитьЗаполнение() Тогда Возврат; КонецЕсли; КопияСсылка = КопироватьРедакция(Объект.Редакция, Объект.Подразделение, Объект.ПериодПланирования, Объект.Статус, Объект.СценарийПланирования ); ОткрытьФорму("Документ.УниверсальнаяФормаОтчетности.ФормаОбъекта", Новый Структура("Ключ", КопияСсылка)); Закрыть(); КонецПроцедуры &НаСервереБезКонтекста Функция КопироватьРедакция(Редакция, Подразделение, ПериодПланирования, Статус, СценарийПланирования ) Копия = Редакция.Скопировать(); Копия.Наименование = Копия.Наименование + " (Копирование)"; Копия.Записать(); //Происходит копирование редакции, установленной в текущем документе.При этом наименование редакции формируется как имеющееся наименование с добавлением « (Копирование)»; Набор = РегистрыСведений.ФормулыШаблонов.СоздатьНаборЗаписей(); Набор.Отбор.Редакция.Установить(Редакция); Набор.Прочитать(); НаборЗаписи = РегистрыСведений.ФормулыШаблонов.СоздатьНаборЗаписей(); НаборЗаписи.Отбор.Редакция.Установить(Копия.ссылка); Для Каждого Стр Из Набор Цикл Если Копия.Пустая () Тогда НоваяСтрока = НаборЗаписи.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Стр); НоваяСтрока.Редакция = Копия.Ссылка; КонецЕсли; КонецЦикла; НаборЗаписи.Записать(); Набор = РегистрыСведений.ПсевдонимыФормулШаблонов.СоздатьНаборЗаписей(); Набор.Отбор.Редакция.Установить(Копия.ссылка); НаборЗаписи = РегистрыСведений.ПсевдонимыФормулШаблонов.СоздатьНаборЗаписей(); НаборЗаписи.Отбор.Редакция.Установить(Копия.ссылка); Для Каждого Стр Из Набор Цикл Если Копия.Пустая () Тогда НоваяСтрока = НаборЗаписи.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Стр); НоваяСтрока.Редакция = Копия.Ссылка; КонецЕсли; КонецЦикла; НаборЗаписи.Записать(); Набор = РегистрыСведений.ОформлениеЯчеек.СоздатьНаборЗаписей(); Набор.Отбор.Редакция.Установить(Копия.ссылка); НаборЗаписи = РегистрыСведений.ОформлениеЯчеек.СоздатьНаборЗаписей(); НаборЗаписи.Отбор.Редакция.Установить(Копия.ссылка); Для Каждого Стр Из Набор Цикл Если Копия.Пустая () Тогда НоваяСтрока = НаборЗаписи.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Стр); НоваяСтрока.Редакция = Копия.Ссылка; КонецЕсли; КонецЦикла; НаборЗаписи.Записать(); //Для вновь созданной редакции копируются только формулы, использующие данные текущего документа; НовДок = Документы.УниверсальнаяФормаОтчетности.СоздатьДокумент(); НовДок.Дата = ТекущаяДата(); НовДок.Подразделение = Подразделение; НовДок.ПериодПланирования = ПериодПланирования; НовДок.Редакция = Копия.Ссылка; НовДок.Статус = Статус; //НовДок.СценарийПланирования = СценарийПланирования; НовДок.Записать(РежимЗаписиДокумента.Запись); //Происходит открытие формы нового документа «Универсальная форма отчетности», при этом создаваемый документ должен быть заполнен аналогично текущему документу //за исключением редакции: для нового документа устанавливается созданная в первом пункте редакция. Возврат НовДок.Ссылка; КонецФункции |
|||
2
aleks_default
01.08.18
✎
11:30
|
Во первых ты вначале создаешь и записываешь Копию редакции, т.е. ссылка на нее уже не будет пустой. Тогда нахрена в цикле ты это условие ставищь
Если Копия.Пустая () Тогда ? |
|||
3
Александр89
01.08.18
✎
11:36
|
(2)
Так если пустая тогда и.т.д, а как еще?) (бывают случаи когда редакция пустая) |
|||
4
aleks_default
01.08.18
✎
11:37
|
А для того чтобы заполнить ТЧ нового документа из тек документа, ты должен в этой процедуре как-то получить ТЧ текущего документа. Т.е. сначала передать в эту процедуру либо ссылку на тек. документ, чтобы потом запросом к базе данных поучить его ТЧ, либо преобразованную в массив строк его таб. часть.
|
|||
5
Александр89
01.08.18
✎
11:41
|
Получается сделать запрос с ссылкой на данный документ, верно?
|
|||
6
aleks_default
01.08.18
✎
11:43
|
(3)так ты же проверяешь не на пустую редакцию а на пустую копию(записанную!). Почитай в общем про метод Пустая().
|
|||
7
aleks_default
01.08.18
✎
11:47
|
(5)Верно. На документ, с которого нужно сделать копию и ссылка(или таб часть) которого должна быть переданна в процедуру КопироватьРедакция
|
|||
8
Александр89
01.08.18
✎
11:51
|
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ | УниверсальнаяФормаОтчетности.Ссылка КАК Ссылка |ИЗ | Документ.УниверсальнаяФормаОтчетности КАК УниверсальнаяФормаОтчетности"; ОтборПоказателей = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); Получается будет еще цикл для строк и колонок, а я думал что это нужно будет писать как так типа НовДОк.Табличнаячасть = ОтборПоказателей.Содержание (хотя не уверен) |
|||
9
aleks_default
01.08.18
✎
12:11
|
(8)Вобщем,понятно все с вами. Учите матчасть.
Сначала добавь еще один параметр в процедуру КопияСсылка = КопироватьРедакция(Объект.Редакция, Объект.Подразделение, Объект.ПериодПланирования, Объект.Статус, Объект.СценарийПланирования ,Объект.Ссылка); Потом в ней после вот этой строки //НовДок.СценарийПланирования = СценарийПланирования; пишешь Для каждого СтрТекДок из СсылкаНаПереданныйДокумент.НазваниеТабЧасти цикл НоваяСтрока = НовДок.Добавить(); ЗаполнитьЗначенияСвойств(СтртекДок,НоваяСтрока); КонецЦикла; |
|||
10
aleks_default
01.08.18
✎
12:12
|
вернее не так
НоваяСтрока = НовДок.Добавить(); а так НоваяСтрока = НовДок.НазваниеТабЧасти.Добавить(); |
|||
11
Александр89
01.08.18
✎
12:16
|
(9) Я только начал изучать 1С )), читаю Радченко, смотрю курсы Чистова, спасибо попробую)) (извиняюсь что чайник в 1С )
|
|||
12
Александр89
01.08.18
✎
14:49
|
(10) Сделал так, работает, спасибо.
&НаКлиенте Процедура Копировать(Команда) Если Не ПроверитьЗаполнение() Тогда Возврат; КонецЕсли; КопияСсылка = КопироватьРедакция(Объект.Редакция, Объект.Подразделение, Объект.ПериодПланирования, Объект.Статус, Объект.СценарийПланирования, Объект.Ссылка ); ОткрытьФорму("Документ.УниверсальнаяФормаОтчетности.ФормаОбъекта", Новый Структура("Ключ", КопияСсылка)); Закрыть(); КонецПроцедуры &НаСервереБезКонтекста Функция КопироватьРедакция(Редакция, Подразделение, ПериодПланирования, Статус, СценарийПланирования, Ссылка ) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | УниверсальнаяФормаОтчетности.Ссылка КАК Ссылка |ИЗ | Документ.УниверсальнаяФормаОтчетности КАК УниверсальнаяФормаОтчетности"; ОтборПоказателей = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); Копия = Редакция.Скопировать(); Копия.Наименование = Копия.Наименование + " (Копирование)"; Копия.Записать(); //Происходит копирование редакции, установленной в текущем документе.При этом наименование редакции формируется как имеющееся наименование с добавлением « (Копирование)»; Набор = РегистрыСведений.ФормулыШаблонов.СоздатьНаборЗаписей(); Набор.Отбор.Редакция.Установить(Редакция); Набор.Прочитать(); НаборЗаписи = РегистрыСведений.ФормулыШаблонов.СоздатьНаборЗаписей(); НаборЗаписи.Отбор.Редакция.Установить(Копия.ссылка); Для Каждого Стр Из Набор Цикл // Если Копия.Пустая () // Тогда // НоваяСтрока = НаборЗаписи.Добавить(); // ЗаполнитьЗначенияСвойств(НоваяСтрока, Стр); // НоваяСтрока.Редакция = Копия.Ссылка; // КонецЕсли; КонецЦикла; НаборЗаписи.Записать(); Набор = РегистрыСведений.ПсевдонимыФормулШаблонов.СоздатьНаборЗаписей(); Набор.Отбор.Редакция.Установить(Копия.ссылка); НаборЗаписи = РегистрыСведений.ПсевдонимыФормулШаблонов.СоздатьНаборЗаписей(); НаборЗаписи.Отбор.Редакция.Установить(Копия.ссылка); Для Каждого Стр Из Набор Цикл // Если Копия.Пустая () // Тогда // НоваяСтрока = НаборЗаписи.Добавить(); // ЗаполнитьЗначенияСвойств(НоваяСтрока, Стр); // НоваяСтрока.Редакция = Копия.Ссылка; // КонецЕсли; КонецЦикла; НаборЗаписи.Записать(); Набор = РегистрыСведений.ОформлениеЯчеек.СоздатьНаборЗаписей(); Набор.Отбор.Редакция.Установить(Копия.ссылка); НаборЗаписи = РегистрыСведений.ОформлениеЯчеек.СоздатьНаборЗаписей(); НаборЗаписи.Отбор.Редакция.Установить(Копия.ссылка); Для Каждого Стр Из Набор Цикл // Если Копия.Пустая () // Тогда // НоваяСтрока = НаборЗаписи.Добавить(); // ЗаполнитьЗначенияСвойств(НоваяСтрока, Стр); // НоваяСтрока.Редакция = Копия.Ссылка; // КонецЕсли; КонецЦикла; НаборЗаписи.Записать(); //Для вновь созданной редакции копируются только формулы, использующие данные текущего документа; НовДок = Документы.УниверсальнаяФормаОтчетности.СоздатьДокумент(); НовДок.Дата = ТекущаяДата(); НовДок.Подразделение = Подразделение; НовДок.ПериодПланирования = ПериодПланирования; НовДок.Редакция = Копия.Ссылка; НовДок.Статус = Статус; Для каждого СтрНовДок из Ссылка.Содержание цикл НоваяСтрока = НовДок.Содержание.Добавить(); НоваяСтрока.Показатель = СтрНовДок.Показатель; НоваяСтрока.Колонка = СтрНовДок.Колонка; НоваяСтрока.ЗначениеЯчейки = СтрНовДок.ЗначениеЯчейки; КонецЦикла; НовДок.Записать(РежимЗаписиДокумента.Запись); //Происходит открытие формы нового документа «Универсальная форма отчетности», при этом создаваемый документ должен быть заполнен аналогично текущему документу //за исключением редакции: для нового документа устанавливается созданная в первом пункте редакция. Возврат НовДок.Ссылка; |
|||
13
aleks_default
01.08.18
✎
14:55
|
КопироватьРедакция(Редакция, Подразделение, ПериодПланирования, Статус, СценарийПланирования, Ссылка )
Слово "Ссылка" используется во многих контекстах как зарезервированное системой, поэтому не рекомендуется называть так свою внутрипроцедурную переменную. Не привыкай к этому. Лучше назвать как-нибудь с претензией на уникальность, типа: докСсылка, мСсылка, СсылкаНаДокумент и т.п. |
|||
14
Александр89
01.08.18
✎
14:59
|
Спасибо ))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |