Имя: Пароль:
1C
 
Копировать документ программно
Ø
0 Walentin
 
31.08.05
17:14
Как программно ( с помощью кнопки или ... )
скопировать существующий документ ?
( Чтобы работало по образу журнала документов ? )
1 Alexaha
 
31.08.05
17:23
я думаю ВводНового() тебе поможет
2 Макс 1С
 
31.08.05
17:26
(0) пиши процедурку используя (1)... ;-)
3 Sasha
 
31.08.05
17:26
программно копировать документ можно только перебором реквизитов (шапки и табличной части с перебором строк) через метаданные
4 lemon
 
31.08.05
17:34
(0) как вапиант:
ОткрытьФорму нового документа... 3-й параметр...
6 Walentin
 
02.09.05
14:36
Другие мнения есть ?
7 Муму после всплытия
 
02.09.05
14:40
"Чего ж тебе еще надо, собака"??
8 Alexaha
 
02.09.05
14:43
6. ну раз тебе совсем не нравится (1) и (2), то что тебе мещает в качестве 3-го параметра использовать оригинал для копирования и процу ВводНаОсновании()?
9 Kapres
 
02.09.05
14:43
ВводНового(<ПризнКопирования>,<ОбъектКопирования>)
10 vasy
 
02.09.05
14:46
(+3)
Функция ПриВводеНаОсновании(ДокументОснование) Экспорт
  Перем Рез;
  Рез=1;
  ТДок=Метаданные.Документ(ВнКонт.Вид());
  
  н=1;
  Для н=1 По Метаданные.ОбщийРеквизитДокумента() Цикл
    Идент = Метаданные.ОбщийРеквизитДокумента(н).Идентификатор;
    ЗнРекв = ДокументОснование.ПолучитьАтрибут(Идент);
    ВнКонт.УстановитьАтрибут(Идент,ЗнРекв);
  КонецЦикла;
  
  Для н=1 По ТДок.РеквизитШапки() Цикл
    Идент=ТДок.РеквизитШапки(н).Идентификатор;
    ЗнРекв = ДокументОснование.ПолучитьАтрибут(Идент);
    ВнКонт.УстановитьАтрибут(Идент,ЗнРекв);
  КонецЦикла;
  
  ТаблицаДокумента=СоздатьОбъект("ТаблицаЗначений");
  ДокументОснование.ВыгрузитьТабличнуюЧасть(ТаблицаДокумента);
  ВнКонт.ЗагрузитьТабличнуюЧасть(ТаблицаДокумента);
  
  ВнКонт.УстановитьНовыйНомер(ВнКонт.Фирма.ПрефиксНомеровДокументов);
  ВнКонт.ДокОснование=ДокументОснование;
  
  Возврат Рез;
КонецФункции
11 Alexaha
 
02.09.05
14:47
9. ну что ты пристал к нему с ВводомНового()? ему про это еще два дня назад сказали...Не нравится ему это метод, не-нра-вит-ся
12 Kapres
 
02.09.05
14:51
(11) да? как он может не нравиться? такой красивый...
13 Alexaha
 
02.09.05
15:03
12. да если бя знал:((
15 Макс 1С
 
05.09.05
11:51
(14) ты не знаешь как создать новый документ?.... может вопросы научимся задавать....
18 Bot
 
05.09.05
12:00
(17) тогда делай через ВводНаОсновании()...
При копировании вводишь новый на основании копируемого документа. Вот тебе и форма откроется...
19 Kapres
 
05.09.05
12:00
(14) похоже понял о чем это ты... посмотри в ТиС меню "Действия" и обработку КопированиеДокумента
21 dralex
 
05.09.05
13:02
(20) FormEx поможет тебе решить эту ситуации. Без нее, штатными средствами - никак.
22 VZ
 
05.09.05
13:11
Ситуация разрешима. Для этого нужно просто сформулировать задачу, а не шлепать код по смутным желаниям.
Если инициатива создания нового документа исходит от юзера, то лучшим выходом, ИМХО, использовать ВводНового(ПризнакКопирования,ОбъектКопирования)
Если инициатива исходит не от юзера, а юзеру преподносится новый документ, как факт, то опять есть вариант: 1. он имеет право не согласится с созданием документа (не записать его), 2. Фиолетово, нравится юзеру или нет - докумет создан.
В зависимости от варианта следует либо использовать ПриОткрытии(), или вначале создаем и записываем док, затем, в качестве любезности, ОткрытьФорму().............
23 Kapres
 
05.09.05
13:20
(20) вот, блин...
делаешь вызов процедуры ОткрытьФорму в качестве параметра (2-й параметр) перекидываешь список значений где твой документ и какой-нить признак. читаешь эту ветку еще раз. ВводНового в каждом виде документа прописываешь. типа если параметр такойто, то...
перенос из документа-оригинала в твой можно в глобальнике ч/з Метаданные наваять и совершенно без разницы от вида документа.
24 Макс 1С
 
05.09.05
13:25
(20) клиника?
25 dralex
 
05.09.05
13:43
(24) А ты сам пробовал открыть форму, заполненную данными документа, созданного через СоздатьОбъект("Документ.XXX") и не сохраненного?
26 Kapres
 
05.09.05
13:53
(25) чего сказал???
27 Макс 1С
 
05.09.05
14:03
(25) ты как то того....
определись что хочешь сказать то.....
открыть форму и заполнить её данными? - пробовал... получалось.... или вопрос не в этом?
28 Walentin
 
05.09.05
14:03
(25) Согласен.
29 Макс 1С
 
05.09.05
14:05
(28) с чем?
30 Kapres
 
05.09.05
14:07
(25)(28) мужики. попробуйте написать как в (23). море документов уже так понаписано. и из отчетов заполняются и хоть как...
31 Макс 1С
 
05.09.05
14:19
(28) ты если вопрос задашь по человечески, глядишь и ответ получишь... на вопрос из (0) тебе ответили практически неделю назад.... используя формекс, я только что, написал то что ты хочешь и то что не может dralex за 5 минут.... без использования формекса, это займет больше времени и придестся исправлять некоторые модули конфигурации, но в лююом случае проблема решается максимум за 30 - 40 минут....
зы. ветке неделя, а ни одной строчки твоего кода нет.... странно, да?
32 dralex
 
05.09.05
14:32
>> и то что не может dralex
Это чего я не могу? Ты только свои посты читаешь, или чужие тоже?
33 Макс 1С
 
05.09.05
14:38
(32) свои не читаю, я их пишу ;-)
твои вот щас перечитал, реакция:
"FormEx поможет тебе решить эту ситуации. Без нее, штатными средствами - никак." - а почему штатными никак? я что не могу в откывающуюся форму что-нибудь передать? формексом бестрее, проще - да, но и штатными можно.....
зы. и еще я отвечаю на вопросы которые обращены непосредственно ко мне ;-)
34 dralex
 
05.09.05
14:46
(33) Ты прав, и я был неточен. Надо было так:
FormEx поможет тебе решить эту ситуации. Без нее, штатными средствами, не меняя конфигурации - никак.
Штатными можно, но только вмешавшись в конфигурацию, а это не всегда желательно.
Но в (31) ты написал, что я чего-то там не могу? Что конкретно ты имел ввиду?
35 Alexaha
 
05.09.05
14:50
33 и 34 брэк! все равно длиннее у меня:)))))))
36 Anton R
 
05.09.05
14:56
Кто сказал, что нельзя скопировать? Можно:
  Конт = "";
  ОткрытьФорму("Журнал."+Док.Вид(), Конт);
  Конт.УстановитьИнтервал(Док.ДатаДок, Док.ДатаДок);
  Конт.АктивизироватьОбъект(Док);
  WSHShell = СоздатьОбъект("WScript.Shell");
  WSHShell.SendKeys("%дк");
  Конт.Форма.Закрыть();
37 Макс 1С
 
05.09.05
14:58
(34) "FormEx поможет тебе решить эту ситуации. Без нее, штатными средствами - НИКАК" - все таки можно. совсем не обязательно лезть в конфигуратор, причем можно ведь просто спросить пользователя записывать или нет? и потом открывать если записали...хотя конечно не красиво но......, короче вариантов море.....
тем не менее извиняюсь за фразу: "и то что не может dralex"... давай её уберем из того сообщения (31).....
38 Макс 1С
 
05.09.05
15:00
(35) а ты девоча или мальчик? ;-)
зы. "в споре рождается истина" (кто-то из древних... )
39 Alexaha
 
05.09.05
15:06
38. уж точно не девочка:)))))))))))))))))))))))0
40 Макс 1С
 
05.09.05
15:08
(39) успокоил... а то я думаю вдруг девочка.... чем с ней мерится ;-).....
41 Alexaha
 
05.09.05
15:23
40. с ними меряться еще интереснее О-)
42 Anton R
 
05.09.05
15:32
Жду критику на (36)
43 di1978
 
05.09.05
15:49
(36) хорошо, но еще в (10) дан ответ, только не через вводнаосновании(), а просто заполнять через контекст ОткрытьФорму()
44 Anton R
 
05.09.05
15:51
(43) Через контекст "ОткрытьФорму()" нет доступа к табличной части без использования FormEx.
45 di1978
 
05.09.05
15:55
У меня релизован импорт из банка и создается документ "Выписка", именно новый, а не записанный и открытый. А также создание счф на аванс из тз. Что значит нет доступа к тч документа? НоваяСтрока(), загрузить ТЧ?
46 di1978
 
05.09.05
15:58
Например,
Процедура Сформировать()
  Перем Конт;
  ОткрытьФорму("Документ.Счет", Конт);
  Конт.НоваяСтрока();
  Конт.Количество = 100;
  Конт.Форма.Обновить();
КонецПроцедуры
47 Anton R
 
05.09.05
15:59
Значит у тебя гдето (может в глобальнике "ПриОткрытии") загружается FormEx.
48 di1978
 
05.09.05
16:01
1cpp, там и FormEx, а что он стандартные методы объекта Форма переопределяет в плане обновить?
49 Anton R
 
05.09.05
16:01
+(47) Вернее, "ПриНачалеРаботыСистемы". Ну или еще где-нибудь.
50 di1978
 
05.09.05
16:03
Вот блин, точно. Тогда только записывать и открывать.
51 Anton R
 
05.09.05
16:03
(48) Именно так. По словам АЛьФА - устанавливает флаг возможности обновления ТЧ.
52 di1978
 
05.09.05
16:08
Да просто не люблю конфу править, подключил 1цпп.ДЛЛ и забыл про всякие глюки 1С ;)
53 di1978
 
05.09.05
16:11
а такой изврат:
Процедура Сформировать()
  док=СоздатьОбъект("Документ.Счет");
  док.Новый();
  док.НоваяСтрока();
  док.Количество = 100;
  начатьтранзакцию();
  док.записать();
  открытьформу(док.ТекущийДокумент());
  отменитьтранзакцию();
КонецПроцедуры
54 dralex
 
05.09.05
16:12
(53) Попробуй теперь сохранить документ.
55 Anton R
 
05.09.05
16:12
(53) Не прокатит: попытаешься сохранить - 1с-ка вылетит.
56 di1978
 
05.09.05
16:17
Ладно, пользуем тада 1цпп
57 Макс 1С
 
05.09.05
16:22
уф.... вернулся.... шаровую ездил менять.....
(41) с ними не мерятся надо а .........
(all) завязываете вы.... слишком много условностей, и ни одной строчки кода от автора....
(36) твой код не смотрел, но использовал скрипт для раскрытия на полное окно формы документа.... не всегда отрабатывает, почему не знаю..... :-(
58 Alexaha
 
05.09.05
16:26
57. именно:)) а это и есть своего рода "мерянье"
59 Anton R
 
05.09.05
16:30
Вот так работает, проверяйте:
Перем Флаг, Док;
//******************************************************************************
// Сформировать()
//
Процедура Сформировать()
  
  Док = СоздатьОбъект("Документ.тра-ля-ля");
  Док.Новый();
  Док.НоваяСтрока();
  Док.НоваяСтрока();
  Док.Записать();
  Конт = "";
  ОткрытьФорму("Журнал."+Док.Вид(), Конт);
  Конт.УстановитьИнтервал(Док.ДатаДок, Док.ДатаДок);
  Конт.АктивизироватьОбъект(Док);
  WSHShell = СоздатьОбъект("WScript.Shell");
  WSHShell.SendKeys("%");
  WSHShell.SendKeys("дк");
  Конт.Форма.Закрыть();
  Флаг = 0;
  Форма.ОбработкаОжидания("Удаление", 1);
КонецПроцедуры // Сформировать()
//******************************************************************************
// Удаление()
//
Процедура Удаление()
  
  Док.Удалить();
  Форма.ОбработкаОжидания("Удалить", 0);
  
КонецПроцедуры // Удаление()
/////**************************************
60 Anton R
 
05.09.05
16:35
+(59) Это - создание нового документа. Для копирования уже существующего - см. 36.
Минус - увеличивается номер при автонумерации :(((
61 Макс 1С
 
05.09.05
16:36
(59) я не говорю, что не работает, я говорю что при использовании скриптов для раскрытия на полный экран формы... не всегда этот скрипт отрабатывается...
а по коду.. зачем сначала создаем док, потом удаляем? (если честно то лень конфигуратор открывать глядеть.... у меня формекс есть, с ним все намного проще работает.....)
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс