Имя: Пароль:
1C
 
7.7 Как открыть форму не записанного документа.
Ø
0 ЭЦ
 
13.11.06
11:24
ГОСПОДА !
Создал программно док, заполнил его реквизиты.
Теперь хочу посмотреть что получилось и потом либо записать либо нет.
Что то у меня переклинило и не работает.
Подскажите пож. кому не в лом.
Док = СоздатьОбъект("Документ.накладная");
Док.Новый();
Док.Контрагент = МойКонтр;
ОткрытьФорму(Док);
/// НЕ ПАШЕТ ??? :-((
1 roma n
 
13.11.06
11:26
ОткрытьФорму("Документ.накладная");
2 Uho
 
13.11.06
11:27
и не будет пахать
3 viktor vv
 
13.11.06
11:27
Ты лучше реквизиты заполняй в форме документа в процедуре ВводНового(). А открывай ОткрытьФорму() для нового документа.
4 lalex23
 
13.11.06
11:28
http://www.kuban.ru/forum_new/forum9/files/278018.html
читать, много думать
5 ЭЦ
 
13.11.06
11:28
(1) Это откроется форма нового документа т.е. с не заполненными реквизитами.
А мне надо открыть тот док который я уже заполнил.
6 Said
 
13.11.06
11:28
в модуле формы заполнялку пропиши
8 Biger
 
13.11.06
11:31
ОткрытьФорму("Документ.накладная",Конт);
Конт.Контрагент = МойКонтр;
9 lalex23
 
13.11.06
11:34
//*******************************************
Процедура Сформировать()
  Конт = "";
  ОткрытьФорму("Документ.Тест",Конт);
  Конт.Аккаунт = Константа.ОсновнаяУчетнаяЗапись;
  Конт.Форма.Обновить();
КонецПроцедуры
10 Uho
 
13.11.06
11:35
(8,9) как ТЧ будем заполнять? :))
11 lalex23
 
13.11.06
11:36
(10) в моём документе нет реквизитов в табличной части :)
12 Макс 1С
 
13.11.06
11:36
(11) шайтан.... ;)))
13 ЭЦ
 
13.11.06
11:39
(8) ну это да - работает плохо только то что форма открывается до того как определяются значения реквизитов. А у меня тут часто бывает так, что эти реквизиты таковы, что и док создавать не надо и уж тем более его записывать. Можно конечно сначала узнать надо/не надо ее открывть а уж потом - создавать док. Но это есть некоторое лишнее нагромождение.
Хотелось бы его избежать.
(7) тоже работает - только в моем случае не годится потому как конфу я правит не могу - все делается во вешнем отчете.
14 Олень1
 
13.11.06
11:40
Создаешь обработку с формой аналогичной форме документа, заполняешь ее как надо (программно или вручную). Если нравиться - из обработки заполняешь документ.
15 Uho
 
13.11.06
11:40
(11) Это у тебя "Тест", а у него то "Накладная" :))
16 Макс 1С
 
13.11.06
11:41
(13) таб. часть тоже заполняешь?
17 smaharbA
 
13.11.06
11:42
а между прочим (прочим по турецки - ноги :) )
можно и такую конструкцию сделать
Новый();
...
заполняем
...
ОткрытьФорму(
18 Biger
 
13.11.06
11:44
(17) чего форму?
19 Олень1
 
13.11.06
11:45
(0) А может ОткрытьФорму(Док.ТекущийДокумент()) ?????
20 Biger
 
13.11.06
11:46
(19) нет его
21 smaharbA
 
13.11.06
11:47
(18) нового незаписанного
22 Олень1
 
13.11.06
11:51
(20) Ты прав. Лучше как в (14)
23 lalex23
 
13.11.06
11:52
(15) а кому щас легко?, тока извраты это всё, правильней через параметры при открытии, но типовую придётся плющить :(
24 Uho
 
13.11.06
11:53
(17) через транзакцию?
25 Biger
 
13.11.06
11:54
я записываю, открываю, а там уж юзер решает проводить или удалять
26 Макс 1С
 
13.11.06
11:55
(24) да... при чём даже Таб часть заполниться...
27 Олень1
 
13.11.06
11:55
А что мешает записать документ, а потом, если он не нужен, Док.Удалить(1)?
28 Макс 1С
 
13.11.06
11:58
(27) видимо мешает, хороший тон.....
29 Said
 
13.11.06
12:00
(27) В каком модуле?
30 Uho
 
13.11.06
12:01
(26) ну это понятно, если без ТЧ, то "правильнее" все же (8,9)
31 Said
 
13.11.06
12:03
(29) был 2 (27)
32 Макс 1С
 
13.11.06
12:03
(30) да я больше для себя написал.... просто ни разу так не делал....
33 user1C
 
13.11.06
12:05
заполнение ТЧ через контекст работает в 26 релизе...
34 Олень1
 
13.11.06
12:07
(29) Кинуть на форму документа кнопку "Удалить" и написать процедуру удаления.
Хотя.... (13) Конфу править не хочет.
35 smaharbA
 
13.11.06
12:08
(24) Да
...
Ненада ничего Удалить(1), он и так откроется незаписанный и заполненный
36 Uho
 
13.11.06
12:10
(33) серьезно?
37 ЭЦ
 
13.11.06
12:10
ГОСПОДА !
Корме всего прочего одновременно может быть открыта форма только одного нового документа !
А у меня тут их может быть несколько.
Так что видимо придется сначала всетаки записывать а уж потом открывать.
Такие дела.
:-(
38 Said
 
13.11.06
12:10
Меня уже клинит :(
2 (34) а не ругнется на заблокированный объект?
2 (33) а где такое взять? Я еще не видел.
39 user1C
 
13.11.06
12:11
(36)
да, толко что обнаружил
+все что касается ТЧ через контекст
40 Дурочка 1С ©
 
13.11.06
12:12
(37) Не изобретай свинтопрульный аппарат, займись лучше чем-нибудь полезным ...
41 smaharbA
 
13.11.06
12:12
(33) почемуто у меня и в 21 работало ?
42 Ужасть бухгалтера
 
13.11.06
12:13
(39) Может, у тебя Формекс или 1С++ стоит?
43 Uho
 
13.11.06
12:13
(35) я думал, ща как-нибудь скриптами :)))
  
выложу код тогда за тебя :)
  
Док.Новый();
...
заполняем
...
НачатьТранзакцию();
Док.Записать();
ОткрытьФорму(Док.ТекущийДокумент());
ОтменитьТранзакцию();
  
44 Ужасть бухгалтера
 
13.11.06
12:15
(43) Дык, вроде этот документ потом хрен запишешь?
45 Олень1
 
13.11.06
12:15
(38) Перед Удалить(1) написать: Форма.Закрыть(0)
46 Ёпрст
 
13.11.06
12:16
(33) Правда? Не ставил еще 26 ..
(37)
"Корме всего прочего одновременно может быть открыта форма только одного нового документа"
Гон, одновременно можно открыть сколь угодно много новых форм документов...
Пит показывал, как сделать.
47 Said
 
13.11.06
12:17
2 (45) спасибо, попробую
48 Бит
 
13.11.06
12:18
передай что хочешь при создании, а потом в ПриОткрытии()...
49 smaharbA
 
13.11.06
12:19
(47) не вздумай так делать
50 Дурочка 1С ©
 
13.11.06
12:20
(41) Не тренди ...
51 Uho
 
13.11.06
12:21
(44) хм.. и правда не записывается...
52 Ужасть бухгалтера
 
13.11.06
12:23
(51) Уфф, успокоил :)
53 Said
 
13.11.06
12:25
У меня никогда не стоял вопрос о невозможности править конфу, поэтому всегда делал в "приОткрытии()". А все остальное беру на заметку. ИМХО (43) - дешево и сердито.
54 user1C
 
13.11.06
12:26
(46)
см. (39)
55 Олень1
 
13.11.06
12:29
(49) Почему?
56 Макс 1С
 
13.11.06
12:31
(51) да и у меня тоже....
2smaharbA - тогда в чём смысл??
57 Ужасть бухгалтера
 
13.11.06
12:40
В общем, раз user1C не отвечает на (42), напишу сам. Насколько я понял, если есть Формекс или 1С++ с включенным в нее Формекс, то можно сделать ОткрытьФорму ("Документ.ГЫГЫГЫ", Конт) и далее Конт.НоваяСтрока () с заполнением табличной части. Все будет работать нормально на разных релизах 1С (что на 26-м, что на 21-м).
58 user1C
 
13.11.06
12:44
(57)
только ядро 26
59 user1C
 
13.11.06
12:46
(58)+
и 1С++ :))
60 Макс 1С
 
13.11.06
12:48
(58) с формексом и на 2 и на 25 работает
61 Ёпрст
 
13.11.06
12:49
(54) Поставил 26, просто так не работает ...:(
62 Макс 1С
 
13.11.06
12:52
+60 и на 21
63 user1C
 
13.11.06
12:53
(61)
сорь, для чистого 26 это так и осталось мечтой :(
64 user1C
 
13.11.06
12:55
(60)
да я в курсе
65 Uho
 
13.11.06
13:45
ну так на чем остановились то?
66 Макс 1С
 
13.11.06
14:11
(65) формекс рулит....
через транзакцию - обманули...
67 Uho
 
13.11.06
14:21
а что Абрахамс скажет? :))
68 pit
 
13.11.06
14:39
- либо правка конфы (много новых с заполнением каждого нового нужной инфой штатными средствами платформы) - это работает
- либо формекс
- либо ВК от Орефкова (турбоБл ?)
69 user1C
 
13.11.06
15:03
(68)
имхо, 3-й пункт работу с ТЧ через контекст не решает
70 pit
 
13.11.06
15:11
(69) потому и стоит вопрос
71 Ужасть бухгалтера
 
13.11.06
15:29
(68) 4-й способ. Без правки конфы и без ВК, используя возможности подбора. Работает для ТиС и, возможно, Комплексной.
72 Макс 1С
 
13.11.06
15:29
(71) офигеть... и как же?
73 Ёпрст
 
13.11.06
15:30
(71) Показывай!
74 Ужасть бухгалтера
 
13.11.06
15:32
http://www.kuban.ru/forum_new/forum9/arhiv/271899.html
85-й пост. Там небольшой косячок - надо переменную Конт определить.
75 Чучундер
 
13.11.06
15:33
1. Могу программно заполнить новый док и открыть его форму как нового.
2. Mогу открыть одновременно сколько угодно новых незаписанных форм из п.1 одновременно.
все штатными средствами.
76 Макс 1С
 
13.11.06
15:34
хитёр.... надо будет проверить
77 Чучундер
 
13.11.06
15:39
(75)+ безо всяких там подборов (сорри, если не в теме)
78 Ёпрст
 
13.11.06
15:42
(74) Фигня, это всё равно, что в ВводНового или в ПриОткрытии написать код...там же всё в ОбраткеПодбора делается ...
НезаЧот ...
79 Ужасть бухгалтера
 
13.11.06
15:43
(78) Конфа не меняется, не забывай.
80 Uho
 
13.11.06
15:44
(75) не меняя код в документе?
81 Ёпрст
 
13.11.06
15:46
(79) Метод не универсален. Работает только в ТиСе, может и в комплексной, т.к там прописаны действия в ОбработкеПодбора, а это равносильно в любой конфе использовать свою процедуру по заполнению ТЧ дока ...например, в ПриОткрытии(),ВВодНового() ...
82 Ужасть бухгалтера
 
13.11.06
15:49
(81) Никто и не утверждал, что он универсален. Но тем не менее, работает без изменений конфы и без ВК... Блин, и чего я еще объясняю... Ну, не нравится не используй...
83 Макс 1С
 
13.11.06
15:49
(75) опять 25... ну молодец, возьми с полки пирожок и гордись, что знаешь... а другние идиоты пускай мучуются....
(78) и всё таки вариант, достоин жизни..... хотя конечно и с ограничениями...
84 Дурочка 1С ©
 
13.11.06
15:51
(81) Универсально - в ссылке пост 17-й ...
85 Чучундер
 
13.11.06
15:54
(80)
75.1 - не меняя код дока
75.2 - изменения в процедуре ПриОткрытии() - но они не считаются изменениями, потому как задача такая поставлена...
86 Ужасть бухгалтера
 
13.11.06
15:54
(84) Угу. Еще один носитель тайного знания вроде пита. Вроде и не сказал ни хрена, а у всех присутствующих ощущение, что прикоснулись к чему-то огромному и непостижимому :))
87 Uho
 
13.11.06
15:58
(85) ну 75.2 сегодня уже проходили :)
http://www.kuban.ru/forum_new/forum9/files/278194.html
88 Ёпрст
 
13.11.06
15:58
(84) Там просто супер..! :)
(82) Просто, такой способ уже есть, то бишь код вносится в документ, неважно, типовой он , или сам прописал где нибудь...вот я о чем. Интересен вариант без внесения кода в сам документ.
89 Дурочка 1С ©
 
13.11.06
15:59
(86) Ну, если ты этот пошаговый рецепт не в состоянии осилить - тогда тебе прямая дорога переходить на снеговика ...
90 Ужасть бухгалтера
 
13.11.06
16:01
(89) Да, видать, придется... :)
91 Чучундер
 
13.11.06
16:14
а в чем поблемы в 75.1...?
92 Ужасть бухгалтера
 
13.11.06
16:18
(91) Собственно, пример приведи :)
93 user1C
 
13.11.06
16:33
(92)
+1
94 Чучундер
 
13.11.06
16:41
Вот так все бросить и привести?
а может я облажался...? вроде у меня же работает в куче мест...
надо глянуть.. чей-то я испужался...
95 Ужасть бухгалтера
 
13.11.06
16:45
(94) Ага. Без примера чтой-то не верится :) Я тоже могу сказать, что у меня в 7.7 одновременно сидит более 500 юзверей, каждый день вводится по мульену докУментов по 500-600 строк и проводятся полсекунды максимум, любые отчеты формируются не дольше 1 секунды (за любой период времени), а на вопрос о подробностях скромно умолчать...
96 Ужасть бухгалтера
 
13.11.06
16:48
(94) Хотя... Может, ты про документы без табличной части...
97 smaharbA
 
13.11.06
18:38
Вот пример, через одно место, через которое предлагали...
...
Перем Док;
Процедура ОтменаТранзакции()
  Док.Удалить(1);
    Форма.ОбработкаОжидания("",0);
КонецПроцедуры
//*******************************************
Процедура Сформировать()
  Док=СоздатьОбъект("Документ.ЗаказНаОтгрузку");
  Док.Новый();
  Док.ДатаДок = ТекущаяДата();
  Док.Комментарий = "НОВЕЙШИЙ";
  Док.ХозОперация=глПолучитьХозОперацию("Заказ покупателя");
  Спр=СоздатьОбъект("Справочник.Контрагенты");
  Спр.ВыбратьЭлементы();
  Пока Спр.ПолучитьЭлемент() = 1 Цикл
    Если Спр.ЭтоГруппа()=1 Тогда
      Продолжить;
    КонецЕсли;
    Док.Контрагент=Спр.ТекущийЭлемент();
    Док.Основание=глПолучитьОсновнойОбъект(Спр.ТекущийЭлемент(),"Основание");
    Прервать;
  КонецЦикла;
  СпрЕ=СоздатьОбъект("Справочник.ЕдиницыИзмерения");
  Спр=СоздатьОбъект("Справочник.Номенклатура");
  Спр.НайтиПоНаименованию("СП-120",0,0);
  Док.НоваяСтрока();
  Док.Номенклатура = Спр.ТекущийЭлемент();
  Док.Количество = 1;
  Док.Кратность = 1;
  СпрЕ.НайтиПоРеквизиту("Номенклатура",Спр.ТекущийЭлемент(),1);
  Док.Единица=СпрЕ.ТекущийЭлемент();
  Док.ОперацияТ=Перечисление.ОперацииСЗаказами.НаОтгрузку;
  Док.Цена = 100;
  Док.Сумма=100;
  Док.Автор=глПользователь;
  Док.МестоСоздания=глПользователь.Подразделение;
  Док.Подразделение=глПользователь.Подразделение;
  глДокументУстановкаОтборов(Док);
  глУстановитьРеквизитыОтбора(Док);
  Док.Записать();
  конт="";
  ОткрытьФорму("Журнал.ЗаказыНаОтгрузку",Конт);
  Шел=СоздатьОбъект("WScript.Shell");
  глЖурналНайтиДокумент(Конт,глЖурналНайтиДокумент(Конт,Док.ТекущийДокумент()));
  Шел.SendKeys("{F9}~");
    Форма.ОбработкаОжидания("ОтменаТранзакции",1);
КонецПроцедуры
...
Конечно привязано к моей конфе, но поймете думаю :)
98 Uho
 
13.11.06
18:41
ужас
99 Ужасть бухгалтера
 
13.11.06
18:42
(97) С НомерДок нехорошо получилось :)
100 smaharbA
 
13.11.06
18:43
(98) дак вот пришлося помаксимуму поля заполнять, а то у меня все журналы общие :)
101 Ёпрст
 
13.11.06
18:45
(98) Ну прям слово в слово, как Дурочка 1С © показывала в (84) ... ! :)
102 Дурочка 1С ©
 
13.11.06
18:53
(101) Не надо грязи! У меня таких косяков не было!
103 Ужасть бухгалтера
 
13.11.06
18:53
(99)+ Хотя, если номер записанного документа запомнить, а после удаления прописать в открытую форму через контекст, то будет нормально.
PS. Хотя способ мне все-таки не слишком нравится :)
104 smaharbA
 
13.11.06
18:59
Дак и сказано что это между прочим через жпо...
105 Ёпрст
 
13.11.06
19:01
(102) идея то похожая, а вот реализация - это дело техники ... :)
106 Дурочка 1С ©
 
13.11.06
19:06
+(102) Какие-то транзакции наплел, Док не удалил, журнал (почемуто не общий) не закрыл, новый открытый документ не перенумеровал ...
107 smaharbA
 
13.11.06
19:08
(106) ничего я не наплел, с транзакциями можно, но смысл ?
А тут так проста процедура с названием подруку попалась, а мене нах номер, у меня в конфе все ок, в приоткрытии во всех доках многа чего делается и всего одной строкой, мене не нада за этим следить в отличии от вас...
108 Ёпрст
 
13.11.06
19:10
(107) Покажешь, как новый номер документу устанавливаешь? ...
109 smaharbA
 
13.11.06
19:15
Процедура ВводНового(Копирование,Документ)
  глДокументПриСоздании(Контекст,Копирование,Документ);
///
а там
глДокументУстановкаНомера(Конт);
...
а тама...
Функция глДокументУстановкаНомера(Док,ПрефНом="") Экспорт
// Устанавливает номер документа по префиксу УРБД, Фирмы, Вида и т.п. ДРК05
// Все префиксы описаны в таблице глДостДок. Если номер установлен возвращает 1, иначе 0
Перем ПрефСтр;
  ВД=Док.Вид();
  Если глДокументНайтиДескриптор(ВД)=0 Тогда Возврат 0;
  Иначе Преф="";
    Если глДостДок.ПрефБД=1 Тогда Преф=Преф+глПрефиксБД; КонецЕсли;
    Если глДостДок.ПрефФрм=1 Тогда
      Если Док.Фирма.Выбран()=1 Тогда
        Преф=Преф+СокрЛП(Док.Фирма.ПрефиксНумерации);
      КонецЕсли;
    КонецЕсли;
    Если ПустаяСтрока(ПрефНом)=1 Тогда
      Преф=Преф+СокрЛП(глДостДок.ПрефНом);
    Иначе Преф=Преф+СокрЛП(ПрефНом);
    КонецЕсли;
    Док.УстановитьНовыйНомер(Преф);
  КонецЕсли;
КонецФункции // глДокументУстановкаНомера
...
ну в "особо сложных" случаях -
Формат(глНайтиСвободныйНомер(Контекст)-1,"Ч(0)7") - тут уже перебор, но этт худой метод...
110 Чучундер
 
13.11.06
23:42
(94)+ так как времени смотреть где это у меня и как сделано нет - то, по- видимому я облажался.. (но запомню, время будет - посмотрю...)
111 Said
 
14.11.06
01:10
(109) правильно, "ПриОткрытии()"! Я недавно сам так лохонулся с номером. Смотрю вечером, а у бухов пару документов, а старший номер уже за 50.
Ты ж удаляешь док копирования после открытия нового.
112 smaharbA
 
14.11.06
05:58
(111) неа, номер будет нормальный, патамучто в новом не исп устновый и он при создании не в этом периоде лежит, а в том который скопирован используется и в нужном периоде...