|
v7: Программное копирование документа. | ☑ | ||
---|---|---|---|---|
0
Eeakie
10.06.14
✎
17:54
|
Добрый вечер.
Программно копирую документ, но не могу потом поймать его контекст. Делаю через: 1. Открывается журнал документа и документ делается активным (АктивизироватьОбъект); 2. Копирую документ, Сервис.ЭмулироватьКлавиатуру("{F9}"); 3. Журнал закрывается. В итоге у меня есть скопированный документ, но нет к нему доступа. Пробовал через АктивныйКонтекст(), но ловится только документ-исходник. Есть какой-нибудь вариант поймать контекст копии? Можно, я так понимаю, сделать просто через "ОткрытьФорму()" новый документ и скопировать через метаданные все атрибуты. И контекст там будет, но это второй вариант. |
|||
1
ДенисЧ
10.06.14
✎
17:55
|
А зачем такой гемор?
Не проще ли программно его скопировать, заполнив по метаданным? |
|||
2
Eeakie
10.06.14
✎
17:57
|
(1) Казалось что проще сэмулировать копирование, чем заполнять по метаданным.
|
|||
3
ДенисЧ
10.06.14
✎
17:58
|
(2) хм... Ты всегда левое ухо правой ногой чешешь?
|
|||
4
Eeakie
10.06.14
✎
18:02
|
(3) Понял. Делаю через мета.
|
|||
5
Fedor-1971
10.06.14
✎
18:04
|
(0) Что сделать то хочешь?
|
|||
6
Fedor-1971
10.06.14
✎
18:05
|
(5)+ В смысле какая исходная задача для копирования документа?
|
|||
7
Ёпрст
10.06.14
✎
18:06
|
всего-то примитивный запрос на insert в пару-тройку табличек.
|
|||
8
Eeakie
10.06.14
✎
18:22
|
(6) Надо в документе сделать кнопку, которая будет делать идентичный документ, но разбивать табличную часть по условию. Т.е. какая-то часть строк останется в первом документе, а остальные перейдут в копию.
(7) Да я был бы рад сделать прямым, но пока что не имею представления как это сделать. |
|||
9
Fedor-1971
10.06.14
✎
18:33
|
(8) ВводНаОсновании(ДокОснование) - почитай в справке, там есть документ основание и твой новый документ - новый заполняй как тебе нужно.
|
|||
10
Eeakie
10.06.14
✎
18:38
|
(9) В моём документе не прописана процедура ввода на основании документа такого же вида. Писать её не вижу смысла. Надо всего-то сделать копию текущего документа, а там уже с табличной частью разбираться.
|
|||
11
Eeakie
10.06.14
✎
18:38
|
Что не так?
КонтКопии = ""; ОткрытьФорму("Документ.Заявка", КонтКопии); МД_Документ = Метаданные.Документ(ДокИсточник.Вид()); Для Ъ = 1 По Метаданные.ОбщийРеквизитДокумента() Цикл ИдентификаторРеквизита = Метаданные.ОбщийРеквизитДокумента(Ъ).Идентификатор; Значение = ДокИсточник.ПолучитьАтрибут(ИдентификаторРеквизита); КонтКопии.УстановитьАтрибут(ИдентификаторРеквизита, Значение); КонецЦикла; Для Ъ = 1 По МД_Документ.РеквизитШапки() Цикл ИдентификаторРеквизита = МД_Документ.РеквизитШапки(Ъ).Идентификатор; Значение = ДокИсточник.ПолучитьАтрибут(ИдентификаторРеквизита); Если МД_Документ.РеквизитШапки(Ъ).Тип = "Неопределенный" Тогда КонтКопии.НазначитьТип(ИдентификаторРеквизита, ТипЗначенияСтр(Значение) + "." + Значение.Вид()); КонецЕсли; КонтКопии.УстановитьАтрибут(ИдентификаторРеквизита, Значение); КонецЦикла; ДокИсточник.ВыбратьСтроки(); Пока ДокИсточник.ПолучитьСтроку() = 1 цикл КонтКопии.НоваяСтрока(); Для Ъ = 1 По МД_Документ.РеквизитТабличнойЧасти() Цикл ИдентификаторРеквизита = МД_Документ.РеквизитТабличнойЧасти(Ъ).Идентификатор; Значение = ДокИсточник.ПолучитьАтрибут(ИдентификаторРеквизита); КонтКопии.УстановитьАтрибут(ИдентификаторРеквизита, Значение); КонецЦикла; КонецЦикла; |
|||
12
Eeakie
10.06.14
✎
18:40
|
У меня есть подозрение, что работа с атрибутами через КонтекстФормы это хреновое занятие.
|
|||
13
ДенисЧ
10.06.14
✎
18:45
|
(11) Ты на пальцах расскажи, занафея тебе форму открывать??
|
|||
14
Eeakie
10.06.14
✎
18:48
|
(13) Знаю, уже много раз получал в морду эту фразу, но тут надо именно так.
Можно создать программно через Новый() и заполнить, но этот документ (копию) нужно будет сразу выдать на экран. А для этого его нужно будет сохранить после создания. Нафига мне это надо? Надо открыть форму, заполнить чё надо и думать писать его в базу или нет. |
|||
15
Fedor-1971
10.06.14
✎
18:50
|
(14) в (9) же сказал - откроется форма нового документа заполненная как написано в процедуре ВводНаОсновании. Пользователь примет решение - сохранять или нет.
|
|||
16
Eeakie
10.06.14
✎
19:13
|
(15) Я, возможно, как-то неправильно поставил вопрос. Мне надо просто скопировать документ, на который есть ссылка и получить контекст формы полученного копированием документа.
|
|||
17
Eeakie
10.06.14
✎
19:15
|
+(15) Зачем мне дописывать ВводНаОсновании()? Можно и через метаданные скопировать.
|
|||
18
Eeakie
10.06.14
✎
19:17
|
++(15) Это сродни тому, что я и хочу: "ОткрытьФорму() и через контекст делать что угодно", но только без переписи ВводНаОсновании().
|
|||
19
Chai Nic
10.06.14
✎
19:20
|
Через контекст, вроде как, будет работать только если formex подключен..
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |