gifts2017

ПЕЧАТЬ ИЕРОГЛИФОВ из 1С

Опубликовал Юрий Тимофеев (Tatitutu) в раздел Обмен - Загрузка и выгрузка в Excel

Если Вам нужно печатать из 1С иероглифы, а Вы не знаете как - предлагаю один из вариантов решения. А если Вы знаете - предложите свой, буду премного благодарен.

Недавно на форуме был задан вопрос:

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

Я попытаюсь на него ответить (предложить свой вариант решения задачи)

Задача: Как преобразовать

из кодов (2 столбец 1 строчка)

в символы (2 столбец 2 строчка)

(см. рисунок)


Давайте попробуем пошагово решить задачку с помощью замечательной функции MS EXCEL (VBA) -  ChrW()

Создадим новую книгу   MS EXCEL

 

Перейдем в редактор VBA (Alt+F11) или меню Сервис->Макрос->Редактор VBA

Откроется редактор

Так выглядит "пустая"  книга. Нам нужно в меню Insert (Вставка)->Module

"Нам нужен холст, чтобы написать картину"(с)

Вот здесь мы и напишем нашу первую функцию

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

Переходим обратно на лист. Выбираем в меню Вставка - Функция 

 

и видим что в категориях добавился пункт "Определенные пользователем" , где мы можем выбрать функцию "ПереводВКитайский(Ind)" .

Сделаем это и укажем ячейку с нашими символами (или можно их прямо тут и ввести и сразу увидим результат.

 

 

Итог: мы только что с вами внедрили в книгу нашу функцию. В этой книге будет все работать на ура.

Минус - а что делать в других книгах?

При открытии будет вылезать окно "Отключить макросы или нет ?""

Пойдем дальше....

Для этого сохраним нашу книгу, на как книгу (*.xls) а как надстройку (*.xla)

Меню Файл -> Сохранить как... 

Сохранили, закрываем все открытые книги. Снова заходим в MS EXCEL (создадим новую книгу)

В меню  Сервис->Надстройки-> Обзор выберем нашу  надстройку TranslChina.xla

Должно появится окошко:

Ставим галочку, закрываем. Теперь нашу функция  "ПереводВКитайский(Ind)" будет доступна в любых документах .... но только на этом компьютере.


Но мы же с вами тут за 1С говорим ...

Дальше вам понадобится прочитать статью:

"Троянский конь" или "скрытые" возможности таблиц 1С

Не буду про нее повторятся, но !!!

При выводе на экран в 1С

 

мы увидим кракозяблы...  они нам НЕ НУЖНЫ, а вот если кликнуть на внедренный объект, то получим то, что хотели.

 

 

 

В прикрепленной обработке я немного дописал алгоритм, но это шаблон рыба (только направление)

Смысл : во внедренном объекте формируем "наш перевод" сохраняем на диске как файл и уже потом открываем (или печатаем) нужный нам файл.

Во вложении:

- внешняя обработка с внедренным объектом MS EXCEL

-  книга1.xls с нашей функцией

- готовая надстройка TranslChina.xla 

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

Наименование Файл Версия Размер Кол. Скачив.
china.zip
.zip 25,10Kb
14.02.12
41
.zip 25,10Kb 41 Скачать

См. также

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

Комментарии

1. Юрий Тимофеев (Tatitutu) 04.02.10 12:17
ну шо китай, япония - бойтесь...1С идет к вам ))))
2. Трактор Трактор (Трактор) 04.02.10 12:34
Сурово! Боюсь что таким способом делать печатные формы весьма затруднительно :|
Китай может остаться не завоёванным.
Кстати, товарищ недавно размышлял на тему написания международной конфигурации для разных вьетнамов и африк. Говорит рынок пустоват и САП с Ораклом не счастье в жизни, а нечто менее удобное чем 1С.
3. Александр Венгер (venger) 04.02.10 12:41
(1) Н-да, и так для каждого пользователя на каждом компе?

А так? Ну понятно, что вместо макроса "MyTest" создаем то, что нам нужно, и выводим реальные данные и т.п. А галку в реестре, после можно и снимать, тоже программно, если уж так не нравится разрешенный доступ к VBA из других приложений для пользователя.... Зато никакого гемарроя с внешними файлами, настройками для каждого пользователя, версиями офисов и т.п. Никаких вопросов пользователю не задается, ничего настраивать не надо...

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

Попытка
	// Устанавливаем для пользователя галку программного доступа к VBA
	// Подветки 11.0, 10.0 - зависят от версии Office...
	WScriptShell = СоздатьОбъект("WScript.Shell");
	ВерсияОфиса = СокрЛП(WScriptShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Application\CurVer\"));	
ВерсияОфиса=Прав(ВерсияОфиса,СтрДлина(ВерсияОфиса)-Найти(ВерсияОфиса,"."));
ВерсияОфиса=Прав(ВерсияОфиса,СтрДлина(ВерсияОфиса)-Найти(ВерсияОфиса,"."));
	ВерсияОфиса=ВерсияОфиса+".0";
	WScriptShell.RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Office\"+ВерсияОфиса+"­\Excel\Security\AccessVBOM",1, "REG_DWORD");
    WScriptShell = 0;
Исключение
КонецПопытки;

// Создаем все…
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 не удался.","i");
	Сообщить(""+ОписаниеОшибки()+". Обратитесь к администратору.","i");
	Возврат;
КонецПопытки;

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

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

// Ну и типа финиш
Сообщить("Экспорт в Excel успешно завершен."); 
...Показать Скрыть
4. Михаил Ражиков (tango) 04.02.10 12:41
на Китае настоящий БГ обломился, а уж 1С...
ну не было в Китае Луки Пачолли. не нужен он им
5. Юрий Тимофеев (Tatitutu) 04.02.10 12:43
Сурово! Боюсь что таким способом делать печатные формы весьма затруднительно


да ладно...в статье описаны три разных способа.
а третий вообще готовая "рыба" засунь в нее список значений , отредактируй макет и все
6. Степашка Никулин (Styvi) 04.02.10 12:46
"Кофигурации: 1С: Предприятие 7.7, 1С:Бюджет муниципального образования 7.7, 1С:Бухгалтерия 7.7, 1С:Зарплата и кадры 7.7, 1С:Комплексная 7.7, 1С:Торговля и склад 7.7, 1С:Производство+Услуги+Бухгалтерия
Внешний отчет, обработка для 1С: Бухгалтерский учет 7.7; 1С: Оперативный учет 7.7; 1С: Расчет 7.7; 1C: OpenConf 7.7"

Ну, Юрий, - за широту мысли... ПЛЮС ... ;)
... и за полезное чтиво - разумеется...
7. Степашка Никулин (Styvi) 04.02.10 12:52
(3)
Александр, Ваши труды тоже были замечены на форуме...
(аналогичные благодарности)...
Только плюсануть нечгде было...
;)
8. Юрий Тимофеев (Tatitutu) 04.02.10 12:56
(3) Сань не трогай реестр - горе это....будет , такая дыра - если ты оставишь офис хоть на минуту не прикрытым от других макросов и дашь доверенный доступ к VBA - это просто мечта вирусолога.

я тебе давал ссылку как обойти запрос на макросы.
что мешает:
при запуске обработки
создаем (пересохраняем) персонал.xls с нужными формулами
создаем лист EXCEL новый ,форматируем переводим, сохраняем
удаляем персонал.
Работы написать на полчаса. и ничего спрашивать не будет и пользователь и знать не будет.
9. Александр Венгер (venger) 04.02.10 12:57
(7) Чувствую придется писать статью о поддержке Unicode и иероглифов на форме 1С (вставке, редактировании, хранении и отображении в 1С), как тут;-) Это с помощью АктивИкса Internet Explorer на форме, с некоторыми хитростями, конечно;-) Как же без этого;-)
Прикрепленные файлы:
10. Александр Венгер (venger) 04.02.10 13:01
(8) > создаем (пересохраняем) персонал.xls с нужными формулами

Создать personal.xls и положить куда надо не проблема, но как в personal.xls записать программно макрос и потом его вызвать из 1С? Можно просто кусок кода простого, типа как в 3-м посте, т.е. чтобы MyTest запустился без вопросов прямо из 1С, без всяких дополнительных телодвижений пользователя или админа?
11. Александр Венгер (venger) 04.02.10 13:02
(8) +10, ну и сразу с созданием personal.xls, конечно, простенько, но чтобы смысл был понятен....
12. Александр Венгер (venger) 04.02.10 13:04
(8) +11, уж извини, если напрягаю;-)
13. Юрий Тимофеев (Tatitutu) 04.02.10 13:06
(10)ты не внимательный ))))



Запусти коня )))

внедряешь объект как в пятнашках, в нем уже заранее пишешь макрос
при запуске этот объект сохраняешь как personal.xls
потом создаешь новую книгу и вот в ней уже будут доступны все твои макросы и функции
сохраняешь книгу , убиваешь personal.xls
все. финиш.
14. Александр Венгер (venger) 04.02.10 13:29
(13) Во-первых, даже если файла PERSONAL.XLS нет, то все равно не хочет его сохранять:

//*******************************************
Функция Лист(Объект)
	Скрипт=СоздатьОбъект("WScript.Network");
	ИмяПапки="С:\Documents and Settings\"+Скрипт.UserName+"\Application Data\Microsoft\EXCEL\XLSTART\";
	ИмяФайла=ИмяПапки+"PERSONAL.XLS";
	Объект.SaveAs(ИмяФайла);
КонецФункции	// Лист
...Показать Скрыть



Доступ к файлу невозможен. Проверьте следующее:

• имеется ли указанная папка;
• папка, содержащая этот файл, доступна для записи;
• в имени файла не содержатся знак
15. Юрий Тимофеев (Tatitutu) 04.02.10 13:34
(14) какая версия офиса у тебя ?
сообщить(ИмяФайла) что возвращает ?
16. Александр Венгер (venger) 04.02.10 13:37
(13) И как теперь из personal.xls вызвать функцию в 1С (допустим она лежит в книге, не листе или модуле, а в книге personal.xls) при создании второй книги?
17. Юрий Тимофеев (Tatitutu) 04.02.10 13:41
(16) как обыкновенную формулы в ячейке
получаешь результат, копируешь и оставляешь как значение (текст)
что и требовалось доказать
P/s перед функцией если в книге напиши Public
18. Александр Венгер (venger) 04.02.10 13:49
(17) Удалить personal.xls старый не могу, если он уже есть, то до свидания, обратиться к функции из personal.xls из 1С нормально в создаваемой книге новой тоже не могу, не видит он pesonal.xls, даже если он лежит в нужном месте при создании новой книги программно.... И т.д. и т.п. Фиг знает что, в общем, кусочка кода или малюхонькой обработочки, я так понимаю не будет с конкретным примером... Ходим вокруг да около.... Ладно, поиграюсь сам...
19. Юрий Тимофеев (Tatitutu) 04.02.10 14:28
в общем, кусочка кода или малюхонькой обработочки, я так понимаю не будет с конкретным примером...

а чем тебя обработка приложенная к статье смущает ? Она же полностью рабочая (вместо одной строки запихай туда ТЗ и играйся как тебе нужно
20. Александр Венгер (venger) 04.02.10 15:37
(19) Да это я из вредности ворчу просто;-)
21. Андрей (Свой) 04.02.10 16:44
интересно, как выглядит иероглиф "внедрение ERP" ? :)
22. Юрий Тимофеев (Tatitutu) 04.02.10 16:50
(21) "И мальчик Хуан объяснил на пальцах , как его зовут" (с) :D :D :D
23. Сергей Солнышкин (Myti) 10.02.10 12:39
24. Виталий Евтушенко (tanbohu) 10.02.10 16:13
你们好
Смотрю я на это и удивляюсь!
а что просто установить в компе китайскую раскладку не вариант?
25. Юрий Тимофеев (Tatitutu) 10.02.10 17:06
(24) вариант для чего ?Поясни пожалуйста, будь так любезен
26. Виталий Евтушенко (tanbohu) 10.02.10 18:31
вариант для писания иероглифов в винде где бы то нибыло. хотя, конечно, в 1с с этом проблема.
27. Юрий Тимофеев (Tatitutu) 10.02.10 19:06
(26) Так это понятно. тут вопрос в другом ...
в екселе есть иероглифы читаются , печатаются....
но нужно их сохранить в 1С
а 1С такая сякая их не понимает (ну не хочет она китайский изучать)
разложили иероглифы на коды символов в юникоде и сохранили в строке с разделителями
отлично. Отлично , а как распечатать ?
Вот вариант печати здесь и предложен.
28. Александр Венгер (venger) 16.04.10 20:37
(27), (26) А вот и предистория с которой все началось ;)

Отображение и редактирование на формах, и хранение в базе, Unicode-строк в 1С 7.7

З.Ы. Только сейчас дошли руки оформить :oops:
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа