Re: Область "выполнить" и формирование отчета

Добрый день! Подскажите пожалуйста, как решить такую проблему:
написал процедурку, чтоб она обрабатывала данные в Аксесе перед выгрузкой в Ёксель, указал её в области "выполнить". смысл ее в том, что она заполняет пустую таблицу, из которой я уже потом беру данные в отчет... тока вот видимо для уменьшения потери времени пользовательская процедура (т.е. моя) и выгрузка данных в отчет выполняются по возможности параллельно, что ли... вывод данных в отчет производится на половину  Хотя, написанная мной процедура отрабатывает правильно и таблицу заполняет полностью! Как быть шаблоны отчета (Аксес и Ексель) прилагаю

Re: Область "выполнить" и формирование отчета

пользовательская процедура вызывается после выгрузки данных в аксес

Re: Область "выполнить" и формирование отчета

На это и рассчитывал, когда писал ее! все верно... тока вопрос немного не о том...  о выгрузке данных в Ексель из Аксесовского шаблона. В ЭТОМ, я имел ввиду, какая та проблема, с которой чтоб справиться, я и обратился к вам с просьбой о помощи...

Re: Область "выполнить" и формирование отчета

Не совсем понятно что означает "о выгрузке данных в Ексель из Аксесовского шаблона".
Пользовательская процедура и выгрузка данных не выполняются параллельно. Сначала данные выгружаются в аксесс, затем запускается то что написано в "макро после". Там у вас написан вызов процедуры Report. Данная процедура находится в прицепляемом модуле Reports. Эта процедура запускает на выполнение репортер. Репортер видит что в области Выполнить указан вызов вашей процедуры "call itogi", вот он ее и запускает на исполнение прежде чем формировать отчет по вашему бланку. После того как выполнится ваша процедура, начнется формирование отчета с учетом указанного источника данных и правил получения значений для элементов бланка (это наверно вы и называете выгрузкой данных в Ексель из Аксесовского шаблона).
Откройте ваш файл 1.xls и нажмите Ctrl-P (это запуск процедуры Start, которая формирует отчет с отображением заполнения каждой строки документа, в отличии от Report, она не убивает после себя лист с бланком и рабочие листы, запускать ее можно несколько раз тем самым отлаживая свой бланк). У меня при запуске вылетает ошибка
Runtime error '13'  Type mismatch
Если нажать Debug, то прилетаем на 34 строку вашего модуля Module2 в процедуре itogi, строка такая
norm = IIf(IsNull(mat_rs(6).Value), 0, Round(mat_rs(6).Value, 5))
Ошибка из-за тог, что значение mat_rs(6).Value текстового типа, а не числового. Напишите так
norm = IIf(IsNull(mat_rs(6).Value), 0, Round(Val(mat_rs(6).Value), 5))
тогда пройдет дальше, но дальше есть подобные ошибки
в строке 37
norm = IIf(IsNull(mat_rs(3).Value), 0, Round(mat_rs(3).Value, 5))
в строке 40
ves = IIf(IsNull(mat_rs(4).Value), 0, Round(mat_rs(4).Value, 5))
Вообщем вам нужно поотлаживать свой модуль.

Re: Область "выполнить" и формирование отчета

Я наверное неправильно как-то выразился... имел ввиду именно работу модуля report и пользовательскую процедуру... Впринципе понял, что пока пользовательская не выполниться, передача в бланк не начнется, так?
У меня ошибок не выдает!  Хм... возможно в 2003 не обязательно число написанное в текстовом поле преобразовывать в число?! Исправить это для совместимости с 2000 офисом - 5 минут... спасибо, что указали на косяк такой! а что дальше?
В присланом мной отчете (сделанном, кстати, с помощью упомянутых ctrl+P) видно, что заполнен он тока на половину (а таблицу itigovaya в базе я очистил просто). Т.е. как я уже говорил, мой модуль выполняется правильно и заполняет нужную таблицу необходимыми данными (это проверял уже много раз)! далее при выгрузке в бланк, как видно, выгружается тока первые несколько строк из таблицы, а остальные (например, по цеху №14 в данном случае) тока половина строки из источника данных! и остальные данные он попусту не видит! т.е. и итоги считает, как будто данные по цеху14 нулевые!
Вот я и подумал, что возможно задачи по передачи данных в бланк и выполнении пользовательской процедуры ведутся параллельно, потому что такое впечатление, что передается в бланк еще не до конца сформированный источник данных... Но, причина в другом, как оказалось... все таки подскажите, пожалста, как справится с этим?

Re: Область "выполнить" и формирование отчета

dr.On писал(а):
Впринципе понял, что пока пользовательская не выполниться, передача в бланк не начнется, так?

Так, если под передачей в бланк вы понимаете процесс формирования отчета. Чтоб мы правильно друг друга понимали вкратце опишу процесс формирования отчета: добывается источник данных и перебираются его записи, на каждой записи проверяются условия формирования для шаблонов строк, если условие выполняется то формируется строка, при этом добываются значения для ее элементов. Все досточно просто. У вас два шаблона строки, одна без условия, значит должна формироваться для всех записей источника данных. А источник данных в вашем случае это таблица ITOGOVAYA, а она пустая т.к. вы ее очистили, а у меня ваш модуль не работает и поэтому проверить правильность формирования я не могу т.к. вылетает вышеописанная ошибка, а времени добиваться работоспособности вашего модуля нет. Так что выкладывайте снова, будем смотреть.

Re: Область "выполнить" и формирование отчета

Доброе утро! 

посмотрел еще раз свой модуль! единственная причина, почему он может не работать на вашем компе - это, мне кажетсо, различные знаки разделения целой и дробной части числа в моей и вашей системах... Если не затруднит, поменяйте себе на некоторой время знак, чтоб отчет отработал (Пуск---> панель управления--> языки и стандарты). Потому что проблема все таки остается, так как при правильном и полном заполнении таблицы ITOGOVAYA, которая, как вы справедливо заметили, является источником данных и должна передать все свои строки в бланк, все данные не передаются. А именно, в представленном примере, половина последней строки! и при этом при подсчете итогов, так же не используются эти данные! Единственное, что заметил нового, так это то, что иногда отчет формируется правильно! на моей машине с отношением 1:5 правильных и неправильных (просто, если делать отчет несколько раз подряд на одно и тоже изделие)!

Re: Область "выполнить" и формирование отчета

Действительно ошибка возникала из-за знака разделения целой и дробной частей. Поправил знак, заработало, получил у себя тот же эффект, но причину сего так и не понял. Такое впечатление что метод Run для Access.Application (через него и выполняется пользовательская процедура) работает не синхронно, а асинхронно. Хотя если в конце ваше процедуры itogi повесить окно, типа MsgBox "OK", то все отрабатывает правильно.

Re: Область "выполнить" и формирование отчета

Спасибо! 
воспользуюсь тогда вашим советом по поводу месаджбокса (лижбы работало), а то я зачем-то несколько отчетов сделал, работающих по такому принципу
Тогда если появятся какие нить мысли в будущем, как избавиться в конечном итогое и от msgbox, напишите пожалуйста!
Еще раз благодарю, всего доброго!

Re: Область "выполнить" и формирование отчета

вот здесь https://forum.technologics.ru/viewtopic.php?p=7152#7152