gifts2017

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

Опубликовал Александр Венгер (venger) в раздел Программирование - Практика программирования

Как известно 1С 7.7 вообще не поддерживает Unicode, а бывают случаи, когда надо или хочется. Один из характерных примеров – это наименования и коды импортных товаров (Китай, Япония), как они идут у поставщика, а это иероглифы на самом деле. Опять же, необходимость их вводить, хранить и редактировать в базе может возникнуть, если мы хотим формировать заказы поставщику из 1С сразу с теми наименованиями, что приняты у поставщика, на его родном языке, так сказать. Вот этот пример и призван показать один, из возможных, способов это сделать в 1С 7.7.

Естественно, что потом возникнет необходимость и выводить эти Unicode-строки на печать, при печати документа заказа поставщику с такими товарами, но этот вопрос также имеет массу возможных решений. Например, вывод документа сразу в файл, это может быть html, а может быть и Excel. Как это сделать в Excel, довольно подробно, описано тут: http://infostart.ru/public/65242/

Но вернемся к нашей теме… В zip-архиве Вы можете скачать демо-базу, в которой реализовано все о чем мы будем говорить. Код открыт, как говориться;-)

Результат, которого мы будем добиваться, примерно, таков (см. рис. 1):

Рис. 1

Т.е. фактически мы даем возможность пользователю работать с Unicode-строкой, как с обычным текстовым реквизитом справочника, просматривать, редактировать и хранить его в базе 1С.

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


Отображать Unicode-символы мы будем с помощью ActiveX’са на форме Internet Explorer. Поэтому он должен быть установлен в системе (Internet Explorer) и также нам понадобятся внешние компоненты 1С++ (http://www.1cpp.ru) и FormEx (http://www.dorex.ru), чтобы добавить и отобразить на форме этот ActiveX.

Сразу оговорюсь, мы будем выполнять JavaScript локально на машине, поэтому политики безопасности Internet Explorer должны быть настроены соответственно. А также в операционной системе должны быть необходимые шрифты для отображения Unicode-символов, иероглифов, например. Хотя, например, в Windows XP шрифтов этих хватает, на самом деле.

Итак, суть идеи, примерно, такова. В базе 1С Unicode-строки будем хранить как коды символов, разделенных точкой с запятой, в строковом поле неограниченной длины. На форме справочника будет AxtiveX-контрол IE, куда мы, при открытии формы справочника, подгружаем заготовленный html-код с JavaScript’овыми функциями (он записан в первой ячейке общей таблицы демо-конфигурации). Эти JavaScript’овые функции мы будет потом вызывать из 1С. Они и реализуют интерфейс между INPUT’ом html-кода (в котором и будут отображаться Unicode-строки) и строковым реквизитом справочника в базе 1С (с кодами Unicode-символов разделенных точкой с запятой). JavaScript’овые функции позволяют передать в них строку с кодами символов и отобразить эти символы в INPUT’е AxtiveX-контрола IE, преобразовав их из кодов в символы. И наоборот, преобразуют Unicode-строку из  INPUT’а AxtiveX-контрола IE в строку кодов символов разделенных точкой с запятой и возвращают ее в 1С. Таким образом, при открытии формы нам нужно прочитать соответствующий строковый реквизит справочника и вызвать соответствующие JavaScript’овые функции, передав им эту строку в качестве параметра. Они преобразуют коды в символы и отобразят их в AxtiveX-контроле в INPUT’е как Unicode-строку. А при записи элемента справочника, наоборот, вызвать соответствующие JavaScript’овые функции, которые вернут строку, с преобразованными в коды символами Unicode-строки, разделенными точкой с запятой, и записать эту строку в базу 1С в соответствующий реквизит. Это, если упрощенно, конечно.

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


В демо-конфигурации есть справочник «Товары». В форме элемента этого справочника вводим или редактируем реквизиты, в том числе и Unicode-строки (поля «поддерживающие» Unicode – беленькие). А в форме списка только просмотр полей текущего элемента (поля «поддерживающие» Unicode – серенькие). См. рис. 2.

 

Рис. 2

Единственно, чтобы вставить из буфера или скопировать в буфер обмена, что либо из/в эти поля («поддерживающие» Unicode), нужно выделить мышкой текст в этом поле и нажав правую кнопку мышки выбрать соответствующий пункт контекстного меню, т.е. «Вставить» или «Копировать». См. рис. 3.

 

Рис. 3

Больше особых неудобств замечено не было при работе со стороны пользователя...

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

Наименование Файл Версия Размер Кол. Скачив.
SupportUnicode.zip
.zip 120,90Kb
16.04.10
52
.zip 120,90Kb 52 Скачать

См. также

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

Комментарии

1. Александр Венгер (venger) 16.04.10 22:18
(0) Как бы из реальной жизни пример;-)
2. Епрст (Ёпрст) 19.04.10 10:25
Как-бы всё выгялит не очень, неудачный активикс выбрал..

3. Александр Венгер (venger) 19.04.10 10:54
(2) Зато у подавляющего большинства он уже есть в системе, да и под это дело лучше "заточенные" АктивИксы писать, так как кроме поля, еще бы и в таблицах, списках отражать.
4. CheHu 19.07.11 10:26
Саша, что-то у меня не получается ввести буквы с диакритикой :(
Причем, букву "ё" - ввожу, а вот такое: "ââ ăă şş öö" - не удается...
Имею в качестве результата следующее: "^^a^^a ??a??a ¸¸s¸¸s ¨¨o¨¨o".

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

Вот только где дальше копать я не очень соображу...
Может поделишься мыслями?
Или кто из форумчан с таким сталкивался?..

Да еще:
Если я в 1С Предприятии создаю текстовый файл и набираю в нем, то получаю аналогичное: "^^a^^a ??a??a ¸¸s¸¸s ¨¨o¨¨o".
А рядышком в Блокноте (или в любом другом текстовом редакторе с поддержкой юникода) получаю нормальное: "ââ ăă şş öö".
Во как.

И еще немного:
С помощью "скопировать/вставить" я могу внести данные символы с поле и они в дальнейшем корректно отображаются.
То есть проблема только с непосредственным вводом символов с клавиатуры.
Вот пока такие наблюдения...
5. Orxan Abdullayev (abdullayev707) 19.09.11 09:40
Спасибо огромное! Нужная вещь)
6. Слава Тарасенко (dizraelli) 24.10.11 16:36
А как внутренними командами 1С 7.7 вставлять символ в кодировке ANSI или Unicode; и есть ли вообще такой механизм в 1С (запуск Exel, фреймворков и прочего нежелателен)?
7. selesta (selesta) 29.03.12 23:55
а для печатных форм будет работать?
необходимо было сделать бланк на чешском языке, пока пришлось сделать шаблон в екселе и заполнять его по оле
8. makus (makus) 16.12.15 11:03
Спасибо большое!

Поздно пишу, конечно, тем не менее, не подскажете, есть способ получить в 7.7 код символа unicode? Функция КодСимв() подойдёт для этого?
Нужно для работы с штрихкодом PDF417.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа