Имя: Пароль:
1C
1C 7.7
v7: Открытие вновь созданного, но не записанного документа.
0 Damash
 
22.11.11
01:19
Есть Документ_1 с табличной частью.
Выделяем определенную строку и на основании данных из этой строки необходимо создать Документ_2.
Но по итогу создания необходимо этот Документ_2 показать пользователю, без предварительного сохранения.
Как это сделать можно?
1 Попытка1С
 
22.11.11
01:21
ОткрытьФорму
2 FN
 
22.11.11
01:21
ОткрытьФорму
данные передаем параметромформы, в ВВодНового обрабатываем
либо заполнять через контекст
это на твое усмотрение
3 Aleksey
 
22.11.11
01:22
Только в голой 1С ТЧ не заполнишь
4 Damash
 
22.11.11
01:23
ОткрытьФорму(<?>,,)
Синтаксис:
ОткрытьФорму(<ОписательОбъекта>,<КонтекстФормы>,<ДокументОснование>)
Назначение:
Открывает визуальную форму ввода нового документа (в т.ч. в режиме ввода на основании).

А что есть "ОписательОбъекта"? Как спозиционировать на этот незаписанный документ?
5 Damash
 
22.11.11
01:24
(3) это уже в моем случае второстепенно, мне шапку нового дока нужно заполнить, чтобы пользователи не вводили сами (ато косячат много)
6 Aleksey
 
22.11.11
01:24
(4) Это строка, в которой указывается тип и вид, те.е
"Документ.ТвойДокумент"
7 Aleksey
 
22.11.11
01:25
Т.е. если хочешь открыть счет-фактуру, значит
"Документ.СчетФактура" (или как у тебя в конфигураторе имя задано)
8 Попытка1С
 
22.11.11
01:26
(7) У него там будет заполненный документ.
ОткрытьФорму(Докум, Конт);
9 Aleksey
 
22.11.11
01:27
Согласен
10 Damash
 
22.11.11
01:31
хорошо, а как в новый документ передать именно данные (к примеру) 34-ой строки Документа_1?
11 Aleksey
 
22.11.11
01:41
(10) Ну ты же его создаешь?

Док=создатьОбъект("Документ.СчетФактура");
Док.Фирма=..
Док.ДатаДок = ...

//Заполняем шапку, или используем типовые процедуры из ГМ


//Все готово можно показать
ОткрытьФорму(Докум, );
12 Попытка1С
 
22.11.11
01:43
(10) Смотри (11) только на строке спозиционируйся.
13 Aleksey
 
22.11.11
01:44
Типа
ДокИсточник.ПолучитьСтрокуПоНомеру(34);
Док.ТвойРеквизитШапки = ДокИсточник.ТвойРеквизитВ34Строке;
14 Damash
 
22.11.11
01:49
(11) почему-то не срабатывает:
   Акт=СоздатьОбъект("Документ.ОказаниеУслугНамБН");
   Акт.Новый();
   Акт.ДатаДок = ДатаДок;
       ...  
   ОткрытьФорму(Акт);
15 Damash
 
22.11.11
01:49
попробую по принципу Aleksey
16 Aleksey
 
22.11.11
01:50
попробуй


ОткрытьФорму(Акт.ТекущийДокумент());
17 Damash
 
22.11.11
01:51
(16) нет, тоже без реакции
18 Aleksey
 
22.11.11
01:52
должно работать. давай код весь
19 Aleksey
 
22.11.11
01:54
На крайняк попробуй через контекст

ОткрытьФорму("Документ.ОказаниеУслугНамБН",Конт);
 Конт.ДатаДок = ДатаДок;
... заполняем док

 Конт.Форма.Обновить();
20 Damash
 
22.11.11
01:55
Процедура СоздатьАкт()
   Акт=СоздатьОбъект("Документ.ОказаниеУслугНамБН");
   Акт.Новый();
   Акт.ДатаДок = ДатаДок;
   Акт.Контрагент = КтоПричина;
   Акт.МестоХранения = МестоХранения;
   Акт.Комментарий = Коммент;
   ...
   Акт.Курс = Курс;
   ОткрытьФорму(Акт.ТекущийДокумент());      
КонецПроцедуры
21 Aleksey
 
22.11.11
01:57
видно он новый док не открывает, нужно записать сначала.

Так что попробуй через контекст заполнять
22 Damash
 
22.11.11
01:57
попробую, как в (13)
23 Попытка1С
 
22.11.11
01:59
Да не сработает так похоже, делай как в (2) предлагал.

ОткрытьФорму("Документ.ОказаниеУслугНамБН",Контекст);
24 Damash
 
22.11.11
02:03
т.е. через контекст я так понимаю вот так делать,да?
Процедура СоздатьАкт()
   ПараметрыПередачи=СоздатьОбъект("СписокЗначений");
   ПараметрыПередачи.ДобавитьЗначение(КтоПричина);
   ПараметрыПередачи.ДобавитьЗначение(Списание);  
   ПараметрыПередачи.ДобавитьЗначение(Коммент);
   ОткрытьФорму("Документ.ОказаниеУслугНамБН",ПараметрыПередачи,ТекущийДокумент());  
КонецПроцедуры

затем в новом документе обрабатываю ПараметрыПередачи в ВводНового, а данные не из ТЧ - ВВодНаОсновании. Так?
25 Aleksey
 
22.11.11
02:04
(24) Один из вариантов, 100% должен сработать
26 Aleksey
 
22.11.11
02:05
Только Текущий Документ можно не указывать. Иначе он вызовет процедуру ВВодНаОсновании()
27 Damash
 
22.11.11
02:26
в итоге срослось таким образом!
В Документе_1 вызываю создание документа, при выделенной нужной строчке ТЧ
Процедура СоздатьАкт()
   ОткрытьФорму("Документ.ОказаниеУслугНамБН",НомерСтроки,ТекущийДокумент());  
КонецПроцедуры
// где в качестве Контекста - передаю номер строки
А в Документе_2 обрабатываю ВводНаОсновании():
Процедура ВводНаОсновании(ДокОсн)
   ДатаДок = ДокОсн.ДатаДок;
       ...
   ДокОсн.ПолучитьСтрокуПоНомеру(Форма.Параметр);
       // и начинаю обращаться к данным спозиционированной строки
   Контрагент=ДокОсн.КтоПричина;
       ...  
   ВводНового();
КонецПроцедуры
28 Damash
 
22.11.11
02:27
Всем спасибо за поддержку...
29 Aleksey
 
22.11.11
02:27
ВводНового(); это лишнее. он дублирует ВводНаОсновании
30 Aleksey
 
22.11.11
02:28
т.е. может затереть тебе реквизиты и заполнить их значениями по умолчанию
31 Damash
 
22.11.11
02:30
(29) не согласен.
давно как-то обжегся на этом.
Если срабатывает ВводНаОсновании, то алгоритм не передается в ВводНового, а мне нужно ...
т.е. тут либо дублировать алгоритм из ВводНового, либо сослаться на нее..
32 Aleksey
 
22.11.11
02:34
(31) Ну я отсюда код процедур не вижу.

Главное чтобы не получилось например он заполнит реквизит Склад из документа основания, потом в процедуре Ввод нового заполнит этот реквизит складом по умолчанию.

А так если там прописано граматно, типа если не заполнен реквизит склад - тогда заполняем - ради бога
33 Aleksey
 
22.11.11
02:35
А не передается потому что эти процедуры по сути дублируют друг друга. Просто вызываются разными событиями
Основная теорема систематики: Новые системы плодят новые проблемы.