|
Отмена проведения открытого документа | ☑ | ||
---|---|---|---|---|
0
Bagirius
16.10.06
✎
20:33
|
Я открываю документ и прямо из формы хочу снять проведение. Функция СделатьНеПроведенным() не приемлема, т.к. документ заблокирован
Делаю так. Есть у меня Обработка, которая снимает с проведения документ, переданный как Форма.Параметр. Т.е. Открываю из документа эту обработку и закрываю документ (Форма.Закрыть()). а когда обработка пытается отменить проведение выдает что Документ заблокирован. Как его отблокировать? |
|||
1
Стрелок
16.10.06
✎
20:34
|
через попытку и обработку ожидания
|
|||
2
Bagirius
16.10.06
✎
20:34
|
+ (0) ну и потом обработка открывает опять форму документа
|
|||
3
Bagirius
16.10.06
✎
20:36
|
(1) Так я один в базе, никто не блокирут кроме меня документы
|
|||
4
shura
16.10.06
✎
20:36
|
||||
5
Стрелок
16.10.06
✎
20:44
|
(3) ты и блокируешь
|
|||
6
Bagirius
16.10.06
✎
20:45
|
(4) Там как-то замудрено.
Мне всего лиши надо разблокировать документ, который я закрыл как Форма.Закрыть() |
|||
7
Bagirius
16.10.06
✎
20:46
|
(5) Сообщить(Док.Блокировка()) выдает 0
|
|||
8
Стрелок
16.10.06
✎
20:51
|
(7) поверь мне на слово - ты блокируешь документ. он не успевает закрыться. ещё раз - в обработке твоей поставь попытка исключение в процедуре, которая вызывается через обработку ожидания. а можно и просто в цикле до тех пор пока документ не распроведётся
|
|||
9
Bagirius
16.10.06
✎
21:12
|
(8) Может я не правильно обработку вызываю из документа
ОткрытьФорму("Обработка.ПровестиКак",ТЗ); Форма.Закрыть(); Но цикл моя зациклился. В обработке я написал: Пока Док.Проведен()=1 Цикл А=А+1; Попытка Док.СделатьНеПроведенным(); Исключение КонецПопытки; Состояние(А); КонецЦикла; Уже А = 500000 :-( |
|||
10
Стрелок
16.10.06
✎
21:16
|
(9) поменяй местами операторы в 9
|
|||
11
Bagirius
16.10.06
✎
21:17
|
(10) Если ты имешь ввиду:
Форма.Закрыть(); ОткрытьФорму("Обработка.ПровестиКак",ТЗ); То тоже самое |
|||
12
у лю 427
16.10.06
✎
21:26
|
подождать немного надо в обработке...
|
|||
13
Bagirius
16.10.06
✎
21:28
|
(12) День?
Я ждал минут 10 Счетчик зашкалил за 1 000 000 |
|||
14
Bagirius
16.10.06
✎
21:28
|
Короче хрень какая то, не могу понять в чем проблема, уже кони берут
|
|||
15
Стрелок
16.10.06
✎
21:32
|
(11) Давай процедуру Приоткрытии обработки
|
|||
16
Bagirius
16.10.06
✎
21:38
|
(15)
ТЗ - Это таблица значений Процедура ПриОткрытии() ТЗ.Загрузить(Форма.Параметр); Если ТЗ.КоличествоСтрок()=0 Тогда Предупреждение("Документ не имеет строк товара"); СтатусВозврата(0); Возврат; Иначе Док.НайтиДокумент(ТЗ.ПолучитьЗначение(1,"Док")); А=0; Пока Док.Проведен()=1 Цикл А=А+1; Попытка Док.СделатьНеПроведенным(); Исключение КонецПопытки; Состояние(А); КонецЦикла; СтатусВозврата(0); Возврат; КонецЕсли; КонецПроцедуры |
|||
17
Стрелок
16.10.06
✎
21:39
|
(16) а ты уверен что документ находится?
покажи процедуру как ты передаёшь (заполняешь) ТЗ в документе |
|||
18
Bagirius
16.10.06
✎
21:40
|
(17)
Находит я проверял через Сообщить() Вот ТЗ ТЗ=СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("Док","Документ"); ТЗ.НоваяКолонка("Фирма","Справочник.Фирмы"); ТЗ.НоваяКолонка("Склад","Справочник.МестаХранеия"); ТЗ.НоваяКолонка("Клиент","Справочник.Контрагенты"); ТЗ.НоваяКолонка("Основание","Строка",50); ТЗ.НоваяКолонка("КЦ","Перечисление.ТипыРасхЦен"); ТЗ.НоваяКолонка("Скидка","Число",5,1); ТЗ.НоваяКолонка("СР","Число",3,0); ТЗ.НоваяКолонка("Сотрудник","Справочник.Сотрудники"); ТЗ.НоваяКолонка("Товар","Справочник.Номенклатура"); ТЗ.НоваяКолонка("Кол","Число",10); ТЗ.НоваяКолонка("Цена","Число",15,2); ВыбратьСтроки(); Пока ПолучитьСтроку()=1 Цикл ТЗ.НоваяСтрока(); ТЗ.Док=ТекущийДокумент(); ТЗ.Фирма=Фирма; ТЗ.Склад=Склад; ТЗ.Клиент=Клиент; ТЗ.Основание=Основание; ТЗ.КЦ=ТипЦен; ТЗ.Скидка=Скидка; ТЗ.СР=СрокРезервирования; ТЗ.Сотрудник=СчетВыписал; ТЗ.Товар=Товар; ТЗ.Кол=Количество; ТЗ.Цена=Цена; КонецЦикла; |
|||
19
Стрелок
16.10.06
✎
21:41
|
и ещё - где создание объекта "Док"? чсего то не увидел?
|
|||
20
Bagirius
16.10.06
✎
21:41
|
+(1)
ну и потом Форма.Закрыть(0); ОткрытьФорму("Обработка.ПровестиКак",ТЗ); |
|||
21
Bagirius
16.10.06
✎
21:42
|
Док как переменная во всей обработке
Перем Док; и в самом нузу Док=СоздатьОбъект("Документ.СчетТ"); |
|||
22
Лефмихалыч
16.10.06
✎
21:43
|
А давайте спросим у автора, зачем ему этот велосипед! Может он просто не знает про расчет регистров или еще про что-нить?...
|
|||
23
Стрелок
16.10.06
✎
21:43
|
(21) ТЗ тоже в теле модуля объявлено?
|
|||
24
Bagirius
16.10.06
✎
21:44
|
(23) Да
|
|||
25
Стрелок
16.10.06
✎
21:44
|
систему отпусти - поставь через обработку ожидания
|
|||
26
Bagirius
16.10.06
✎
21:47
|
(25)
Написал так Пока Док.Проведен()=1 Цикл А=А+1; Попытка ОбработкаОжидания(Док.СделатьНеПроведенным(),1); Исключение КонецПопытки; Состояние(А); КонецЦикла; таже хрень :-( |
|||
27
Лефмихалыч
16.10.06
✎
21:50
|
Кстати, контекст формы не всегда очищается после вызова форма::закрыть(). Тут надо бы ЖКК покурить, но чудится мне, что контекст сразу чистится только если вызван СтатусВозврата(0) в ПриОткрытии().
Но может, мне это только чудится |
|||
28
Стрелок
16.10.06
✎
21:51
|
(26) не парь мозги... иди по ссылке
|
|||
29
Bagirius
16.10.06
✎
21:52
|
(22) Мне надо, что бы именно этот документ, СчетТ был всегда на рабочую дату. Т.е. если редактируют документ созданный вчера, то при проведении он сначала снимается с проведения, потом меняется его дата, сохраняется и проводится текущей датой.
|
|||
30
Bagirius
16.10.06
✎
21:52
|
Сделал как в ссылке, тоже самое. Что то я не так вызываю из документа явно.
|
|||
31
Стрелок
16.10.06
✎
21:52
|
(29) а если на основании счёта вчера была введена накладная? дурацкая метода
|
|||
32
Стрелок
16.10.06
✎
21:53
|
(30) значит руки+мозги
|
|||
33
Bagirius
16.10.06
✎
21:54
|
+ (29) Короче для тупых пользователей, для которых Сделать руками не проведенным документ сложно, и потом поменять дату и перепровести
|
|||
34
Bagirius
16.10.06
✎
21:55
|
(31) если есть расходные по счету, то создается новый счет, а тот снимается из резерва полностью.
Короче это все прописано в обработке и работает, а вот если резерв не использовался, то надо док-т перекинуть, а у меня стопор :-( |
|||
35
Vippi
16.10.06
✎
22:06
|
(0) При использовании эмуляции внешнего события (0) легко решается.
|
|||
36
Bagirius
16.10.06
✎
22:10
|
(35) А это как?
|
|||
37
Vippi
16.10.06
✎
22:11
|
(36) Использование ВК религия допускает?
|
|||
38
Bagirius
16.10.06
✎
22:12
|
(37) ???
|
|||
39
Лефмихалыч
16.10.06
✎
22:13
|
(29) лучше сразу яду 100 грамм...
Используй ввод одного счета на основании другого и там проверки поставь на то, о чем Стрелок в (31) говорит. А свою методу с отменой проведения убери куда-нить подальше... |
|||
40
Bagirius
16.10.06
✎
22:13
|
Если ВнешниеКомпоненты - то ДА
|
|||
41
Vippi
16.10.06
✎
22:14
|
(38) Использование внешних компонент допускаешь в своей работе?
А то отдельные товарисчи будут сутками лепить то, что при помощи ВК уложится в три строчки. |
|||
42
Bagirius
16.10.06
✎
22:15
|
(41) Да
|
|||
43
Vippi
16.10.06
✎
22:19
|
(40) FormEx
В модуле формы документа. Процедура СделатьНеПроведенным0() глТекДок=ТекущийДокумент(); //глобальная переменная Форма.Закрыть(); Сервис.ВнешнееСобытие("СделатьНеПроведенным","",""); КонецПроцедуры В глобальном модуле. Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные) Если Источник="СделатьНеПроведенным" Тогда Д=СоздатьОбъект("Документ"); Если Д.НайтиДокумент(ТекДок)=1 Тогда Д.СделатьНепроведенным(); ОткрытьФорму(ТекДок); КонецЕсли; КонецЕсли; КонецПроцедуры В силу асинхронности внешнего события, работает гарантировано. Не хочешь FormEx, у romix'а есть эмуляция внешнего события. А хочешь свою ВК под это дело нарисуй. Дело пяти минут. |
|||
44
Vippi
16.10.06
✎
22:21
|
(43+) В проц. глобальника поменяй ТекДок на глТекДок.
ОписАлся. |
|||
45
Bagirius
16.10.06
✎
22:29
|
(43)
Если Д.НайтиДокумент(глТекДок)=1 Тогда {Глобальный модуль(1080)}: Недопустимая операция Я в ГлМодуле сначало создаю Перем глТекДок потом глТекДок=создатьОбъект("Документ"); так же? |
|||
46
Vippi
16.10.06
✎
22:33
|
(45) Не так.
В глобальнике. Перем глТекДок Экспорт; Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные) Если Источник="СделатьНеПроведенным" Тогда Д=СоздатьОбъект("Документ"); Если Д.НайтиДокумент(глТекДок)=1 Тогда Д.СделатьНепроведенным(); ОткрытьФорму(глТекДок); КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
47
Bagirius
16.10.06
✎
22:35
|
(46) СПАСИБО ТЕБЕ БОЛЬШОЕ!!!
ВСЕ ПОЛУЧИЛОСЬ. УРА-УРА-УРА |
|||
48
Vippi
16.10.06
✎
22:40
|
(47) Использование эмуляции внешнего события спасает во многих случаях (так же, как вообще использование ВК).
ЗЫ. Ща поборники "штатных" средств навалятся. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |