ПЕЧАТЬ ИЕРОГЛИФОВ из 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) 3557 04.02.10 12:17 Сейчас в теме
ну шо китай, япония - бойтесь...1С идет к вам ))))
2. Трактор Трактор (Трактор) 1106 04.02.10 12:34 Сейчас в теме
Сурово! Боюсь что таким способом делать печатные формы весьма затруднительно :|
Китай может остаться не завоёванным.
Кстати, товарищ недавно размышлял на тему написания международной конфигурации для разных вьетнамов и африк. Говорит рынок пустоват и САП с Ораклом не счастье в жизни, а нечто менее удобное чем 1С.
3. Александр Венгер (venger) 2029 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) 467 04.02.10 12:41 Сейчас в теме
на Китае настоящий БГ обломился, а уж 1С...
ну не было в Китае Луки Пачолли. не нужен он им
5. Юрий Тимофеев (Tatitutu) 3557 04.02.10 12:43 Сейчас в теме
Сурово! Боюсь что таким способом делать печатные формы весьма затруднительно


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

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

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



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

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

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



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

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

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

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

З.Ы. Только сейчас дошли руки оформить :oops: