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 не будет опубликован. Обязательные поля помечены *