|
v7: Копирование всех реквизитов из старого документа во вновьсозданный | ☑ | ||
---|---|---|---|---|
0
Enlighted
18.05.16
✎
00:21
|
Добрый вечер волшебники.
Вопрос собственно такой: Программно Создаётся документ, надо в него скопировать абсолютно все реквизиты включая табличные из (текущего/другого) документа того же типа. Есть ли способ сделать это автоматом, или обязательно надо приравнивать каждый реквизит нового документа к аналогичному реквизиту старого документа? |
|||
1
Jaap Vduul
18.05.16
✎
00:48
|
Реквизиты шапки можно через метаданные перечислить и скопировать через ПолучитьАтрибут/УстановитьАтрибут.
Табличную часть проще всего через Выгрузить/ЗагрузитьТабличнуюЧасть. |
|||
2
Enlighted
18.05.16
✎
01:09
|
(1) Если я верно понял, то получить атрибут работает только с одним конкретным атрибутом, то-есть все равно придётся перечислять все атрибуты по одному.
|
|||
3
Вуглускр1991
18.05.16
✎
01:40
|
Сериализуй объект в джейсон и поменяй там УИД, потом получи объект обратно.
|
|||
4
Злопчинский
18.05.16
✎
03:19
|
(2) не сношай мозг
Открой типовую тис и найди в ней процедуру СкопироватьРеквизитыШапки А тч копируется тремя операторами |
|||
5
Bigbro
18.05.16
✎
05:48
|
(2) зачем перечислять можно обойти циклом через метаданные - будет работать универсально.
|
|||
6
Enlighted
18.05.16
✎
06:17
|
(4) К сожалению это не типовая тис, такой процедуры не значится.
Конфигурация судя по всему банковская или ломбардная. С ампутированными ногами и велосипедом вместо одной из них и костылём вместо другой. Посему решение вижу только в использовании родных методов платформы а не конфигурации. А вот как тч скопировать тремя операторами это уже интересно, сейчас поищу. |
|||
7
Enlighted
18.05.16
✎
06:39
|
Нашёл такое решение для ТЧ
НовыйЗБ.ТабличнаяЧасть.Загрузить(ТекущийЗБ.ТабличнаяЧасть.Выгрузить()) однако ошибка: Поле агрегатного объекта не обнаружено (ТабличнаяЧасть) |
|||
8
Mikeware
18.05.16
✎
06:53
|
(7) Открой для себя Синтакс-помощник....
|
|||
9
73с
18.05.16
✎
07:14
|
(6) а кто не даёт позаимствовать идею из типовой?
|
|||
10
Mikeware
18.05.16
✎
07:15
|
(9) отсутсвие типовой :-)
|
|||
11
Enlighted
18.05.16
✎
07:15
|
(9) Типовую надо искать/качать/покупать вот в чем бида.
|
|||
12
Enlighted
18.05.16
✎
07:23
|
Хорошо решение для ТЧ с помощью тычков прикладом в спину с вашей стороны нашёл:
ТабличнаяЧастьНаЭкспорт = СоздатьОбъект("ТаблицаЗначений"); ТекущийЗБ.ВыгрузитьТабличнуюЧасть(ТабличнаяЧастьНаЭкспорт); НовыйЗБ.ЗагрузитьТабличнуюЧасть(ТабличнаяЧастьНаЭкспорт); Теперь подобное решение для остальных реквизитов было бы просто замечато. |
|||
13
Bigbro
18.05.16
✎
07:38
|
вот тут справка по работе с метаданными в 77
http://catalog.mista.ru/public/65108/ |
|||
14
Bigbro
18.05.16
✎
07:47
|
перебор циклом через общие реквизиты, затем через реквизиты шапки документа. не забыть про тип и вид для неопределенных типов.
|
|||
15
HawkEye
18.05.16
✎
08:19
|
(0) способ есть!
два цикла + загрузить/выгрузить ТЧ |
|||
16
Enlighted
18.05.16
✎
08:35
|
так назрел вопрос:
"общие реквизиты документа" чем отличаются от "реквизитов шапки"? |
|||
17
Mikeware
18.05.16
✎
08:45
|
(16) Тем, что они общие для всех документов. в дереве метаданных они находятся в другом месте.
физически общие реквизиты без отбора почти ничем. Общие реквизиты с отбором сидят в тапблице 1сджорн. |
|||
18
73с
18.05.16
✎
08:48
|
(16) общие относятся ко ВСЕМ документам и их не будет в переборе реквизитов шапки конкретного вида документа через метаданные
|
|||
19
HawkEye
18.05.16
✎
08:55
|
(16) для этого и нужен второй цикл...
|
|||
20
los_hooliganos
18.05.16
✎
09:01
|
Document newDoc = oldDoc.clone()
|
|||
21
FIXXXL
18.05.16
✎
09:17
|
а в 7-ке нет у документа метода Скопировать()?
|
|||
22
Enlighted
18.05.16
✎
09:39
|
(20) НовыйЗБ=ТекущийЗБ.clone();
{Документ.ВозвратСсуды.Форма.Модуль(710)}: Поле агрегатного объекта не обнаружено (clone) (21) Не нашел такого |
|||
23
HawkEye
18.05.16
✎
09:47
|
(22) советую прислушаться к (8)...
|
|||
24
HawkEye
18.05.16
✎
09:48
|
(21) Скопировать - нет.
|
|||
25
Enlighted
18.05.16
✎
09:50
|
(23) в синтаксис помощнике как раз таки и не нашел метод Скопировать, clone в синтаксис помощьнике как метод документа тоже отсутствует.
|
|||
26
HawkEye
18.05.16
✎
09:51
|
(25) если ты их там не нашел, зачем тогда рожал (22)?
|
|||
27
aka AMIGO
18.05.16
✎
09:55
|
(25)
Вот тебе процедура из типовой ТиС, если поможет: Процедура СкопироватьРеквизитыШапки(ДокОткуда, ДокКуда) // общие реквизиты Для Сч = 1 По Метаданные.ОбщийРеквизитДокумента() Цикл ИдентРекв = Метаданные.ОбщийРеквизитДокумента(Сч).Идентификатор; ДокКуда.УстановитьАтрибут(ИдентРекв,ДокОткуда.ПолучитьАтрибут(ИдентРекв)); КонецЦикла; // совпадающие реквизиты шапки Для Сч = 1 По Метаданные.Документ(ДокОткуда.Вид()).РеквизитШапки() Цикл ИдентРекв = Метаданные.Документ(ДокОткуда.Вид()).РеквизитШапки(Сч).Идентификатор; Если Метаданные.Документ(ДокКуда.Вид()).РеквизитШапки(ИдентРекв).Выбран()=1 Тогда ДокКуда.УстановитьАтрибут(ИдентРекв,ДокОткуда.ПолучитьАтрибут(ИдентРекв)); КонецЕсли; КонецЦикла; ДокКуда.УстановитьНовыйНомер(СокрЛП(Константа.ПрефиксИБ) + СокрЛП(Фирма.ЮрЛицо.ПрефиксНомеровДокументов)); КонецПроцедуры // СкопироватьРеквизитыШапки() |
|||
28
aka AMIGO
18.05.16
✎
09:56
|
+27, а да! забыл про старт! типа так:
СкопироватьРеквизитыШапки(Контекст, ДокРеализация); |
|||
29
Enlighted
18.05.16
✎
09:58
|
(28) Ну это не тонкий намёк уже и даже не толстый :).
Однако благодарю сейчас буду мастырить. |
|||
30
Enlighted
18.05.16
✎
12:40
|
Блин вроде с реквизитами разобрался, теперь ТЧ. при тесте этого:
ТабличнаяЧастьНаЭкспорт = СоздатьОбъект("ТаблицаЗначений"); ТекущийЗБ.ВыгрузитьТабличнуюЧасть(ТабличнаяЧастьНаЭкспорт); НовыйЗБ.ЗагрузитьТабличнуюЧасть(ТабличнаяЧастьНаЭкспорт); 1с вылетает с ошибкой. Если закомментить последнюю строчку то не вылетает. |
|||
31
aka AMIGO
18.05.16
✎
12:41
|
(30) реквизиты все совпадают?
|
|||
32
Enlighted
18.05.16
✎
12:53
|
(31) Почему бы документы одного типа, НовыйЗБ вообще пустой.
|
|||
34
aka AMIGO
18.05.16
✎
12:58
|
ммм.. отбой моему вопросу..
|
|||
35
vladko
18.05.16
✎
13:57
|
(30) а как хоть вылетает? по-подробнее чуть...
|
|||
36
Enlighted
18.05.16
✎
14:59
|
Прекращена работа программы "1С:V7 starter program (for SQL)"
Windows может произвести поиск способа устранения этой ошибки в интернете... Закрыть программу Сигнатура проблемы: Имя события проблемы: APPCRASH Имя приложения: 1cv7s.exe Версия приложения: 7.70.0.18 Отметка времени приложения: 3ba747d9 Имя модуля с ошибкой: BkEnd.dll Версия модуля с ошибкой: 7.70.0.27 Отметка времени модуля с ошибкой: 4573f811 Код исключения: c0000005 Смещение исключения: 00129f4c Версия ОС: 6.1.7601.2.1.0.256.1 Код языка: 1049 Дополнительные сведения 1: 0a9e Дополнительные сведения 2: 0a9e372d3b4ad19135b953a78882e789 Дополнительные сведения 3: 0a9e Дополнительные сведения 4: 0a9e372d3b4ad19135b953a78882e789 Ознакомьтесь с заявлением о конфиденциальности в Интернете: http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0419 Если заявление о конфиденциальности в Интернете недоступно, ознакомьтесь с его локальным вариантом: C:\Windows\system32\ru-RU\erofflps.txt |
|||
37
Mikeware
18.05.16
✎
15:01
|
(30) хосспадя. ну сделай через обход метаданных. Там добавить-то три строчки...
|
|||
38
aleks_default
18.05.16
✎
15:08
|
ДокументОбъект.<Имя документа> (DocumentObject.<Имя документа>)
Скопировать (Copy) Синтаксис: Скопировать() Возвращаемое значение: Тип: ДокументОбъект. Описание: Создает новый документ копированием существующего. Доступность: Сервер, толстый клиент, внешнее соединение. Примечание: Использование метода не приводит к записи созданного объекта в базу данных. Пример: Объект = ВыбДокумент.Скопировать(); См. также: ДокументОбъект, событие ПриКопировании |
|||
39
Mikeware
18.05.16
✎
15:15
|
(38) Это 7.7
причем чистая. |
|||
40
aleks_default
18.05.16
✎
15:17
|
(39)А че, там такого нет? Как так? Восьмерка же сырая еще, а семерка уже обкатанная.
|
|||
41
Mikeware
18.05.16
✎
15:27
|
(40) ну, у меня в семерке такого можно сделать, не проблема. а вот у него нельзя. да и ненужно... Хватает имеющихся методов
|
|||
42
Enlighted
18.05.16
✎
15:34
|
(38)
НовыйЗБ = СоздатьОбъект("Документ.ЗалоговыйБилет"); ТекущийЗБ = СоздатьОбъект("Документ.ЗалоговыйБилет"); ТекущийЗБ.НайтиДокумент(Основание); НовыйЗБ = ТекущийЗБ.Скопировать(); Еггог: НовыйЗБ = ТекущийЗБ.Скопировать(); {Документ.ВозвратСсуды.Форма.Модуль(695)}: Поле агрегатного объекта не обнаружено (Скопировать) |
|||
43
aka AMIGO
18.05.16
✎
15:38
|
(42) у тебя не установлен openconf?
Если нет - рекомендую, в нём после точки выскакивает список допустимых параметров/аргументов, по крайней мере увидишь, можно или нет подставлять твоё ..Скопировать() |
|||
44
aleks_default
18.05.16
✎
15:39
|
(41)А народ жалуется, что в восьмерке кода писать больше приходится...
(42) Переходи в нашу веру, чувак. |
|||
45
aka AMIGO
18.05.16
✎
15:42
|
(43) + "XBASE.Методы.Скопировать()" - в синтакспомощнике. Никак этот метод не подходит для копирования документов или еще чего.
|
|||
46
aleks_default
18.05.16
✎
15:42
|
Во имя СКД, Клиента и Сервера!
|
|||
47
Builder
18.05.16
✎
15:43
|
(36) 18 релиз ????
Ну вы блин даете.... (с) |
|||
48
Mikeware
18.05.16
✎
15:45
|
(43) зато у него установлен 18 релиз...
|
|||
49
aka AMIGO
18.05.16
✎
15:49
|
(47) (48) Да, грустно это всё..
|
|||
50
Builder
18.05.16
✎
15:52
|
НовыйЗБ = СоздатьОбъект("Документ.ЗалоговыйБилет");
глЗаполнитьШапкуНаОсн(НовыйЗБ,Основание); // дальше твой код вроде рабочий. ТабличнаяЧастьНаЭкспорт = СоздатьОбъект("ТаблицаЗначений"); ТекущийЗБ.ВыгрузитьТабличнуюЧасть(ТабличнаяЧастьНаЭкспорт); НовыйЗБ.ЗагрузитьТабличнуюЧасть(ТабличнаяЧастьНаЭкспорт); НовыйЗБ.Записать(); И эта, поставь 27 релиз обязательно! |
|||
51
Builder
18.05.16
✎
15:55
|
+ к (50) Реквизиты там попутал.
ТекущийЗБ.ВыгрузитьТабличнуюЧасть(ТабличнаяЧастьНаЭкспорт); заменить на Основание.ВыгрузитьТабличнуюЧасть(ТабличнаяЧастьНаЭкспорт); И вот этот код твой лишний, можно работать прямо с реквизитом "Основание", если ты его не меняешь: ТекущийЗБ = СоздатьОбъект("Документ.ЗалоговыйБилет"); ТекущийЗБ.НайтиДокумент(Основание); |
|||
52
Enlighted
18.05.16
✎
15:57
|
сейчас качну 27 релиз платформы, попробую.
|
|||
53
aka AMIGO
18.05.16
✎
16:16
|
(52) Загляни в свою почту.
|
|||
54
Злопчинский
18.05.16
✎
16:38
|
(6) тупой, да? читать не умеешь?
я про ТВОЮ нетиповую конфигурацию не говорил. еще раз: не сношай мозг Открой типовую тис и найди в ней процедуру СкопироватьРеквизитыШапки |
|||
55
aka AMIGO
18.05.16
✎
16:40
|
(54) Друже, у него, похоже нет типовой
|
|||
56
aka AMIGO
18.05.16
✎
16:44
|
(55)+ в личке "Бишкек, Кыргызстан", есть там франчайзи, или нет - не знаю, но, думаю проблемы точно есть. Кто-то поставил 1С на комп, и сказал: "работайте, другого ничего нет"
|
|||
57
Злопчинский
18.05.16
✎
17:11
|
(55) оказываю услуги по семерке. удаленно. народ не жаловался. оказывал в тч и с среднеазиатские. лишь бы коннект был. ихние типовые похожи на россиняские либо с изменениячми либо на основе старых релизов/редакций.
|
|||
58
Злопчинский
18.05.16
✎
17:12
|
//******************************************************************************
// СкопироватьРеквизитыШапки(ДокОткуда, ДокКуда) // Параметры: // ДокОткуда - документ, из которого производится копирование реквизитов // ДокКуда - документ, в который производится копирование реквизитов // Возвращаемое значение: Нет // Вызывается из формул элементов диалога: // Описание: Производит копирование реквизитов общих и шапки, имеющих один. идентификатор. Процедура СкопироватьРеквизитыШапки(ДокОткуда, ДокКуда) Экспорт // общие реквизиты Для Сч = 1 По Метаданные.ОбщийРеквизитДокумента() Цикл ИдентРекв = Метаданные.ОбщийРеквизитДокумента(Сч).Идентификатор; ДокКуда.УстановитьАтрибут(ИдентРекв,ДокОткуда.ПолучитьАтрибут(ИдентРекв)); КонецЦикла; // совпадающие реквизиты шапки Для Сч = 1 По Метаданные.Документ(ДокОткуда.Вид()).РеквизитШапки() Цикл ИдентРекв = Метаданные.Документ(ДокОткуда.Вид()).РеквизитШапки(Сч).Идентификатор; Если Метаданные.Документ(ДокКуда.Вид()).РеквизитШапки(ИдентРекв).Выбран()=1 Тогда ДокКуда.УстановитьАтрибут(ИдентРекв,ДокОткуда.ПолучитьАтрибут(ИдентРекв)); КонецЕсли; КонецЦикла; ДокКуда.УстановитьНовыйНомер(СокрЛП(Константа.ПрефиксИБ) + СокрЛП(ДокОткуда.Фирма.ЮрЛицо.ПрефиксНомеровДокументов)); КонецПроцедуры // СкопироватьРеквизитыШапки() |
|||
59
Enlighted
21.05.16
✎
08:34
|
Всех благодарю за участие, процедура помогла даже слишком, оказалось всех полей более чем нужно. Всеравно перенос данных пришлось организовывать простым присвоением. Но с ТЧ всё отлично, на релизе 27 работает без ошибок.
Процедурку изучил, приму к сведению в следующий раз. |
|||
60
breezee
21.05.16
✎
08:55
|
(12) Почему "СоздатьОбъект()", а не "тз = Новый Таблица значений". Есть же специальные функции...
|
|||
61
ДенисЧ
21.05.16
✎
09:32
|
(60) Потому что 77
|
|||
62
Enlighted
21.05.16
✎
09:50
|
(60) Потому что бюджет ограничен :)
|
|||
63
Enlighted
21.05.16
✎
09:54
|
На 1с-ника.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |