Имя: Пароль:
1C
1C 7.7
v7: ОбработкаОжидания() и Таблица
,
0 kupec
 
18.01.23
09:54
Доброго дня. Ситуацию следующая....Есть обработка, при открытии запускается режим мониторинга, при выполнении определенных условий формируется таблица, сохраняется в html и отправляется адресату, таблица привязана к обработке. При ручной отправке данных, все отрабатывает на ура. При автоматическом режиме (срабатывание обработки) ругается на то, что файл "НазваниеТаблицы" не найден. Вылезает окошко, с кнопкой ОК, соответственно вся обработка встает. Куда посмотреть? Почему обработка не видит таблицу, которая хранится в файле ERT этой обработки? Именно при срабатывании ОбработкаОжидания()
1 Bigbro
 
18.01.23
10:34
<telepat mode on>
ну обработка ожидания у вас из глобальника работает, видимо и таблицу в общих таблицах ищет, если не прописано другое.
<telepat mode off>
2 kupec
 
18.01.23
10:36
Обработка ожидания в самой ERT
3 Builder
 
18.01.23
10:52
(2) Кусок кода покажи где таблицу вызываешь.
4 kupec
 
18.01.23
11:00
Функция ПроверкаЗакрытие()
    ДатаНачало=ТекущаяДата()-30;ДатаКонец=ТекущаяДата();
    Т=СоздатьОбъект("Таблица");
    Т.ИсходнаяТаблица("ЗакрытиеСмены");
    Т.ВывестиСекцию("Шапка");НПП=0;
    Док=СоздатьОбъект("Документ.ЗакрытиеСменыНаККМ");
    Док.ВыбратьДокументы(ДатаНачало,ДатаКонец);
    Пока Док.ПолучитьДокумент()=1 Цикл
        Если Док.Проведен()=0 Тогда
            Продолжить;
        КонецЕсли;
        Если Док.ДатаДок<Дата("01.01.2023") Тогда
            Продолжить;
        КонецЕсли;    
        Если Док.КартаККМ=Док.Банк Тогда
            Продолжить;
        КонецЕсли;                                    
        НПП=НПП+1;Т.ВывестиСекцию("Строка");                      
    КонецЦикла;                                                              
    Если НПП=0 Тогда                                            
        Т.ВывестиСекцию("СтрокаОК");                              
    КонецЕсли;    
    Т.ТолькоПросмотр(1);Т.Опции(0,0,3,6);                            
    Т.ПараметрыСтраницы(1,,,,,,,,,1);
    ИмяФайла="C:\from1C7.7.pdf";УдалитьФайл(ИмяФайла);              
    Т.Записать(КаталогВременныхФайлов()+"telo.html",2);
    Если Сохранить_В_ПДФ(1,Т,ИмяФайла)=0 Тогда
        УдалитьФайл(ИмяФайла);Возврат 6;                    
    КонецЕсли;    
    Если ОтправитьПисьмо(ПолучитьАдресаДляОтправки(),ИмяФайла,"Статистика закрытий смен (эквайринг) "+ТекущаяДата())=0 Тогда
        Возврат 2;
    КонецЕсли;
    Возврат 1;
КонецФункции
5 kupec
 
18.01.23
11:01
Пордон, не то отправил
6 kupec
 
18.01.23
11:02
//создаем таблицу
        Таб=СоздатьОбъект("Таблица");                        
        Таб.ИсходнаяТаблица("ВозвратПоставщику");
        Таб.ВывестиСекцию("Шапка");                              
        ДокументВозврат.ВыбратьСтроки();
        Пока ДокументВозврат.ПолучитьСтроку()=1 Цикл
            Таб.ВывестиСекцию("Строка");                              
        КонецЦикла;    
        Таб.ВывестиСекцию("Подвал");
        //отправляем письмо
        Если ОтправитьПисьмо(ДокументВозврат,КаталогТемп+"\"+ИмяФайла+".xml",Таб)=0 Тогда
            Возврат;
        КонецЕсли;
7 Builder
 
18.01.23
11:29
(6) Ну ХЗ, так вроде все норм.
Точно этот кусок кода в этой же обработке?
Попробуй что ли вынести таблицу в файл, проверь как будет работать.
8 kupec
 
18.01.23
11:30
(7) да точно все в этой обработке, руками же формируется по кнопке, а вот по автоматическому срабатыванию не хочет
9 kupec
 
18.01.23
11:31
Делал и через встроенную ОбработкуОжидания и через Формекс....
10 Андрей_Андреич
 
naïve
18.01.23
12:17
(9) Внешняя обработка? Из разряда маразма - не может обработкаожидания открывать другой ert (допустим с тем же именем но в другом каталоге)?
11 kupec
 
18.01.23
15:19
Обработка внешняя, файл открыть - открываю обработку. В ней обработкаожидания
12 kupec
 
18.01.23
15:20
Где там сказано про открытие обработкойожидания другого отчета? Сам придумал?
13 Злопчинский
 
18.01.23
15:53
сделай таблицу ТАБ внешним макетом - будет работать стопудово
или
попробуй Таб объявить глобальной в обработке
14 kupec
 
19.01.23
12:49
Пробую объявить переменную, по результату отпишусь
15 Андрей_Андреич
 
naïve
19.01.23
12:50
(14) И при открытии
       Таб=СоздатьОбъект("Таблица");                        
        Таб.ИсходнаяТаблица("ВозвратПоставщику");
16 ЯнСмит
 
21.01.23
13:43
А сформированная таблица перед отправкой сохраняется в файл, что я не увидел этого ...
17 kupec
 
21.01.23
16:53
(16) никуда не сохраняется, Таб.ИсходнаяТаблица("ВозвратПоставщику"); вот на этом моменте ругается
18 kupec
 
21.01.23
16:53
(13) добавил, не прокатило.....опять ругается
19 Злопчинский
 
21.01.23
18:23
(18) внешним макетом пробовал?
20 Bigbro
 
23.01.23
04:56
мало кода.
надо проверить на шуточки - скопировать имя таблицы.
может кто-то веселый букву о на английскую поменял например.
гадать можно долго.
21 Злопчинский
 
23.01.23
07:46
(20) это известная трабла.
причина - хз. где-то теряется контекст обработки.
почему-где - хз. это Ёпрст только внятно мог изложить.
с внешним макетом - все норм работает.
22 Харлампий Дымба
 
23.01.23
10:32
(21)+
Сам натыкался пару раз - решал просто создавая нужный макет в общих таблицах.
В числе советов по исправлению, насколько я помню, были ещё ковыряния в меню Действия-Свойства формы. Но мне на помогло, так что заморачиваться не стал.
23 alyuev
 
23.01.23
11:19
А если макет сделать внешним файлом?
24 Djelf
 
23.01.23
11:50
Объяснение бага в 30м посте от АЛьФ Таблица.ИсходнаяТаблица(...), Вызов из другого модуля.
25 Bigbro
 
23.01.23
11:55
(24) класс) век живи век учись)
26 Злопчинский
 
23.01.23
12:33
(23) я об этом давно посоветовал.
27 Злопчинский
 
23.01.23
12:38
(24) малость непонятно что имеет в виду альф под телом модуля. Код модуля после процедур или вообще весь модуль формы?
28 Djelf
 
23.01.23
12:43
(27) Не суть важно, главно что не работает ;)

Впрчем АЛьФ же доработал Твблица.ИсходнаяТаблица(Имя, [Путь])
Где в описании указано: "Если строка пути начинается не с 'MD.', то она воспринимается как путь к файлу внешнего отчета и исходная таблица ищется в этом файле. Необязательный параметр. По умолчанию - пустая строка."
Не проверял.
29 Bigbro
 
23.01.23
12:45
зато понятна схема.
- внизу модуля таблиц еще нет кроме глобальных
- в ПриОткрытии() таблицы уже есть
в запускаемой обработке та же схема.
30 Злопчинский
 
23.01.23
12:52
(29) пофиг. совершенно нормальные обработки. Таб определялась в ПриОткрытии. Не пашет. Иногда. Как в (0).
31 Bigbro
 
23.01.23
12:54
сдаюсь. на такие грабли не наступал, всю жизнь таб определяю и формирую в самом конце когда все действия с базой завершены, остался вывод таблицы. наверное потому и не наступал)
32 Злопчинский
 
23.01.23
12:59
(31) Обходя грабли ms лишаешься бесценного опыта! ;-)
33 kupec
 
24.01.23
20:45
Я сделал так, при открытии

Т=СоздатьОбъект("Таблица");
Т.ИсходнаяТаблица("МояТаблица");

Т - переменная в текущей обработке. При формировании таблицы из процедуры делаю так

Т.Очистить();

2 дня, все работает
34 Злопчинский
 
24.01.23
21:07
(33) ну так это я еще в (13) предлагал
35 kupec
 
25.01.23
11:58
(34) я переменную добавил, но все равно слетало. А вот когда в при открытии переделал создание объекта и позиционирование на выбранную таблицу с чисткой таблицы в процедуре стало работать. Выбор таблицы при открытии 1 раз.
36 uno-group
 
25.01.23
15:59
Зависит от того когда и откуда запускается обработка.
Если это вызвать внизу модуля
//----------
Печать();
То будет ругаться так как формы еще физически не существует.
Если сделать из При открытии то будет работать.
Процедура ПриОткрытии()
Печать();
КонецПроцедуры.
37 kupec
 
01.02.23
11:36
это работает после открытия и создания формы. Не работает именно когда происходит срабатывание обработки ожидания
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший