![]() |
![]() |
![]() |
|
Открытие окна в данном режиме недоступно! | ☑ | ||
---|---|---|---|---|
0
OnCheck
23.03.07
✎
06:47
|
Почему? Если процедуру вызывающую открытьформу() вызывать по кнопке, то работает, а если из функции, то пишет ошибку. "Открытие окна в данном режиме недоступно!"
|
|||
1
Denisыч
23.03.07
✎
06:49
|
код покажи
|
|||
2
OnCheck
23.03.07
✎
06:50
|
Перем тзОбработки;
перем сч; перем КолРаз; //******************************************* Процедура Выполнить() КоличествоПачек=6; докСопроводительный=СоздатьОбъект("Документ.СопроводительныйЛист_новый"); докВозврат=СоздатьОбъект("Документ.ВозвратИзПроизводства"); тзСопроводительныхДляВозврата=СоздатьОбъект("ТаблицаЗначений"); тзСопроводительныхДляВозврата.НоваяКолонка("Документ","Документ"); Если таблицаСопроводительных.КоличествоСтрок()>0 тогда Если Вопрос("Послать на печать измененные Сопроводительные листы?",1,60)=1 тогда флПечать=1; Иначе флПечать=0; КонецЕсли; КонецЕсли; тзОбработки.НоваяКолонка("Ключ","Строка",3,,"Ключ"); тзОбработки.ВыбратьСтроки(); Пока тзОбработки.ПолучитьСтроку()=1 цикл НомСтрСопроводительного=0; КлючПоиска=""+тзОбработки.Ном+тзОбработки.Пачка; КлючПоиска=?(СтрДлина(КлючПоиска)=3,КлючПоиска,"0"+КлючПоиска); Если таблицаСопроводительных.НайтиЗначение(СокрЛП(КлючПоиска),НомСтрСопроводительного,"Ключ")=0 тогда Сообщить("Ошибка работы программы.","!"); Продолжить; КонецЕсли; докСопроводительный.НайтиДокумент(таблицаСопроводительных.ПолучитьЗначение(НомСтрСопроводительного,"Документ")); докСопроводительный.ВесФакт=тзОбработки.ВесФакт/тзОбработки.Количество*докСопроводительный.Количество; докСопроводительный.Записать(); Если докСопроводительный.Провести()=1 тогда Сообщить("Проведен "+докСопроводительный); КонецЕсли; Если флПечать=1 тогда //1-печать //2-показать докус=таблицаСопроводительных.ПолучитьЗначение(НомСтрСопроводительного,"Документ"); ОткрытьФорму(докус,2); Конецесли; тзОбработки.Ключ=КлючПоиска; КонецЦикла; НомСтрВозврата=0; КлючПоиска="000"; Если таблицаСопроводительных.найтизначение(КлючПоиска,НомСтрВозврата,"Ключ")=1 тогда докВозврат.НайтиДокумент(таблицаСопроводительных.ПолучитьЗначение(НомСтрВозврата,"Документ")); докВозврат.ВыбратьСтроки(); Пока докВозврат.ПолучитьСтроку()=1 цикл Для фф=1 по КоличествоПачек цикл Если докВозврат.ПолучитьАтрибут("Кол"+фф)=0 тогда Продолжить; Конецесли; НомСтрКлюча=0; КлючПоиска=""+докВозврат.Ном+фф; КлючПоиска=?(СтрДлина(КлючПоиска)=3,КлючПоиска,"0"+КлючПоиска); Если тзОбработки.НайтиЗачение(КлючПоиска,НомСтрКлюча,"Ключ") =1 тогда докВозврат.УстановитьАтрибут("ВесФакт"+фф,тзОбработки.ПолучитьЗначение(НомСтрКлюча,"ВесФакт")/тзОбработки.ПолучитьЗначение(НомСтрКлюча,"Количество"*докВозврат.ПолучитьАтрибут("Кол"+фф))); Конецесли; КонецЦикла; КонецЦикла; докВозврат.Записать(); Если докВозврат.Провести()=1 тогда Сообщить("Проведен "+докВозврат); КонецЕсли; КонецЕсли; КонецПроцедуры Функция Проработать() сч=сч+1; сообщить("сч "+сч); Если сч=КолРаз тогда Выполнить(); Форма.Закрыть(); КонецЕсли; КонецФункции |
|||
3
OnCheck
23.03.07
✎
06:51
|
функция вызывается из объекта текст на форме
|
|||
4
Denisыч
23.03.07
✎
06:52
|
ОткрытьФорму(докус,2);
это открывает окно? |
|||
5
OnCheck
23.03.07
✎
06:52
|
да
|
|||
6
Denisыч
23.03.07
✎
06:54
|
Если Вопрос("Послать на печать измененные Сопроводительные листы?",1,60)=1 тогда
отрабатывает? |
|||
7
OnCheck
23.03.07
✎
06:56
|
да.
|
|||
8
RomaKRSK
23.03.07
✎
06:59
|
ОткрытьФорму(докус,2);
Форма.Закрыть(); разные формы. |
|||
9
OnCheck
23.03.07
✎
07:00
|
ага
|
|||
10
Denisыч
23.03.07
✎
07:04
|
ОткрытьФорму(докус,2,0);
попробуй и в отладчике глянь что там за значение в переменной докус |
|||
11
RomaKRSK
23.03.07
✎
07:06
|
а что такое "Проработать()" и откуда оно вызывается? Вопрос четко не сформулирован.
|
|||
12
OnCheck
23.03.07
✎
07:06
|
(10) Глянул - документ. Если я вызываю процедуру Выполнить() по кнопке, она нормально прорабатывает, иначе - пишет ошибку.
|
|||
13
OnCheck
23.03.07
✎
07:07
|
(11) смотрите в (3)
|
|||
14
RomaKRSK
23.03.07
✎
07:13
|
это гон - закрывать не открытую еще форму из элемента формы
|
|||
15
OnCheck
23.03.07
✎
07:17
|
(14) я закрываю форму из которой открываю, а не те которые открываю.
|
|||
16
Denisыч
23.03.07
✎
07:18
|
так у тебя функция ниче не возращает.
|
|||
17
Denisыч
23.03.07
✎
07:19
|
короче, все переписать надо
|
|||
18
RomaKRSK
23.03.07
✎
07:19
|
(15) тогда при открытии проверяй что там тебе надо. функция отрабатывает когда еще форма не открыта.
|
|||
19
RomaKRSK
23.03.07
✎
07:20
|
да вообще (0) полный бред
|
|||
20
OnCheck
23.03.07
✎
07:23
|
:-)))))) мОзги. Когда люди не могут найти онять что-то, утверждают, что это полный бред, вы не первый...
|
|||
21
OnCheck
23.03.07
✎
07:24
|
:-)))))) мОзги. Когда люди не могут понять что-то, утверждают, что это полный бред, вы не первый...
|
|||
22
RomaKRSK
23.03.07
✎
07:27
|
это полнейший бред. запихай функцию на кнопку и все заработает. если сч и колраз определены. и читай (15)
|
|||
23
OnCheck
23.03.07
✎
07:37
|
(15) другими словами я закрываю форму обработки, а не форму документа который открываю. А вопрос в этом и заключается почему из кнопки все работает, а из функции нет? Потому что я хочу сразу вызвать процедуру Выполнить(), а не ждать пока юзер нажмет кнопку, а из процедуры ПриОткрытии - нельзя, там контекст проведения документа еще открыт.
|
|||
24
RomaKRSK
23.03.07
✎
08:00
|
"там контекст проведения документа еще открыт." это мощно внушил
"закрываю форму обработки," - ты сначала ее открой. |
|||
25
OnCheck
23.03.07
✎
08:03
|
(24) из модуля обработки документа, открывается форма обработки. В которой вся эта кака и происходит.
|
|||
26
Побрекито
23.03.07
✎
08:12
|
я правильно понял, что ты при проведении документа вызываешь обработку, которая печатает какие-то пачки? не мог бы ты показать процедуру ПриОткрытии()
|
|||
27
OnCheck
23.03.07
✎
08:18
|
ПриОткрытии() чего? Обработки?
|
|||
28
OnCheck
23.03.07
✎
08:18
|
Процедура ПриОткрытии()
Если ТипЗначенияСтр(Форма.Параметр)="СписокЗначений" тогда ТекДок=Форма.Параметр.Получить("Документ"); тзОбработки=Форма.Параметр.Получить("тзВОбработку"); докПодчиненный=СоздатьОбъект("Документ"); тзСопроводительных=СоздатьОбъект("ТаблицаЗначений"); тзСопроводительных.НоваяКолонка("Документ","Документ",,,"Документ"); тзСопроводительных.НоваяКолонка("Ключ","Строка",3,,"Ключ"); докПодчиненный.ВыбратьПодчиненныеДокументы(,,ТекДок); Пока докПодчиненный.ПолучитьДокумент()=1 цикл Если докПодчиненный.ТекущийДокумент().Вид()="СопроводительныйЛист_новый" тогда тзСопроводительных.НоваяСтрока(); Ключ=""+докПодчиненный.ТекущийДокумент().Ном+докПодчиненный.ТекущийДокумент().НомерКол; Ключ=?(СтрДлина(Ключ)=3,Ключ,"0"+Ключ); тзСопроводительных.Ключ=Ключ; тзСопроводительных.Документ=докПодчиненный.ТекущийДокумент(); ИначеЕсли докПодчиненный.ТекущийДокумент().Вид()="ВозвратИзПроизводства" тогда тзСопроводительных.НоваяСтрока(); тзСопроводительных.Ключ="000"; тзСопроводительных.Документ=докПодчиненный.ТекущийДокумент(); Конецесли; КонецЦикла; тзСопроводительных.Выгрузить(таблицаСопроводительных); таблицаСопроводительных.ВидимостьКолонки("Ключ",0); Иначе Сообщить("Передан неверный параметр.","!"); КонецЕсли; //Форма.Закрыть(); КонецПроцедуры |
|||
29
Побрекито
23.03.07
✎
08:19
|
нет, документа ПеремещениеМатериалов !
блин, естественно обработки! |
|||
30
OnCheck
23.03.07
✎
08:21
|
процедура ПриОткрытии() самого дока важна, когда открываешь доки в цикле. я поэтому и спросил.
|
|||
31
Побрекито
23.03.07
✎
08:38
|
и чо, если вызвать Выполнить() из ПриОткрытии(), не срабатывает?
|
|||
32
OnCheck
23.03.07
✎
08:47
|
да, не проработает докВозврат.Провести(), потому что обработка открывается из модуля проведения дока.
|
|||
33
OnCheck
23.03.07
✎
08:51
|
нашел подобное:
Помогите знающие люди что за бредовая ошибка с командой ОткрытьФорму(доки,,); АЛЬФ, обьясните пожалуйста, почему нельзя? |
|||
34
Побрекито
23.03.07
✎
08:56
|
ты точно пробовал? какую ошибку выдаёт?
а докВозврат.Записать() нормально проходит, без ругани? |
|||
35
OnCheck
23.03.07
✎
08:57
|
(34) не знаю, по моему должно нормально проходить, хотя не уверен, но продение факт не проходит - пробовал.
|
|||
36
АЛьФ
23.03.07
✎
09:03
|
Из хистори последней тестовой сборки FormEx:
[.0] объект Сервис: новый метод РазрешитьОткрытиеОкон(Флаг) для обхода запрета открытия форм из формулы реквизита диалога. Принимает в качестве параметра флаг: 1 - разрешить открытие форм, 0 - запретить открытие форм. Метод надо вызывать непосредственно в месте, где открытие запрещено. |
|||
37
OnCheck
23.03.07
✎
09:12
|
очень подробное объяснение :-), понял, очень не хочу прикручивать ВК, делаю только когда другого выхода нету.
а вот еще такой вопрос раз уж вы здесь :-) : почем ВК не отпускает 1С? я принимаю в DLL таблицу значений, во внутреннюю переменную класа, когда закрываю 1С, процесс не убивается. Но если я предварительно вызваю метод объекта ВК, который эту переменную обнуляет, то процесс прекращается. В деструкторе смотреть или не знаю где? Подскажите, можно ссылкой просто. |
|||
38
АЛьФ
23.03.07
✎
09:16
|
2(37) Если не хочется использовать ВК, то надо играть по правилам 1С. Т.е. если пишет, что "недоступно в данном режиме", то и не делать этого в данном режиме.
http://1c.proclub.ru/modules/newbb/viewtopic.php?topic_id=279483&forum=2 |
|||
39
Ёпрст
гуру
23.03.07
✎
09:20
|
(0) Используй ложное закрытие формы.
|
|||
40
OnCheck
23.03.07
✎
09:21
|
(38) значит пусть пользователь по кнопке долбит, или через обработку ожидания вызову. за ссылку спасибо.
|
|||
41
OnCheck
23.03.07
✎
09:21
|
(39) это как?
|
|||
42
Ёпрст
гуру
23.03.07
✎
09:23
|
(41) http://www.sinor.ru/~my1c/knowhow/getskod.html
Делаешь по аналогии, вместо Активизировать воткнешь ОткрытьФорму() ... |
|||
43
OnCheck
23.03.07
✎
09:29
|
Спасибо. Попробую.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |