Кодирование строк в формат Base64 и обратно в 1С 8.Х

26.08.15

Разработка - Универсальные функции

Обработка на управляемых формах для 1С для преобразования строковых данных в формат Base64 и обратно

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

Наименование Файл Версия Размер
Base64Decode.epf
.epf 6,71Kb
74
.epf 6,71Kb 74 Скачать

Была уже публикация с примером кода для 1С //infostart.ru/public/252365/

Но, по-моему, это велосипед. Моя обработка в 10 строк кода выглядит элегантнее)) Cool

 

Вот пример кода:

&НаКлиенте
Процедура Decode(Команда)
	
	ДвДанные = Base64Значение(Encoded);
	Если ДвДанные = Неопределено Тогда
		Предупреждение("Ошибка формата Base64");
		Возврат;
	КонецЕсли;
	ВременныйФайл = ПолучитьИмяВременногоФайла();
	ДвДанные.Записать(ВременныйФайл);
	
	КодировкаФайла = Кодировка;
	
	Если Кодировка = "ANSI" Тогда
		КодировкаФайла = КодировкаТекста.ANSI;
		
	ИначеЕсли Кодировка = "OEM" Тогда
		КодировкаФайла = КодировкаТекста.OEM;
		
	ИначеЕсли Кодировка = "UTF8" Тогда
		КодировкаФайла = КодировкаТекста.UTF8;
		
	ИначеЕсли Кодировка = "UTF16" Тогда
		КодировкаФайла = КодировкаТекста.UTF16;
		
	ИначеЕсли Кодировка = "Системная" Тогда
		КодировкаФайла = КодировкаТекста.Системная;
	
	КонецЕсли;
	Чтение = Новый ЧтениеТекста(ВременныйФайл, КодировкаФайла);
	Decoded = Чтение.Прочитать();
	Чтение.Закрыть();
	УдалитьФайлы(ВременныйФайл);
	
КонецПроцедуры

&НаКлиенте
Процедура Encode(Команда)
	
	КодировкаФайла = Кодировка;
	
	Если Кодировка = "ANSI" Тогда
		КодировкаФайла = КодировкаТекста.ANSI;
		
	ИначеЕсли Кодировка = "OEM" Тогда
		КодировкаФайла = КодировкаТекста.OEM;
		
	ИначеЕсли Кодировка = "UTF8" Тогда
		КодировкаФайла = КодировкаТекста.UTF8;
		
	ИначеЕсли Кодировка = "UTF16" Тогда
		КодировкаФайла = КодировкаТекста.UTF16;
		
	ИначеЕсли Кодировка = "Системная" Тогда
		КодировкаФайла = КодировкаТекста.Системная;
	
	КонецЕсли;
	ВременныйФайл = ПолучитьИмяВременногоФайла();
	
	Запись = Новый ЗаписьТекста(ВременныйФайл, КодировкаФайла);
	Запись.Записать(Decoded);
	Запись.Закрыть();
	
	ДвДанные = Новый ДвоичныеДанные(ВременныйФайл);
	Encoded = Base64Строка(ДвДанные);
	
	УдалитьФайлы(ВременныйФайл);
	
КонецПроцедуры

base64 1С 8.x Двоичные данные

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    2673    0    John_d    8    

54

GUID в 1С 8.3 - как с ними быть

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    4613    atdonya    22    

45

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    3961    ke.92@mail.ru    16    

61

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8833    YA_418728146    6    

141

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2077    21    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16148    133    sapervodichka    112    

129

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7243    quazare    8    

109
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. alexandersh 263 09.05.17 16:08 Сейчас в теме
сорри... мой комментарий был к другой публикации, промазал)
2. Alexey_ 26 09.05.17 17:09 Сейчас в теме
Моя обработка в 10 строк кода выглядит элегантнее))

Особенно элегантно выглядит вот этот фрагмент:
Если Кодировка = "ANSI" Тогда
        КодировкаФайла = КодировкаТекста.ANSI;
        
    ИначеЕсли Кодировка = "OEM" Тогда
        КодировкаФайла = КодировкаТекста.OEM;
        
    ИначеЕсли Кодировка = "UTF8" Тогда
        КодировкаФайла = КодировкаТекста.UTF8;
        
    ИначеЕсли Кодировка = "UTF16" Тогда
        КодировкаФайла = КодировкаТекста.UTF16;
        
    ИначеЕсли Кодировка = "Системная" Тогда
        КодировкаФайла = КодировкаТекста.Системная;
    
    КонецЕсли;
Показать
user1991482; Izumov; Istur; Henistaromin; mrChOP93; FomkRo; vz1987; Donatello23; zfilin; H-Labs; SadrA; Euroset1; d.zhukov; yufan; +14 Ответить
3. kris_barbina 15 09.05.17 23:44 Сейчас в теме
(2), ну мир без костылей был бы идеален до безобразия))
можно использовать кодировку по умолчанию (опустить этот параметр), посмотри что будет.... я уже не помню зачем этот костыль был придуман
4. Alexey_ 26 10.05.17 08:29 Сейчас в теме
(3) я о том, что этот фрагмент можно заменить одной строкой
КодировкаФайла = КодировкаТекста[Кодировка];
user1150141; SirStefan; Jokemas; Xu4kok; Izumov; Pechatnik; depresnjak; Istur; sektor1667; Andrei_Ivanov; rustamdev1c; Henistaromin; FomkRo; vz1987; simy4; kaliuzhnyi; dachnik; nporrep; SadrA; Euroset1; v.l.; NN2P; user811769; opkc; DevSerg; kild; akR00b; BigB; dolart; yufan; +30 Ответить
5. trx2008 15.09.17 14:01 Сейчас в теме
Доброго дня!
у меня при попытке декодирования ничего не происходит ((((
6. ujinn 18.09.17 14:20 Сейчас в теме
Интересно, почему при попытке преобразовать в Base64 строку с латиницей -функция Base64Значение(Строка) возвращает неопределено?
и как это вылечить, кто-нибудь знает?
7. kuzyara 1902 20.09.17 14:20 Сейчас в теме
    Запись = Новый ЗаписьТекста(ВременныйФайл, "ISO-8859-1");
8. Cerberdm 41 12.12.17 17:46 Сейчас в теме
Вместо временного файла можно использовать: ДвДанные.ОткрытьПотокДляЧтения()
Istur; BigB; +2 Ответить
9. kadr 55 06.03.19 08:12 Сейчас в теме
Для 8.3 вполне подходит

СтрокаКодирования = "123456:123456";

ПотокВПамяти = Новый ПотокВПамяти();
ЗаписьДанных = Новый ЗаписьДанных(ПотокВПамяти);
ЗаписьДанных.ЗаписатьСтроку(СтрокаКодирования);
ДД = ПотокВпамяти.ЗакрытьИПолучитьДвоичныеДанные();

Строка = Base64Строка(ДД);

// ДЕКОДИРОВАНИЕ
ДД1 = Base64Значение(Строка);
ЧтениеДанных = Новый ЧтениеДанных(ДД1);
СтрокаРаскодированная = ЧтениеДанных.ПрочитатьСтроку();
ЧтениеДанных.Закрыть();
Показать
Merkalov; Istur; kild; eufes; Henistaromin; user787825; TimurD; kotlovD; Euroset1; L0z4; KAV2; privater; Gendelf; wowik; VKuser2084886; SShipilov; FesenkoA; +17 Ответить
11. Tatitutu 3855 06.09.19 19:43 Сейчас в теме
(9) С оригинальными кодами маркировки обуви - ваш метод не срабатывает.
Съедает спец.символы
При раскодирование будет неверный результат
user1135816; +1 Ответить
15. ЗС1 04.12.19 14:56 Сейчас в теме
16. Istur 1472 31.05.23 12:38 Сейчас в теме
(9) надо не запись данных, а запись текста, результаты разные

ПотокВПамяти 	= Новый ПотокВПамяти();
ЗаписьТекста = Новый ЗаписьТекста(ПотокВПамяти);
ЗаписьТекста.Записать(Текст);
ЗаписьТекста.Закрыть();
ДвДанные 		= ПотокВпамяти.ЗакрытьИПолучитьДвоичныеДанные();
	
Возврат Base64Строка(ДвДанные);
10. пользователь 15.07.19 10:47
Сообщение было скрыто модератором.
...
12. artmaks1988 22 12.09.19 12:31 Сейчас в теме
Можно проще:

 
//Кодируем

ИсходныяСтрока = "Что-то хочу закодировать";

ДвоичныеДанныеСтроки = ПолучитьДвоичныеДанныеИзСтроки(ИсходныяСтрока);

СтрокаBase64 = Base64Строка(ДвоичныеДанныеСтроки);
 
Показать


//Декодируем

ДвоичныеДанныеСтроки = Base64Значение(СтрокаBase64);

ИсходныяСтрока = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанныеСтроки);
user1991482; cdiamond; prosto_username; simgo83; fjay69; Istur; morin; user811769; kild; FReIM; fravol; andrey-prog; AfterEarth; eufes; user1710050; user635667; alexey.kutya; Stas84; Deletex; Unknown31; user1021675; Gendelf; TimurD; KovalOleg; simy4; IvanSch; fortran; Will79; spetstorg; Nuuq; stvorl; beardlyhich; kotlovD; rpashkovsky; yufan; kraynev-navi; kadr; Flashback1979SE; +38 Ответить
13. spp28 24 28.11.19 05:21 Сейчас в теме
Доброго времени суток. Никто не пробовал декодировать строку длиной 1500000 символов? Base64Значение возвращает обрезанные двоичные данные, которые содержат первые примерно 50 символов из 1500000.
17. Snouphruh 30.01.24 14:23 Сейчас в теме
уверен, подобный способ уже сильно неактуальный.

сегодня это делается в одну строчку:
Base64Строка (ПолучитьДвоичныеДанныеИзСтроки ("…"))
18. Snouphruh 30.01.24 14:24 Сейчас в теме
уверен, подобный способ уже сильно неактуальный.

сегодня это делается в одну строчку:
Base64Строка (ПолучитьДвоичныеДанныеИзСтроки (""))
19. Snouphruh 30.01.24 14:25 Сейчас в теме
сейсас уже проще так сделать:

Base64Строка (ПолучитьДвоичныеДанныеИзСтроки ("…"))
Оставьте свое сообщение