1С->Excel (Преобразовать из кодов в символы Unicode)

1. venger 2121 03.02.10 12:50 Сейчас в теме
Есть строковое поле в 1С 7.7 в справочнике товаров, в котором лежат коды символов Unicode, разделенные точкой с запятой, т.е. примерно так, «25163;25226;33014».

При печати дока в Excel, нужно вместо этой строки поставлять в ячейку строку, сложенную из этих символов, преобразованных из кодов уже в символы Unicode.

Сделать в VBA это можно функциями ChrW, AscW, т.е. после вывода дока в Excel из 1С (OLE), нужно запустить функцию VBA, которая пробежится по таким ячейкам и преобразует из кодов в символы эти строки.

Написать подобную функцию не проблема, но как ее запустить из 1С в конце вывода дока в Excel?

Если сохранить функцию в модуле personal.xls, и вызывать из 1С так:
Excel = СоздатьОбъект("Excel.Application");
//…
// Создаем книгу, листы, выводим документ на лист
РабочаяКнига = Excel.Workbooks.Add(); // Добавить рабочую книгу
РабочаяКнига.Activate();
//…
Excel.Visible = 1;
Предупреждение("Экспорт в Excel завершен.");
//…
Excel.Run("personal.xls!ИмяФункции");

То, во-первых, он выполняет нашу функцию, только если открыта какая-либо еще книга с макросами, если нет, то пишет:
---------------------------
Excel.Run("PERSONAL.XLS!MyDocFormat");
{Документ.ИмяДока.Форма.Модуль(178)}: Microsoft Office Excel: Не удалось найти 'PERSONAL.XLS'. Проверьте задание имени и местоположения файла.

При попытке открытия файла с использованием списка недавно использованных файлов из меню ''Файл'' убедитесь, что файл не был переименован, перемещен или удален.
---------------------------

Как подгрузить PERSONAL.XLS при выводе в Excel дока, тогда? Чтоб он всегда видел эту функцию? Как в нее передать значения книги и листа, по которому надо пробежаться и преобразовать коды в символы?

Или как бы создавать макрос сразу в выводимой из 1С книги и в конце запускать его? Что было бы лучше всего, так как не будет требовать наличия в PERSONAL.XLS у каждого пользователя необходимой функции. В общем, получается основной вопрос как выполнять из 1С Excel функции, создавать их из 1С, что было бы вообще хорошо, или допустим из PERSONAL.XLS, хотя бы….
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Tatitutu 3855 03.02.10 12:54 Сейчас в теме
посмотри
http://infostart.ru/public/62799/ ("Троянский конь" или "скрытые" возможности таблиц 1С)
вот это реально поможет
http://infostart.ru/public/62751/ ("... ХОТЬ ДВЕ СТРОЧКИ ВСЕГО..." (для Вашей коллекции))
3. venger 2121 03.02.10 12:55 Сейчас в теме
(2) Я реально смотрел, нифига не помогло;-)
6. Tatitutu 3855 03.02.10 13:00 Сейчас в теме
(3) Если хочешь, скинь мне конкретный пример файла Ехсель - ДО и ПОСЛЕ (как он должен выглядеть)
8. venger 2121 03.02.10 13:03 Сейчас в теме
(6) О, я счас подготовлю пример, ибо второй день бьюсь, не могу пробиться.... Уже подумывал отказываться от Excel и выводить в HTML, но это очень не желательно.... Excel - гораздо лучше и для пользователей привычней...
9. Tatitutu 3855 03.02.10 13:17 Сейчас в теме
(8) хорошо, ты его прям здесь на форуме прикрепи
10. venger 2121 03.02.10 15:17 Сейчас в теме
(9) В общем, в архиве SupportUnicode.rar, есть папка SupportUnicode - это база 1С 7.7. Там уже вбит документ "Приход товара" №1 от 03.02.10 в полном журнале (журнал в меню "Наше меню"). В этом доке есть кнопка, ПечатьВExcel. Выведется в Excel, как оно сейчас. Для примера это файлы ris-1.jpg и книга1.xls. А как должно быть - это ris-2.jpg и книга2.xls - все в том же архиве SupportUnicode.rar. Теперь собственно вопрос в том, как этого добиться?
Прикрепленные файлы:
SupportUnicode.rar
11. venger 2121 03.02.10 15:41 Сейчас в теме
(9) +10, т.е. имеем сейчас такой вывод в Excel:

http://www.infostart.ru/upload/iblock/7f1/ris-1.jpg

А надо добиться такого результата:

http://www.infostart.ru/upload/iblock/080/ris-2.jpg
5. venger 2121 03.02.10 12:58 Сейчас в теме
(2) Хотел в личку вопрос даже задать, но потом подумал на форуме обсудить, в общем, например, в пятнашках, там при открытии книги процедура Excel выполняется, т.е. ее из 1С особо ты и не запускаешь, т.е. выводишь печ. таблицу в которой лежит OleОбъект - Лист Excel, но процедура то WorkBook_Open запускается сама, а не мы ее запускаем когда хотим....
7. Tatitutu 3855 03.02.10 13:02 Сейчас в теме
(5)
но процедура то WorkBook_Open запускается сама, а не мы ее запускаем когда хотим....

так не проблема (это чтобы нагляднее было), давай создадим процедуру или функцию она будет доступна вообще во всех книгах
или как макрос или как функция для вставки в ячейку
4. Tatitutu 3855 03.02.10 12:58 Сейчас в теме
Или возьми за идею вот это
http://infostart.ru/public/62648/ (Как из 1С правильно УКАЗАТЬ MS EXCEL как нужно печатать документы !)

в необходимый документ передаешь метку, а при открытии документа макрос сверяет метку с заранее заданным шаблоном - делает нужные операции , удаляет метку и сохраняет документ.
12. Арчибальд 2707 03.02.10 15:50 Сейчас в теме
:o Шпион из Поднебесной? :o
13. venger 2121 03.02.10 16:02 Сейчас в теме
14. venger 2121 03.02.10 16:07 Сейчас в теме
(12) Более того, я уже организовал возможность внесения, редактирования и просмотра эти символов Unicode в нужных полях, прямо на форме 1С, почти как с обычными полями;-) См. картинку;-) Осталось только печать в Excel победить;-)
Прикрепленные файлы:
15. Арчибальд 2707 03.02.10 16:18 Сейчас в теме
16. venger 2121 03.02.10 16:20 Сейчас в теме
(15) Не, это для наших, которым платят юанями;-) А наши, сами знаете, вообще платить не любят в любом случае;-)
17. tango 540 03.02.10 16:21 Сейчас в теме
полусите юаня позалуста арсибалтя-сан
18. Abadonna 3960 03.02.10 16:28 Сейчас в теме
(17) Щас он у меня кое-чем другим заплатит за офф-топы :D
19. Арчибальд 2707 03.02.10 17:55 Сейчас в теме
(18) Грубый ты :D
(17) Эк тебя "полусить" достало 8-)
20. venger 2121 03.02.10 20:25 Сейчас в теме
(18) Порадую конструктивом;-) Вроде со всем разобрался, наконеццццто;-)

Во-первых, чтобы можно было программно генерить макросы в Excel (книге, листе, модуле) из 1С, надо, чтобы в Excel стояла галка Доверять доступ к Visual Basic Project (пункт меню Сервис -> Макрос -> Безопасность -> Вкладка надежные издатели). См. рис.

Дальше все примерно так:

Перем Excel, РабочаяКнига, РабочийЛист;

// Создаем все…
Excel = СоздатьОбъект("Excel.Application");
Excel.Visible = 1; 	
РабочаяКнига = Excel.Workbooks.Add();
РабочаяКнига.Activate();
РабочийЛист =РабочаяКнига.WorkSheets(1);
РабочийЛист.Select();

// Текст процедуры с передаваемым параметром
ТекстПроцедуры = "Sub MyTest(V)" + РазделительСтрок +  " MsgBox(V)" + РазделительСтрок + "End sub";

// Вставляем процедуру в рабочую книгу
РабочаяКнига.VBProject.VBComponents.Item(""+РабочаяКнига.CodeName).CodeModule.AddFromString(ТекстПроцедуры);

// Вызываем процедуру с передаваемым ей параметром, если их несколько, то через запятую указываем остальные параметры
Excel.Application.Run(""+РабочаяКнига.CodeName+".MyTest","Hi,Venger!");

РабочийЛист.Cells(1,1).Value = "'Что-то выводим…";

// Ну и типа финиш
Сообщить("Экспорт в Excel успешно завершен.");
Показать


Т.е. все необходимое есть - и процедуру создать в книге с передаваемыми параметрами и запускать ее.

Остался вопрос, где в реестре для всех пользователей для Excel проставить галку Доверять доступ к Visual Basic Project (см. рис.)? Иначе при попытке создать программно функцию или процедуру из 1С в Excel будет выдавать ошибку: «Программный доступ к проекту Visual Basic не является доверены», а каждому пользователю в ручную ставить эту галку в Excel – это не фонтан…
Прикрепленные файлы:
21. Tatitutu 3855 03.02.10 21:01 Сейчас в теме
(0) Саня, написал - сам в восторге . С утра выложу.
22. venger 2121 03.02.10 21:07 Сейчас в теме
23. venger 2121 04.02.10 11:22 Сейчас в теме

Остался вопрос, где в реестре ... для Excel проставить галку Доверять доступ к Visual Basic Project


Пока вот что нашел, так ставлю галку;-)
	WScriptShell = СоздатьОбъект("WScript.Shell");
	WScriptShell.RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Security\AccessVBOM",1, "REG_DWORD");
    WScriptShell = 0;



За уровень безопасности отвечает параметр "Level" раздела реестра "HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Security" (для Office 2003).

За доверительный доступ отвечает параметр "AccessVBOM" того же раздела.


А подветки 11.0, 10.0 - в зависимости от версии Office...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот