Имя: Пароль:
1C
 
Как открыть форму документа без записи оного ?
0 r1000
 
04.12.07
16:02
Друзья ! Как можно открыть документ не записывая его в базу ?
Тоесть, я создаю программно документ, после создания хотелось бы показать его пользователю, чтобы он утвердил его и сам произвел запись...
Спасибо.
1 quest
 
04.12.07
16:04
Не поверишь - ОткрытьФорму()
2 r1000
 
04.12.07
16:04
Кроме как через Форма.Параметр никак да ?
3 GrayT
 
04.12.07
16:04
ОткрытьФорму("Документ.ТвойДокумен", Конт)
Через Конт заполнить его. Но есть один нюанс....
4 r1000
 
04.12.07
16:05
(1)И как же ? Ниче не получается...
Вот код:
   Док = СоздатьОбъект("Документ.РасходнаяНакладная");
   Док.Новый();
   Док.ДатаДок                     = ТекущаяДата();
   Док.МестоХранения            = Константа.ОсновнойСклад;
   Док.ВидОтгрузки              = 1;
   Док.УчитыватьНП              = 0;
   Док.ЗачитыватьАванс          = 0;
   Док.Курс                     = ВыбПоступление.Курс;
   Док.ВариантРасчетаНалогов    = Константа.ОсновнойВариантРасчетаНалогов;
   Док.НДСвключатьВСтоимость    = 1;
   Док.ДокументПоступления      = "";
   Док.ТипЦен                   = "";
   ВыбПоступление.ВыбратьСтроки();
   Пока ВыбПоступление.ПолучитьСтроку() = 1 Цикл
       
       Док.НоваяСтрока();
       Док.Товар       = ВыбПоступление.Товар;
       Док.Количество  = ВыбПоступление.Количество;
       Док.Цена        = ВыбПоступление.Цена;
       Док.Сумма       = ВыбПоступление.Сумма;
       Док.НДС         = ВыбПоступление.НДС;
       Док.НП          = ВыбПоступление.НП;
       Док.Всего       = ВыбПоступление.Всего;
           
   КонецЦикла;
   
   ОткрытьФорму(Док.ТекущийДокумент());
5 r1000
 
04.12.07
16:06
(3)Ну тут нужно использовать Форма.Параметр...
Конфа типовая, хотелось оставить на обновлении...
6 GrayT
 
04.12.07
16:07
(4)Все б ни че, но в данном случае перед ОткрытьФорму(Док.ТекущийДокумент()); придеться Док.Записать()
7 r1000
 
04.12.07
16:09
(6) А Вашем (3) нужно запускать жало в саму конфу. Прально я понимаю ?
8 Ёпрст2
 
04.12.07
16:10
(7) Нет.
9 r1000
 
04.12.07
16:11
Поделитесь плиз...как так сделать ? Это все штатно можно ? Буду очень признателен...
10 GrayT
 
04.12.07
16:11
(7)Угу :( Если не в форму дока, то в глобальник.
А можно по Ф9
во - нарыл.....
Не получается заполнить ТаблЧасть нового дока из другого дока
11 GrayT
 
04.12.07
16:12
(8)?
12 Ёпрст2
 
04.12.07
16:13
(11) Ну есть же ВК ... :)
13 Ёпрст2
 
04.12.07
16:13
+12 Для "лечения" ...
14 GrayT
 
04.12.07
16:15
(12)А-а-а-а-а - Так не честно :)))
15 nop
 
04.12.07
16:15
(0) никак
16 Ленинград
 
04.12.07
16:18
Док.Записать()
открытьФорму
До.Удалить()
17 r1000
 
04.12.07
16:20
(16)гы) Все просто, маладца... Спасибо за идею.
18 GrayT
 
04.12.07
16:20
:)
19 r1000
 
04.12.07
16:21
А, нифига, объект заблокирован)
20 Ленинград
 
04.12.07
16:49
цуко кто так делал, пошарься в поиске, сам так ни разу не страдал
21 Gars
 
04.12.07
17:19
А если так:

Процедура Сформировать()  
НачатьТранзакцию();
Док=СоздатьОбъект("Документ.Накладная");
Док.Новый();
Док.НомерДок="00001";
Док.НоваяСтрока();
Док.Количество=123;
Док.Записать();
ОткрытьФормуМодально(Док.ТекущийДокумент());
ОтменитьТранзакцию();

КонецПроцедуры
22 Ёпрст2
 
04.12.07
17:21
(21) Сам то пробовал? ..:)) Нафига ему "ничего" ?
23 у лю 427
 
04.12.07
17:25
(21) мизданется док потом.... при записи...
24 Gars
 
04.12.07
17:25
(22) Еще в 2003-ем годе подсказали на партнерском форуме...
:-)
25 у лю 427
 
04.12.07
17:25
это в свое время выкладывали на т1с .... причем раньше партнерского
26 Reaper_1c
 
04.12.07
20:02
(23) - Отмену транзакции запихать в условие...
27 Мимохожий Однако
 
04.12.07
21:34
ход конем. В обработке открыть аналог документа
28 АЛьФ
 
04.12.07
21:39
formex.dorex.ru
29 Дядя Васька
 
04.12.07
21:39
а не проще поставить формекс?
ту (0), ничего извратного, просто если заполняешь шапку в несохраненном и потом его открываешь нет проблем в типовой, если табличную часть - ошибок нет, но она пустая. При установленном формексе все нормально, при том что код вполне стандартный...
30 Дядя Васька
 
04.12.07
21:40
(28) гы ))
31 Дядя Васька
 
04.12.07
21:41
(28) Кстати, а правду говорят, что ты об этой особенности своей библиотеки случайно узнал, а сам ничего такого не делал?
32 Чес
 
04.12.07
22:10
21 +
Доморощенные самоучки, это единственно верное решение. Единственно:
Процедура Сформировать()  
НачатьТранзакцию();
Док=СоздатьОбъект("Документ.Накладная");
Док.Новый();
Док.НомерДок="00001";
Док.НоваяСтрока();
Док.Количество=123;
Док.Записать();
ОткрытьФормуМодально(Док.ТекущийДокумент());
Если Вопрос ("Записать?","Да+Нет") = "Да" Тогда
ЗафиксироватьТранзакцию();
Иначе
ОтменитьТранзакцию();
КонецЕсли;
КонецПроцедуры
33 Михей
 
04.12.07
22:18
(32) изврат
34 Чес
 
04.12.07
22:21
(33) Почему? Или абы ляпнуть? %;)
35 r1000
 
04.12.07
22:26
(34)Не кисло)))
Большое мерси !
36 Ковычки
 
04.12.07
22:26
НачатьТранзакцию
ОтменитьТранзакцию
Но есть иное
37 АЛьФ
 
04.12.07
22:31
2(31) Делал. Но потом забыл совсем, а мне напомнили... Так же, как о многом другом функционале :)
38 Ковычки
 
04.12.07
22:34
(37) а как открыть не открытый знаешь ?
39 АЛьФ
 
04.12.07
22:35
2(38) Знаю.
40 Чес
 
04.12.07
22:37
(39) А когда в 1С Будет подписка на событие при открытии формы, не знаешь? ;)
41 АЛьФ
 
04.12.07
22:40
2(40) В 1С++ уже давно есть. За саму 1С не скажу.
42 Михей
 
04.12.07
22:40
начинать транзакцию чтоб открыть форму, ИМХО не есть GOOD

+ Вопрос без таймаута
43 r1000
 
04.12.07
22:41
+(32)Но если в модальном окне нажать на провести, вываливается узкое такое окно с кнопками. Закрываешь его и пользователю вопрос "Записать ?".
Пользователи не поймут. Как то недоработанно немного)
44 Чес
 
04.12.07
22:45
(42)
1. Таймаут конечно :) Я общую схему показал
2.
Хм, вариации на тему (сорри, 1с 7.7 не установлена)
...
ОткрытьФормуМодально(Док.ТекущийДокумент());
Если Док.Записан() = 0 Тогда //или как там в 7.7 определить? ЭтоНовый()?
//Выбран()? %)
Если Вопрос ("Записать?","Да+Нет") = "Да" Тогда
ЗафиксироватьТранзакцию();
Иначе
ОтменитьТранзакцию();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
45 Ковычки
 
04.12.07
22:52
(39) я тоже ))
46 Ковычки
 
04.12.07
22:53
(42) а пофих на таймаут
начатьиранзакцию
док.записть
открытьформу(док.текущий
отменитьтранзакцию
))
47 Чес
 
04.12.07
22:54
46 Браво :)
48 АЛьФ
 
04.12.07
22:55
2(42)(43) Надо всего лишь загрузить FormEx и ни каких извратов не надо.
2(45) Молодец.
49 Ковычки
 
04.12.07
22:59
(48) а че тебя не видать было ? ты наверное скрытый враг всего прогрессивного человечества ? ))
50 Advan
 
04.12.07
23:01
мдя - в 8-ке просто
51 Ковычки
 
04.12.07
23:02
(50) нелюблю восьморочников, они недочеловеки ))
52 Guk
 
04.12.07
23:04
(48) Ты кстати сам то въехал, почему так произошло? ;)...
53 АЛьФ
 
04.12.07
23:07
2(49) Вообще-то меня каждый день видно.
2(52) Тебе процитировать код, котрый исправляет глюк "недобавления строк через контекст"?
54 Advan
 
04.12.07
23:07
(51)Зависть нехорошее чувство - хотя иногда и полезное...
55 r1000
 
04.12.07
23:07
(46)Я извиняюсь...не могли бы Вы пояснить)
Ну если не затруднит разумеется, а то я невкурил что то.
56 Злопчинский
 
04.12.07
23:11
если программно заполняешь док - значит есть какой-то алгоритм/идеология заполнения дока - ты думаешь, юзер лучше тебя знает что должно получиться?
бред... если не уверен в результате работы дока - нехрен его программно заполнять... если приперло - интерактивно ввести новый док и нажать кнопочку "заполнить с проверкой" - заполнится... дальше юзер сам решит...
57 Ковычки
 
04.12.07
23:12
(55) не слушай (46) оно конечно соответствует вопросу (0), но чтобы было надо выстрадать ))
58 Guk
 
04.12.07
23:14
(53) Если не очень длинный и на Си или на Делфи, то процитируй конечно. Всю жизнь мечтал на ночь глядя такое увидеть...
59 АЛьФ
 
04.12.07
23:14
2(52) Вот:
void SetEnableNewLine(CGetDoc7* pDoc)
{
   if(!IS_KINDOF_RUNTIME_CLASS(pDoc, CGetDoc7))
       return;

   CGroupContext *pCont = pDoc->GetGroupContext();
   if (!pCont)
       return;

   for(int i = 0; i<pCont->GetSize(); i++)
   {
       CBLContext *pCont0 = pCont->GetContext(i);
       if(IS_KINDOF_RUNTIME_CLASS(pCont0, CDocContext))
// вот установка внутреннего флага разрешения добавления строк
           ((CDocContext*)pCont0)->SetEnableNewLine(1);
   }
   
}
60 Ковычки
 
04.12.07
23:14
(59) а где диспатч ?
61 АЛьФ
 
04.12.07
23:16
2(60) А зачем?
62 Guk
 
04.12.07
23:17
(59) Стесняюсь спросить, а что же у 1С было?...
63 Чес
 
04.12.07
23:18
(56) Выбрать контрагента, например, в приходном документе. Да вариантов уйма, не тупи. Да и просто - активное участие пользователя в процессе...
(60) А вы о чем? %)
64 АЛьФ
 
04.12.07
23:20
2(62) А 1С для контекстов, которые создаются по ОткрытьФорму(), не вызывает собственного метода CDocContext::SetEnableNewLine(BOOL b);
Только не спрашивай почему они так делают. Может забыли, а может какой-то тайный смысл в этом заложен.
65 Ковычки
 
04.12.07
23:21
глубокий умысел
66 Ковычки
 
04.12.07
23:23
нифига не понимаю в этих кракозябрах, мнеб на васике, там все ясно и понятно... ))
67 zzzzz
 
04.12.07
23:31
(0)Внешняя форма, полностью имитирующая документ, поможет. Геморойно. Номер дока не задашь.
68 АЛьФ
 
04.12.07
23:36
2(67) "полностью имитирующая документ" - а табличная часть? Или все же сойдемся на "частично имитирующая"?
69 Ковычки
 
04.12.07
23:38
(68) а в транзакции открыть и позырить ? ))
70 АЛьФ
 
04.12.07
23:47
2(69) Открой и позырь. Только не удивляйся, когда при обломе проведения получишь и облом фиксации первой транзакции. И документ будет не только не проведен, но и закроется тихонько без сохранения.
71 Ковычки
 
04.12.07
23:49
(70) а в форме отчетика данные останутся ? ))
72 АЛьФ
 
04.12.07
23:57
2(71) Это ты спроси у того, кто предлагает отчетик. Я вообще-то высказываюсь против всех этих извращений.
73 Ковычки
 
05.12.07
00:12
(72) согласен очень
74 zzzzz
 
05.12.07
00:42
(68) Но ведь у нас только проблема в одобрении юзвера. Как только одобрил - создать документ, открыть форму документа и закрыть форму обработки. Сохранен? Одобренный док и должен быть сохранен.
75 zzzzz
 
05.12.07
00:45
+ Если о V7 - то уже делал. Нормально фурычит.
76 Такой вопрос
 
05.12.07
12:00
Пока транзакция открыта другие юзвери смогут свои доки проводить?
77 Ёпрст2
 
05.12.07
12:22
(76) Нет.
78 GrayT
 
05.12.07
12:23
Вот и хрен то...
79 Ёпрст2
 
05.12.07
12:30
(78) Это смотря что в транзакцию запихнуть ... :)
80 Ёпрст2
 
05.12.07
12:33
+79 И в данном случае так и будет ...
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.