gifts2017

Выгрузка в OpenOffice Calc. Платформа 7.7. Формирование прайса и формы заказа

Опубликовал Александр Шпак (a_shpak) в раздел Программирование - Практика программирования

Выгрузка в OpenOffice Calc (форматирование, формулы, гиперссылки, закрепление областей, добавление листов, удаление сетки).

Сохранение табличных документов в формате XLS штатными средствами 1С приводит к частичной потере форматирования. Правильные программеры и их нежно любимые подруги используют для этого внешнюю компоненту Yoksel
http://yoksel.net.ru/HomePage
Кроме того, Yoksel позволяет добавлять листы в файл XLS.

Прочие вкусности и полезности можно произвести, используя психоделический синтаксис, которому правильного названия не знаю. 
Но слова MSScriptControl, language = "javascript" и даже com.sun.star.ServiceManager там точно были. 

К публикации приаттачен архив каталога информационной базы с демонстрационной конфигурацией 1С:Торговля.
Вход Администратором без пароля.
Через меню «Сервис – Дополнительные возможности» пытливому взгляду доступны две внешних обработки.

  • Первая демонстрирует возможности выгрузки в простенькую таблицу (скриншот). В процессе работы на короткое время показывается временный файл. Если его делать visible(0), формулы и гиперссылки не выгружаются.  
  • Вторая обработка – выгрузка в XLS файл нескольких вариантов прайс-листа и проформ заказа товара. 

Для корректной работы второй обработки в конфигурацию внесены микроскопические изменения:

  • Справочник Номенклатура
    •   Реквизит ВебСсылкаОписание (строка неограниченной длины)
  • Новый справочник УсловияСкидок (меню «Справочники – Цены и налоги – Условия скидок»)
    •   Реквизиты СуммаОтгрузки, ПроцентСкидки


Итак, варианты прайса:

  1. Обычный прайс по выбранному типу цен.
  2. Прайс по скидками – цена товара изменяется в зависимости от объема заказа. (скриншот)
  3. Проформа заказа товара (скриншот). Клиент указывает желаемое количество товара, программа считает общую сумму заказа и находит на втором листе колонку цен, соответствующую этой сумме. Заказ пересчитывается по новым ценам. Повторный пересчет не делается, т.е. зацикливания не будет.
    Одновременно вычисляется объем (в куб.м) заказа, логисты любят эту цифру. Для хранения объема единицы товара используется поле «Вес» единицы измерения.
    Маленькая хитрость. Второй лист, 7 строка, колонки 5 и далее – белый фон, белый шрифт. Но там живут цифры, нужные для расчетов.
  4. Специальный прайс для конкретного клиента. Цена берется по последней отгрузке этому клиенту. Если отгрузки не было – то базовая цена без скидки.


Несколько общих замечаний. 

Файлы внешней компоненты Yoksel надо поместить в каталог информационной базы (SpreadSheet.dll и файл Синтакс-Помощника yoksel.als). Внешняя компонента не требует регистрации в реестре Windows, но первый запуск 1С с ее загрузкой надо сделать с правами администратора.

Форматирование шрифта гиперссылок не обязательно, но это красиво. Лучше манной каши с винегретом.
Удалить сетку (SheetGrid) не всегда удается. На одних компьютерах работает, на других не очень. 
При повторном формировании отчетов указывайте новое имя или закрывайте ранее открытый файл XLS.
Офис 2007 иногда ругается на ошибку DDE при открытии файла, однако сам файл создается корректно, можно его посмотреть руками.

Ресурсы по теме

http://www.citforum.ru/programming/delphi/openoffice/

http://articles.org.ru/cn/showdetail.php?cid=6064

http://api.openoffice.org/docs/common/ref/com/sun/star/i18n/NumberFormatIndex.html#SYSTEM

Скачать файлы

Наименование Файл Версия Размер
Архив каталога информационной базы 139
.zip 4,27Mb
28.10.09
139
.zip 4,27Mb Бесплатно
Внешняя компонента Yoksel 109
.zip 1,04Mb
28.10.09
109
.zip 1,04Mb Бесплатно

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Артур Аюханов (artbear) 30.10.09 17:19
Непонятно, при чем здесь OpenOffice Calc ? в описании ни слова о нем не сказано, только в названии!
2. Александр Шпак (a_shpak) 30.10.09 17:54
Технология работает, если выгруженный файл открывать OpenOffice'ом.
MS Office не требуется, хотя файл откроется и под ним.
Синтаксис, характерный для MS, не будет фунциклировать под ОО.
В тексте модуля выгрузки есть закомментаренный фрагмент (копировал из записанных макросов). Ощутите разницу.

=LOOKUP ($J$5;$'прайс со скидками '.$E$7:$V$7;$'прайс со скидками '.E10:V10) //OOO

=ПРОСМОТР($J$5;'прайс со скидками '!$E$7:$V$7;'прайс со скидками '!E10:V10) //MSO

В остальном формат скриптов, наверное, одинаков.
А вообще... Если честно, рожал методом научного тыка. Есть результат, он дышит. Нужны ваши поправки и комментарии. Реально нужны.
3. Владислав Миронов (gremlin1978) 18.01.10 05:38
Поставь ООО и всё сразу встанет на свои места временный файл точно по опенофис рисует
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа