Владимир, от души поддерживаю!
Цитата:
Сообщение от
Gustav
Для развесистых стандартных шаблонов (типа акта ОС-1) теперь тоже использую такой вывод с CopyFromRecordset. В файле шаблона создаю еще один лист, можно скрытый, на который вывожу одну строку с необходимыми данными. А в ячейках самого шаблона прописываю формулы-ссылки на ячейки этой выводимой строки. Подход родился в процессе решения задачи по пакетной печати нескольких тысяч актов ОС-1. Один CopyFromRecordset вместо многих присваиваний Range.Value(...) увеличил скорость процесса примерно в 30 раз (иначе можно было бы тихо загнуться на этой печати).
Я использую 3 листа:
- "Бланк" - собственно сформатированный бланк, который подается на печать; в ячейках бланка находятся формулы, ссылающиеся на лист "ТекущаяСтрока" вида: =ТекущаяСтрока!B3.
- "ВыгруженныеДанные" - много строк, выгруженных из Аксапты при помощи CopyFromRecordset, начиная с ячейки B2 (в первой строке, c B1 - заголовки полей для удобства); с дополнительной колонкой A "Печатать?", которая по умолчанию заполняется "единичками" (о ней ниже).
- "ТекущаяСтрока - таблица вида "выгруженных данных", но только с двумя строками (ну, и с теми же заголовками полей, что и на втором листе).
В первой из этих двух строк находятся формулы, ссылающиеся на лист "ВыгруженныеДанные" вида (на примере ячейки B2): =ИНДЕКС(ВыгруженныеДанные!B:B, $A$2). В ячейке $A$2 содержится номер строки, которую надо напечатать. Этот номер меняется в цикле несложным макросом.
Ниже этой строки находится дополнительная строка, каждая ячейка которой ссылается на ячейку выше. Цель: замена 0 пустой строкой в тех случаях, когда отображение 0 на "Бланке" нежелательно. Формула в ячейке B3 такая: =ЕСЛИ(B2=0,"",B2)
Выгрузив данные, пользователь сам решает, какие именно строчки ему надо напечатать, выставляя 0 или 1 в колонке "Печатать?", после чего кнопкой запускает макрос, который бежит по колонке А и печатает бланк для тех строк, у которых в колонке A присутствует 1.
Листы, кнопка, макрос живут в файле *.xlt и при выгрузке пользователь получает своеобразное мини-АРМ для печати.