Имя: Пароль:
1C
1C 7.7
v7: Проведение документа из обработки
,
0 Серёга060790
 
05.03.12
11:37
Доброго времени суток, уважаемые профессионалы!
Помогите, пожалуйста. Пишу обработку на 1с 7.7, обработка должна проводить несколько документов подряд, при этом если один из них не проводится( по объективным причинам), то выполнение обработки обрывается, остальные документы соответственно даже не пробуют проводиться. Можно ли сделать так, чтоб при невозможности проведения одного документа обработка не "вылетала", а продолжала работать? Заранее спасибо.
1 Deon
 
05.03.12
11:38
Дык попытку используй
2 Попытка1С
 
05.03.12
11:39
Попытка
3 Господин ПЖ
 
05.03.12
11:39
сила транзакции и попытки поможет тебе, Люк
4 Wobland
 
05.03.12
11:41
буду оригинален: можно
5 Серёга060790
 
05.03.12
11:41
Пробовала помещать "Док.Провести()" в оператор "Попытка". Не помогло.
6 Серёга060790
 
05.03.12
11:42
Эффект тот же, что и без попытки, к сожалению...
7 Wobland
 
05.03.12
11:42
(5) даже не знаю теперь, просить ли фото
8 Серёга060790
 
05.03.12
11:47
Я добавила фото, просто младший брат зарегился на мою почту...
9 Серёга060790
 
05.03.12
11:47
Помогите, пожалуйста...
10 Deon
 
05.03.12
11:48
(5) Покажи код
11 Серёга060790
 
05.03.12
11:48
Единственное, что приходит в голову: вынести в обработку проверку возможности проведения документа из процедуры "ОбработкаПроведения"
12 Wobland
 
05.03.12
11:51
(11)
Попытка
 Провести()
Исключение
 тут что?
КонецПопытки
13 Серёга060790
 
05.03.12
11:52
В процедуре :
Попытка
   Записать();
   Провести();                
Исключение
   Сообщить("Не проведен");        
КонецПопытки;
14 Серёга060790
 
05.03.12
11:54
извиняюсь, "Док.Провести();"
15 Wobland
 
05.03.12
11:54
(13) и что получается? сообщает и едет дальше. кстати, запоминаешь как-то результат проведения?
16 Серёга060790
 
05.03.12
11:56
ничего не сообщает, выдает сообщение "Документ не проведен!" и на этом обработка завершает свою работу.
17 Серёга060790
 
05.03.12
11:57
т.е. получается до строки исключения обработка не доходит - прерывается...
18 povar
 
05.03.12
11:57
(16) проведи "руками", может там остатков не хватает или еще какая дрянь
19 Wobland
 
05.03.12
11:58
(18) дык вот она и хочет при неправильном документе аккурантую работу обработки
20 palpetrovich
 
05.03.12
11:58
что, код очень большой? ...сдается мне ты что-то недоговариваешь Серёга :)
21 Серёга060790
 
05.03.12
11:58
Да, остатков не хватает действительно, этот документ и не должен проводиться, но следующие за ним - должны...
22 ЧеловекДуши
 
05.03.12
11:59
(16)Пиши так...

В процедуре :
Попытка
   Док.Записать();
   Док.Провести();                
Исключение
   Сообщить(""+ОписаниеОшибки()+"
   |Не проведен");        
КонецПопытки;

А может все дело в "ДНК" ? ;)
23 povar
 
05.03.12
11:59
(19) ну йопт, я с конца ветку читаю )
24 ЧеловекДуши
 
05.03.12
12:01
Странно, никто не предложил Девушки/Мужику(СереЖи) почитать две Жёлтые книги про язык 1С :)
25 Серёга060790
 
05.03.12
12:02
Это в модуле формы документа(обработка по очереди отрывает документы):
Процедура ПриОткрытии()
   Если Найти(Форма.Параметр, "ИЗГрупповойОбработки")<>0 Тогда
       Попытка
           Записать();
           Провести();    
               
       Исключение
           Сообщить( "Не удалось провести документ "+       ТекущийДокумент());
       КонецПопытки;
КонецПроцедуры;
КонецПроцедуры;
26 Wobland
 
05.03.12
12:02
(25) провести при открытии? это сильно!
27 Серёга060790
 
05.03.12
12:04
это работает нормально, когда проведение документа возможно: остатков на складе хватает  и т.п.
28 palpetrovich
 
05.03.12
12:04
о, я таки был прав в (20) ...уже и не обработака :))
29 Wobland
 
05.03.12
12:05
(27) это ненормально, задумайся
30 povar
 
05.03.12
12:05
нахрена вообще документ открывать ?
31 palpetrovich
 
05.03.12
12:05
(27) это работает НЕНОРМАЛЬНО!!! убирай  быстрей из ПриОткрытии() пока кто-нить из рядом находящихся не увидел :)
32 Серёга060790
 
05.03.12
12:05
Да, извините, просто не хотела отвлекать ваше внимание на то, что этот код не в обработке.
33 Wobland
 
05.03.12
12:06
(32) да нормально, нам совершенно не влом прочитать 30 с лишком постов за просто так ;)
34 Lazy Stranger
 
05.03.12
12:08
а если в обработке написать
попытка
ОткрытьФорму("Документ.ХХХХ");
исключение
Сообщить("ну не шмогла...");
конецпопытки
35 povar
 
05.03.12
12:09
(34) анальная стоматология какаи то )
36 Серёга060790
 
05.03.12
12:10
(34) форму обработка открывает нормально, а вот, если один из открываемых (создаваемых) обработкой доков не проводится, то она прерывается...
37 palpetrovich
 
05.03.12
12:12
короче так, если хочешь реальной помощи - не надо ничего скрывать, опиши что надо сделать - толку будет больше
38 Серёга060790
 
05.03.12
12:12
я на инфостарте скачала обработку (ее все хвалили), там как раз для ввода на основании программист открывает формы документов, я также и делала...
39 povar
 
05.03.12
12:13
(36) про модальные формы че нить слышала ?
40 palpetrovich
 
05.03.12
12:13
(36) блин, так обработка открывает форму исключтельно для того что-б провести при открытии?! ...это пипец
41 Серёга060790
 
05.03.12
12:14
обработка в конфигурации ПУБ должна для документов "Заявка" вводить на основании и проводить "Реализации" и "СФ".
42 Godofsin
 
05.03.12
12:14
(38) в (30) говорят правильно. Для проведения доков из обработки, открытие форм не нужно и даже вредно.
43 Серёга060790
 
05.03.12
12:16
Для ввода на основании я и открываю форму, как на инфостарте написано... Т.е. надо форму не открывать...
44 Godofsin
 
05.03.12
12:16
(41)
Док = СоздатьОьъект("РеализацияТоваровИУслуг");
Док.новый();
......
......
......
Попытка
Док.Провести();
Исключение
........
КонецПопытки;

И т.д.
45 palpetrovich
 
05.03.12
12:17
(41) и все? дык, какие проблемы, вот так и делай как описала в 41. Выбирай нужную Заявку на форме обработки, проверяй на существование подчиненных "Реализации" и "СФ" и если их нет - создавай новые и проводи их
46 Godofsin
 
05.03.12
12:19
(43) Там есть реквизит "ДокументОснование", если мне не изменяет память.
47 Серёга060790
 
05.03.12
12:20
Спасибо большое, сейчас попробую без чужой обработки ввода на основании, в которой он выполняется с открытием формы вводимого документа, написать, как Вы говорите. Еще раз, спасибо!
48 Godofsin
 
05.03.12
12:21
*создатьОбъект("Документ.РеализацияТоваровИУслуг");
49 palpetrovich
 
05.03.12
12:22
(47) ты это, заходи если чё :)
50 Серёга060790
 
05.03.12
12:23
Здорово, когда столько умных людей помогают, сразу уверенности, что всё получится прибавляется! Спасибо Вам;)
51 Jaffar
 
05.03.12
12:28
и фотка правильная всегда поможет (даже несмотря на несколько странный ник...)
52 palpetrovich
 
05.03.12
12:47
(50) должно получиться нечто типа:
Процедура Сформировать()


   Если ДокДокЗаявкаНаФорме.Выбран()=0 Тогда
       Возврат;
   КонецЕсли;

   РеализацияЕсть = "нет";
   СчетФактураЕсть = "нет";
   ДокПодчиненные = СоздатьОбъект("Документ");
   ДокПодчиненные.ВыбратьПодчиненныеДокументы(ДокЗаявкаНаФорме.Дата, ,ДокЗаявкаНаФорме);
   Пока ДокПодчиненные.ПолучитьДокумент() = 1 Цикл
       Если ДокПодчиненные.Вид() = "Реализация" Тогда  // именно так называется ?
           Сообщить("Уже есть " + ДокПодчиненные.ТекущийДокумент());
           РеализацияЕсть = "да";
       КонецЕсли;
       Если ДокПодчиненные.Вид() = "СчетФактура" Тогда  // именно так называется ?
           Сообщить("Уже есть " + ДокПодчиненные.ТекущийДокумент());
           СчетФактураЕсть = "да";
       КонецЕсли;
   КонецЦикла;
           
   Если РеализацияЕсть = "нет" Тогда
       ДокРеализация = СоздатьОбъект("Документ.Реализация");
       ДокРеализация.ДокументОснование = ДокЗаявкаНаФорме;
       ДокРеализация.Контрагент = ДокЗаявкаНаФорме.Контрагент;  
       // остальные реквизиты шапки и общие
       ДокЗаявкаНаФорме.ВыбратьСтроки();
       Пока ДокЗаявкаНаФорме.ПолучитьСтроку()=1 Цикл
           ДокРеализация.НоваяСтрока();
           ДокРеализация.Товар = ДокЗаявкаНаФорме.Товар;
           // остальные реквизиты табличной части
       КонецЦикла;    
       Попытка
           ДокРеализация.Записать();
           ДокРеализация.Провести();
       Исключение                  
           Сообщить("" + ОписаниеОшибки());
       КонецПопытки;
   КонецЕсли;
               
   Если СчетФактураЕсть = "нет" Тогда
   // тоже самое по документу СчетФактура
   КонецЕсли;

КонецПроцедуры
53 palpetrovich
 
05.03.12
12:48
*  описка
"Если ДокДокЗаявкаНаФорме.Выбран()=0 Тогда" читать как "Если ДокЗаявкаНаФорме.Выбран()=0 Тогда"
54 Серёга060790
 
05.03.12
12:56
(52) Спасибо огромное,  palpetrovich, очень выручили!
55 palpetrovich
 
05.03.12
13:04
(54) та лано, там тебе допиливать и  допиливать :)
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший