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

26.08.15

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

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Base64Decode.epf
.epf 6,71Kb
97 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Была уже публикация с примером кода для 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 Бесплатно (free)

Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.

14.05.2025    5496    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    46600    dimanich70    83    

165

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

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

1 стартмани

18.03.2024    6890    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

12.02.2024    57790    atdonya    31    

68

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

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

30.11.2023    8661    ke.92@mail.ru    17    

68

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

28.08.2023    22868    YA_418728146    8    

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

Особенно элегантно выглядит вот этот фрагмент:
Если Кодировка = "ANSI" Тогда
        КодировкаФайла = КодировкаТекста.ANSI;
        
    ИначеЕсли Кодировка = "OEM" Тогда
        КодировкаФайла = КодировкаТекста.OEM;
        
    ИначеЕсли Кодировка = "UTF8" Тогда
        КодировкаФайла = КодировкаТекста.UTF8;
        
    ИначеЕсли Кодировка = "UTF16" Тогда
        КодировкаФайла = КодировкаТекста.UTF16;
        
    ИначеЕсли Кодировка = "Системная" Тогда
        КодировкаФайла = КодировкаТекста.Системная;
    
    КонецЕсли;
Показать
Antonov.AV; user1991482; Izumov; Istur; Henistaromin; mrChOP93; FomkRo; vz1987; Donatello23; zfilin; H-Labs; SadrA; Euroset1; d.zhukov; yufan; +15 Ответить
3. kris_barbina 45 09.05.17 23:44 Сейчас в теме
(2), ну мир без костылей был бы идеален до безобразия))
можно использовать кодировку по умолчанию (опустить этот параметр), посмотри что будет.... я уже не помню зачем этот костыль был придуман
4. Alexey_ 27 10.05.17 08:29 Сейчас в теме
(3) я о том, что этот фрагмент можно заменить одной строкой
КодировкаФайла = КодировкаТекста[Кодировка];
rnmksmv; KoC_one; aairt; 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; +33 Ответить
5. trx2008 15.09.17 14:01 Сейчас в теме
Доброго дня!
у меня при попытке декодирования ничего не происходит ((((
6. ujinn 18.09.17 14:20 Сейчас в теме
Интересно, почему при попытке преобразовать в Base64 строку с латиницей -функция Base64Значение(Строка) возвращает неопределено?
и как это вылечить, кто-нибудь знает?
7. kuzyara 2211 20.09.17 14:20 Сейчас в теме
    Запись = Новый ЗаписьТекста(ВременныйФайл, "ISO-8859-1");
8. Cerberdm 42 12.12.17 17:46 Сейчас в теме
Вместо временного файла можно использовать: ДвДанные.ОткрытьПотокДляЧтения()
Istur; BigB; +2 Ответить
9. kadr 56 06.03.19 08:12 Сейчас в теме
Для 8.3 вполне подходит

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

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

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

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

ПотокВПамяти 	= Новый ПотокВПамяти();
ЗаписьТекста = Новый ЗаписьТекста(ПотокВПамяти);
ЗаписьТекста.Записать(Текст);
ЗаписьТекста.Закрыть();
ДвДанные 		= ПотокВпамяти.ЗакрытьИПолучитьДвоичныеДанные();
	
Возврат Base64Строка(ДвДанные);
20. Xershi 1531 30.04.24 13:54 Сейчас в теме
(9) еще хочу добавить, что данный метод не верно возвращал данные.
1С:Предприятие 8.3 (8.3.23.2040)
Возможно параметрами нужно управлять по умолчанию.
А вот (12) решило проблему!
10. пользователь 15.07.19 10:47
Сообщение было скрыто модератором.
...
12. artmaks1988 22 12.09.19 12:31 Сейчас в теме
Можно проще:

 
//Кодируем

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

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

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


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

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

ИсходныяСтрока = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанныеСтроки);
GlukAl; VCPro; mrFduch; Legavaz; user1999272; bulldog; Stepashkin; axsebur; VyacheslavShilov; Avatarzorro; Stan; user591389_aska_rabota; SagittariusA; Al3x; mlv84; user635629_exter; stoptime; Xershi; aairt; user1991482; cdiamond; prosto_username; simgo83; fjay69; Istur; A1WEB; 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; +57 Ответить
21. Avatarzorro 64 30.05.25 07:20 Сейчас в теме
13. spp28 24 28.11.19 05:21 Сейчас в теме
Доброго времени суток. Никто не пробовал декодировать строку длиной 1500000 символов? Base64Значение возвращает обрезанные двоичные данные, которые содержат первые примерно 50 символов из 1500000.
17. Snouphruh 30.01.24 14:23 Сейчас в теме
уверен, подобный способ уже сильно неактуальный.

сегодня это делается в одну строчку:
Base64Строка (ПолучитьДвоичныеДанныеИзСтроки ("…"))
user1999272; KoC_one; user706076_stravin; +3 Ответить
18. пользователь 30.01.24 14:24
Сообщение было скрыто модератором.
...
19. пользователь 30.01.24 14:25
Сообщение было скрыто модератором.
...
Для отправки сообщения требуется регистрация/авторизация