7.7 СуперЛист: Маленький Excel в вашей 1С!



Иногда так хочется в отчете получить автосумму или простенькое условие Если(А1>0;А1;0)…
Данная обработка позволит прямо в 1С получить некоторые преимущества, которыми нас балует Excel.

С помощью этой обработки можно редактировать электронные таблицы. Есть возможность сохранять/открывать таблицы (формат xml).

Если у вас установлен Microsoft Office то обработка позовляет делать импорт/экспорт с Excel-ем.

Поддерживается конвертация «на лету» из/в стандартный для 1С формат mxl.

 

Требования:

Внешние компоненты 1cpp.dll скачать можно: http://www.1cpp.ru

formex.dll скачать можно: http://www.dorex.ru/?projects&formex

и Веб-Компоненты Microsoft Office (Office 2003 Add-in: Office Web Components) скачать можно: http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=7287252c-402e-4f72-97a5-e0fd290d4b76

Если у вас установлен Microsoft Office, то Веб-Компоненты скорее всего качать не придется.

Наличие самого Microsoft Office не обязательно.

Так же прикладываю обработку, проверяющую наличие всех необходимых для обработки компонент.

 

Из недостатков: работает только с простыми типами данных (строка, число, дата…), нет возможности печати (только через mxl или xls), иногда немного криво переносится форматирование.

 

ЗЫ Для знающих: обработка является оболочкой для OWC11.spreadsheet

40 Comments

  1. mdbm

    Давно уже подумывал как бы пользователям отрубить рабочий стол и все остальное, кроме 1С )))

    И как раз такое нужно было ….

    Завтра потрогаю

    Reply
  2. Alexandra

    Присоединяюсь к предыдущему комменту 🙂

    Reply
  3. boks

    Супер!

    Reply
  4. Noy

    (1,2) Могу порекомендовать еще посмотреть DSOFramer, но он без установленого офиса «не взлетит».

    Вот тут есть пример использования: http://infostart.ru/projects/2378/

    Reply
  5. brr

    Печать есть?

    Reply
  6. Noy

    (5) только из xls или mxl (лишний раз кликнуть нужно:)

    Reply
  7. cs25

    Супер !!!

    Reply
  8. Altair777

    (0) Привел эту разработку в качестве примера 🙂

    http://infostart.ru/blogs/1134/?p=1#comm1

    Reply
  9. Noy

    (8) сенкс.

    Reply
  10. steban

    когда-то делал генерацию таблиц в формате XMLSS из шаблонов:

    http://www.1cpp.ru/forum/YaBB.pl?num=1206552116

    Reply
  11. Noy

    (10) У меня тоже была идея сделать все в виде КОП (заодно и научиться их делать)…

    но к сожалению полной замены mxl все равно не получиться

    Reply
  12. den_vladimir

    добавь проверку загрузки внешних библиотек

    Reply
  13. chessman

    ОФФ: В ЗиКе использую DSOFramer для печати приказов из Word’a. Глюк с отрисовкой кнопок удалось побороть через Плавающую форму.

    Чем хорош DSO, в нем можно открывать любые офисные доки.

    Reply
  14. Noy

    (13) а как борешься с глюком самой плавающей формы (слетает позиционирование в СписокЗначений.ВыбратьЗначение(…)) ?

    Reply
  15. chessman

    😉 особо не заморачиваюсь, просто способ выбора заменил на стандартный, т.е. в отдельном окне.

    Reply
  16. igor_gk

    Интересно…

    Reply
  17. GIZmo

    Вопрос: «А сколько колонок можно ввести в этот <Excel>??? т.к. в стандартном 2003 есть ограничение = 255»

    Reply
  18. Noy

    (17) Точно не скажу, но по-моему как в 2007 екселе (тоесть больше чем 255)

    Reply
  19. Джиневра

    Два дня закачивала обработки 🙂 Ох уж мне это нововведение с рейтингами!… Это я к тому, что лучше было бы одним архивом выложить. Просто ПроверкаСовместимости тоже понадобилась, без нее не могла понять — чего не хватает.

    Сама обработка — просто супер 🙂 Пока ничего не слетало и не выбивало. Жалко только, что Печати сразу нету.

    Reply
  20. Noy

    (19) Я вам открою маленький секрет — если нет возможно скачать из-за рейтинга — можно всегда написать письмо автору с просьбой выслать файлик. Во всяком случае я обычно не отказываю 😉

    Reply
  21. vinogradov@brooms.com.ua

    Ничего. Прикольно. Главное — при установке нифига думать не надо…

    😉

    Спасибо. Думаю, пригодится.

    Reply
  22. chessman

    (14) Глюк решил, через 1c++ и DynamicWrapperX

    Reply
  23. Noy

    (22) Владимир, можно чуть-чуть подробнее?

    Reply
  24. vip

    (22)(23) Если это про плавающую форму, то да, поподробней.

    Основная неприятность это то, что окно плавающей формы продолжает жить после ее закрытия (хэндл не уничтожается).

    Reply
  25. chessman

    (24) vip, я имел в виду глюк с выбором из обычного списка значений (через сервис вообще перестает работать).

    Reply
  26. chessman

    (23) Может я не правильно выразился, речь про глюк обычного списка значений, который «уезжает» после открытия плавающей формы. Если это интересно, то готов поделиться мыслями.

    Reply
  27. chessman

    (24) vip, ты же сам пользуешься DestroyWindow, оно же убивает хендл.

    Reply
  28. vip

    (27) А…

    Я думал, может ты чего другое придумал.

    Reply
  29. Noy

    (26)Да, именно средство борьбы с этим глюком и интересует! Ни разу с DynamicWrapperX не сталкивался — можно хоть саму идею озвучить?

    Reply
  30. chessman

    (29)

    Про DynamicWrapperX — http://www.script-coding.info/dynwrapx.html

    Посмотри, как я окно двигаю вот тут

    http://www.1cpp.ru/forum/YaBB.pl?num=1241706959

    со списком значений тоже самое делаю, единственное он будет «моргать»

    Reply
  31. Noy

    (30) Спасибо, буду «курить».

    Reply
  32. chessman
  33. Noy

    (32) Я чуть по другому обошел проблему:

    подменил везде ВыбратьЗначение на функцию:

    Функция глВыбратьЗначение(Список,Значение,Заголовок=»»,Позиция=»»,Таймаут=0,Способ=0) Экспорт

    Если Способ=0 Тогда

    Возврат Список.ВыбратьЗначение(Значение,Заголовок,Позиция,Таймаут,Способ);

    КонецЕсли;

    Сервис=СоздатьОбъект(«Сервис»);

    Возврат(Сервис.ВыбратьЗначение(Список,Значение,Заголовок,,2));

    КонецФункции

    менюшка позиционируется под координаты мыши, единственный глюк — плавающая форма, в момент, когда видно меню выбора становится типа «активной»…

    Владимир, я чуть понаглею: не поделитесь рабочим примером, как вы уничтожаете плавающую форму?

    Reply
  34. chessman

    (33) Так а эта конструкция будет работать, если ее вызвать 2-й раз? У меня после хотя бы одного открытия Плавающей формы Сервис::ВыбратьЗначение не работает, т.е. ничего не появляется.

    По поводу примера — да мне что жалко что ли 🙂

    Wrap = СоздатьОбъект(«DynamicWrapperX»);
    Wrap.Register(«user32.dll», «DestroyWindow», «i=h», «r=l»);
    Процедура Деструктор()
    РасшФорма = СоздатьОбъект(«РасширениеФормы»);
    РасшФорма.УстановитьФорму(hWnd.Форма);
    Wrap.DestroyWindow(РасшФорма.Дескриптор);
    КонецПроцедуры
    

    Только учти, что форма уничтожается, если она встроена в конфу.

    Reply
  35. Noy

    (34) Спасибо. hWnd — это контекст? Можно этот код размещать в самой плавающей форме (типа призакрытии())?

    у меня эта конструкция работает. из ВК загружены V7plus, dilamail, 1C++ (3.0.1.22), Formex (2.0.5.93). Работает стабильно, но у меня только одна плавающая форма, которая стартует и закрывается одновременно с 1С…

    Reply
  36. chessman

    Аааа….тогда понятно, а вот попробуй где-нить открыть хотя бы один раз плавающую форму, а потом попытайся сделать выбор -Сервис::ВыбратьЗначение.

    hWnd — это контекст

    Reply
  37. chessman

    (35) Забыл номер поста проставить.

    Reply
  38. Noy

    (36) сорри, но мне не понятно.

    У меня сейчас в 1С висит обработка, почти аналогичная http://infostart.ru/public/57767/ в режиме плавающей формы. Если я делаю список.Выбратьзначение — меню привязывается к активному элементу плавающей формы, а если делаю как в (34), то меню привязывается к координатам мыши — не совсем то, чего хотелось бы (пользователи-клавиатурщики жалуются немного), но лучше чем в первом случае.

    тоесть выбор значения работает в обоих случаях, но с разными глюками.

    P.S. я имею ввиду только случай с выбором значения ввиде меню (способ=0)

    Reply
  39. chessman

    (38) А если так сделать

    Сервис=СоздатьОбъект(«Сервис»);

    Возврат(Сервис.ВыбратьЗначение(Список,Значение,Заголовок,,0));

    Reply
  40. Noy

    (39) 🙂 Так не пойдет конечно. Я имел ввиду, что я подменяю способ=0 на способ=2 из метода Сервиса…

    в 38 посте опечатался: вместо «делаю как в (34)» нужно «делаю как в (33)».

    Вообщем понятно, что после открытия плавающей формы нет возможности привязать меню выбора к активному элементу, за исключением способа, предложенного тобой.

    Спасибо за подсказки, буду мучить DestroyWindow.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *