В 1с6 была такая интересная вещь, как получение в Excel через формулы DDE значений из текущей открытой базы 1с6.
В 1с7 и 1с8 такие вещи отсутствуют. Но я как-то посмотрел, и мне понравилось.
Возможно, понравится и некоторым бухгалтерам. Предупреждаю сразу – вещь на любителя.
Она наверняка пригодится любителям счет и Excel, которые не любят тратиться на программиста.
Идея заключается в
следующем:
· Пользователь настраивает лист Excel, и прописывает в нем формулы для получения данных из базы.
· Пользователь оставляет открытым лист Excel и запускает обработку в текущей базе.
· Обработка подключается к текущему листу Excel, находит формулы для вычисления, вычисляет их, и подставляет в формулы значение результата.
Очень похоже на классическое DDE.
Я пока что реализовал только функцию СКД, СНД, СКК, СКД, ДО и КО. Если будет интерес, то реализую и другие функции.
Формулы записываются через формулу Excel ВЫБОР.
Формула записывается, например, так:
=ВЫБОР(1;0;"СКД";"УС:Счет.Код = ""01.01""";СЦЕПИТЬ("У:Субконто1.Наименование=""";A3;""""))
Первый параметр – всегда единица, второй параметр содержит результат вычислений. Именно на это место 1с будет писать результат. Третий параметр – имя функции, которую нужно вычислить в 1С. Остальные параметры содержат дополнительные параметры, поддерживаемые функцией.
Параметры можно задавать без учета порядка, поэтому чтобы 1с их узнала, на первом месте идет префикс, в данном примере это «УС:» или «У:». После префикса идет текст параметра. Параметры – текстовые.
В обработке можно задать список параметров. Т.е. передавать в запрос, через который вычисляется функция, ссылочные параметры. Имена параметров задаются без пробелов.
Список параметров можно сохранять – выгружать в текст или загружать из текста, а также пользоваться стандартными кнопками сохранения настройки.
Описание параметров:
· У – общее условие, может накладывать любое ограничение по аналитике, нельзя использовать счет
· УС – условие счета – любое условие на счет
· РГ – имя регистра, по умолчанию «Хозрасчетный» для 1С8:БП
· Д1 – начальная дата в формате ГГГГДДММЧЧММ
· Д2 – конечная дата в формате ГГГГДДММЧЧММ, округляется до конца дня
· Д2Т – конечная дата в формате ГГГГДДММЧЧММ, не округляется, точная
В тексте условий можно использовать параметры.
Пример условия без параметров:
У:Субконто1.Наименование="Жилое здание"
Пример условия с параметрами:
У:Субконто1= &ЖилоеЗдание
Пример приведен в файле пакета «Образец Excel.xls».
При вычислении за второй квартал 2006 года получаем:
ОС |
Начальный |
Конечный |
Жилое
здание |
94400000 |
94400000 |
Котельная |
0 |
1944000 |
Линия
фигурного плетения |
1812881,36 |
1812881,36 |
Станок
шлифовальный |
250000 |
250000 |
Сальдо по
группе 01 по жилому зданию: |
94400000 |
94400000 |
Вот что выдает оборотка за этот же период:
Субконто |
Сальдо на начало периода |
Оборот за период |
Сальдо на конец периода |
|||
|
Дебет |
Кредит |
Дебет |
Кредит |
Дебет |
Кредит |
01.01 |
96 462 881,36 |
|
1 944 000,00 |
|
98 406 881,36 |
|
Жилое
здание |
94 400 000,00 |
|
|
|
94 400 000,00 |
|
Котельная |
|
|
1 944 000,00 |
|
1 944 000,00 |
|
Линия
фигурного плетения |
1 812 881,36 |
|
|
|
1 812 881,36 |
|
Станок
шлифовальный |
250 000,00 |
|
|
|
250 000,00 |
|
Итого |
96 462 881,36 |
|
1 944 000,00 |
|
98 406 881,36 |
|
Как видим, результаты идентичны.
Методика получилась рабочей. Ее можно использовать для всяких вручную составленных в Excel балансов.
Правда, работает жутко медленно. Основные тормоза на стороне 1С, а не Excel. Принимаются идеи по ускорению.
Идея №1: Как в Excel быстро найти строки, содержащие нужные формулы, начинающиеся с заданной строки.
Идея №2: Как подсчитать число параметров функции выбор, как извлечь эти параметры, не меняя формулу.
Замечание: Крайне редко обработка может глючить, подставляя вместо «ВЫБОР(1» «ВЫБОР(N». Пока это нюансы движка, в будущем исправим.