Имя: Пароль:
1C
 
Открытие окна в данном режиме недоступно!
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
Спасибо. Попробую.