Перейти к содержимому

Фотография

1С+Excelпроблема с выводом большого отчета


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 9

#1
dmatsynin

dmatsynin
  • Постоялец
  • 361 сообщений
Проблема - открыт эксель создается новая workbooks, в нее начинается вывод. Если пользователь ткнет мышкой в другой эксель.... то вывод начинается туда...
Если скрывать Excel.Visible = "false" оно конечно все нормально будет, но тетки пугаются, что их Эксели вдруг пропадают.
как бороться?
  • 0

#2
dmatsynin

dmatsynin
  • Постоялец
  • 361 сообщений
И еще... Может у когонибудь вдруг завалялась нормальная книжка по VBA в эл.виде? Или перевод микрософтовского референса? Буду благодарен!
  • 0

#3
Bright Sun

Bright Sun

    Управляющий

  • В доску свой
  • 5 225 сообщений
Отчет динамический?
  • 0

#4
dmatsynin

dmatsynin
  • Постоялец
  • 361 сообщений

Отчет динамический?

Что значит динамический в твоем понимании?
Отчет формируется один раз. При изменении параметров отчета, вывод делается в новую копию экселя.

Сообщение отредактировал dmatsynin: 06.01.2005, 13:24:47

  • 0

#5
Bright Sun

Bright Sun

    Управляющий

  • В доску свой
  • 5 225 сообщений
Сохраняй статический отчет "Save as" *.xls
  • 0

#6
Bright Sun

Bright Sun

    Управляющий

  • В доску свой
  • 5 225 сообщений
После небольшой онлайновой беседы с dmatsynin стало примерно понятно, что у него за проблема. :smoke: Он делает вывод инфы через Олю и не делает уточнения, в какой именно шит какой книги! Поэтому вывод происходит просто в текущий открытый шит.
  • 0

#7
dmatsynin

dmatsynin
  • Постоялец
  • 361 сообщений

После небольшой онлайновой беседы с dmatsynin стало примерно понятно, что у него за проблема. :lol: Он делает вывод инфы через Олю и не делает уточнения, в какой именно шит какой книги! Поэтому вывод происходит просто в текущий открытый шит.

Ну попробовал я указывать шит! Теперь спокойно могу тыкать на разные окна экселя - вывод не остановится. Пока не ткнеш на любой другой шит - все, приехали!
  • 0

#8
Bright Sun

Bright Sun

    Управляющий

  • В доску свой
  • 5 225 сообщений

Ну попробовал я указывать шит!...

Чиркани, как ты попробовал. Дай код :p
  • 0

#9
Fobos

Fobos
  • Завсегдатай
  • 137 сообщений
Сделай таким образом: после создания объекта (Эхель), добавления новой книги ".Visible = 0". Выгружай данные.
Как выгрузил (до момента уничтожения объекта) ".Visible = 1". Все путем, ткнуть на другой "Щит" нет возможности (Ексель еще не виден).
По эксперементировал сам: выгружал справочник товаров (наименование) 9200 элементов. По времени: чуть больше 2 минут. При этом паралленьно открыл Эксель (новую книгу) изгалялся в ней.
Окно 1С-овой книги из менюхи не видно (пока обработка идет). Появится оно только после окончания работы обработки. Напортачить не возможно.
Единственное неудобство - если до запуска обработки работать в экселе - после запуска оно скрывается с таск бара до окончания работы обработки (из-за ".Visible = 0"). Предполагаю что у юзера будет паника :smoke:

Обойти это методами экселя (так как ты хочешь) не получится. Перерыл методы и свойства приложения, книги, окна - ничего подходящего не нашел.

Максимум что можно сделать - принудительно перед записью в ячейку активируй нужный лист нужной книги. Я поигрался, но криво это все:
1. Скорость вывода замедляется (прорисовка, фокус, Авто-сохранение)
2. Между выполнениями процедур активации и записи в ячейку пауза большая. Т.е. тыкаясь между книгами можно поймать момент и вывод перенаправится, либо валится обработка (в попытке писал в ячейку)...

ЗЫ: Сделай ч\з видимость, дрессируй юзеров.

Сообщение отредактировал Fobos: 25.01.2005, 15:22:55

  • 0

#10
dmatsynin

dmatsynin
  • Постоялец
  • 361 сообщений
Всем спасибо. Все решилось другим способом, спасибо конференции Т1С!
Пример правильно работающего кода:
Процедура Сформировать()
Эксель = СоздатьОбъект("Excel.Application");
РабочиеКниги = Эксель.workbooks;
РабочаяКнига = РабочиеКниги.Add();
РабочаяКнига.Title = "Лажа";
РабочаяКнига.Subject = "Sales";
Лист = РабочаяКнига.WorkSheets.Add();
Лист.Name = "Отчет"+ТекущаяДата();
НомерСтроки = 0;
НомерСтолбца = 0;
Эксель.Visible = 1;
Сообщить(ТекущаяДата());
Для НомерСтроки=1 По 50 Цикл
Для НомерСтолбца=1 По 20 Цикл
флаг = 1;
Пока флаг=1 Цикл
Попытка
Лист.Cells(НомерСтроки,НомерСтолбца).Value = "Нстр "+НомерСтроки+" Нстл "+НомерСтолбца;
флаг=0;
Исключение
КонецПопытки;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
  • 0


Количество пользователей, читающих эту тему: 1

пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.