Имя: Пароль:
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
А не передается потому что эти процедуры по сути дублируют друг друга. Просто вызываются разными событиями
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn