DDE-вычислитель для 1с8

В 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». Пока это нюансы движка, в будущем исправим.

Скачать