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

26.08.15

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Base64Decode.epf
.epf 6,71Kb
85
85 Скачать (1 SM) Купить за 1 850 руб.

Была уже публикация с примером кода для 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С v8.3 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    24997    dimanich70    82    

149

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

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

1 стартмани

18.03.2024    4491    3    John_d    11    

57

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

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

12.02.2024    25257    atdonya    25    

58

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

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

30.11.2023    6048    ke.92@mail.ru    17    

65

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

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

28.08.2023    16497    YA_418728146    8    

170

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

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

2 стартмани

22.08.2023    4232    72    progmaster    9    

4

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 1C:Бухгалтерия 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    19115    180    sapervodichka    112    

136
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. alexandersh 266 09.05.17 16:08 Сейчас в теме
сорри... мой комментарий был к другой публикации, промазал)
2. Alexey_ 27 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 44 09.05.17 23:44 Сейчас в теме
(2), ну мир без костылей был бы идеален до безобразия))
можно использовать кодировку по умолчанию (опустить этот параметр), посмотри что будет.... я уже не помню зачем этот костыль был придуман
4. Alexey_ 27 10.05.17 08:29 Сейчас в теме
(3) я о том, что этот фрагмент можно заменить одной строкой
КодировкаФайла = КодировкаТекста[Кодировка];
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; +32 Ответить
5. trx2008 15.09.17 14:01 Сейчас в теме
Доброго дня!
у меня при попытке декодирования ничего не происходит ((((
6. ujinn 18.09.17 14:20 Сейчас в теме
Интересно, почему при попытке преобразовать в Base64 строку с латиницей -функция Base64Значение(Строка) возвращает неопределено?
и как это вылечить, кто-нибудь знает?
7. kuzyara 2108 20.09.17 14:20 Сейчас в теме
    Запись = Новый ЗаписьТекста(ВременныйФайл, "ISO-8859-1");
8. Cerberdm 42 12.12.17 17:46 Сейчас в теме
Вместо временного файла можно использовать: ДвДанные.ОткрытьПотокДляЧтения()
Istur; BigB; +2 Ответить
9. kadr 55 06.03.19 08:12 Сейчас в теме
Для 8.3 вполне подходит

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

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

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

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

ПотокВПамяти 	= Новый ПотокВПамяти();
ЗаписьТекста = Новый ЗаписьТекста(ПотокВПамяти);
ЗаписьТекста.Записать(Текст);
ЗаписьТекста.Закрыть();
ДвДанные 		= ПотокВпамяти.ЗакрытьИПолучитьДвоичныеДанные();
	
Возврат Base64Строка(ДвДанные);
20. Xershi 1561 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);

ИсходныяСтрока = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанныеСтроки);
SagittariusA; user1671936; 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; +45 Ответить
13. spp28 24 28.11.19 05:21 Сейчас в теме
Доброго времени суток. Никто не пробовал декодировать строку длиной 1500000 символов? Base64Значение возвращает обрезанные двоичные данные, которые содержат первые примерно 50 символов из 1500000.
17. Snouphruh 30.01.24 14:23 Сейчас в теме
уверен, подобный способ уже сильно неактуальный.

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