Внешняя компонента для преобразования файлов из/в кодировку Base64 в 1С 7.7

19.06.23

Разработка - Разработка внешних компонент

Эта внешняя компонента Base64.dll предназначена для платформы 1С версии 7.7. Используется для преобразования файлов из/в кодировку Base64 из встроенного языка 1С Предприятие. Компонента тестировалась на базе конфигурации Бухгалтерский учет для Казахстана, редакции 7.70.257.

Файлы

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

Наименование Скачано Купить файл
Внешняя компонента для преобразования файлов из/в кодировку Base64 в 1С 7.7:
.dll 307,50Kb ver:1.1.0
14 4 550 руб. Купить

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

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

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

Для работы с компонентой положите файл Base64.dll, например в каталог базы данных. В конфигураторе используйте функцию ЗагрузитьВнешнююКомпоненту:

Процедура ПриОткрытии()
	Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "Base64.dll")=0 Тогда
		Сообщить("Не удается загрузить Base64.dll!");
		Возврат;
	Иначе
		Сообщить("Удалось загрузить Base64.dll!");	
	КонецЕсли;
КонецПроцедуры	// ПриОткрытии

// Преобразует файл в Base64 строку
Функция Base64(ПутьКФайлу)
	Попытка
		ВК = СоздатьОбъект("AddIn.Base64");
	Исключение
		Сообщить("Не удается создать объект AddIn.Base64!");
		а=1/0;
	КонецПопытки;
	СтрокаИзФайла = ВК.ЗакодироватьBase64(ПутьКФайлу);
	Возврат СтрокаИзФайла;
КонецФункции	// Base64

С помощью этой компоненты можно кодировать данные файла в строку Base64. После чего сформировать POST-запрос с разделом filename, который указывает на раздел передачи файла и отправить эти данные на сервер. Если вам приходится работать с версией 7.7, то возможно вам пригодится отчёт по остаткам товаров со сравнением цен и выборкой по количеству.

 

Вступайте в нашу телеграмм-группу Инфостарт

7.7 внешняя компонента кодировка Base64 dll преобразование файлов EncodeBase64 ЗакодироватьBase64 DecodeBase64 РаскодироватьBase64

См. также

Разработка внешних компонент WEB-интеграция Программист 1С v7.7 1C77 Платные (руб)

Компонента HttpSrv7 позволяет создавать веб-сервисы в среде 1С 7.7 и, используя файлы HTML, несложные веб-сайты. С помощью нее можно обеспечить доступ к данным 1С 7.7 из браузера. Дополнительно используя компоненту HTTP_Async можно наладить обмен данными между удаленными информационными базами по протоколам HTTP, HTTPS и WebSocket. С помощью компоненты HttpSrv7 используя протокол WebSocket можно создавать и поддерживать работу нескольких чатов. С помощью компоненты HTTP_Async можно асинхронно отправлять HTTP-запросы к сайтам, веб-сервисам (в т.ч. к HTTPSrv7) и обрабатывать ответы по мере их поступления. Компонента GISMT в дополнение к HTTP_Async имеет функцию цифровой подписи в формате Base64 и, таким образом, имеет все возможности для работы с API ГИС МТ "Честный знак" непосредственно из среды 1С 7.7.

6000 руб.

27.05.2022    10938    1    20    

38

Разработка внешних компонент Программист 1С v7.7 Платные (руб)

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

5000 руб.

02.12.2021    7038    3    19    

5

Разработка внешних компонент Системный администратор Программист 1С v7.7 1С v8.3 1C v8.2 1С v8.1 Россия Платные (руб)

Аддон "Структура Обмена" (ExchangeStruc) - это компонента, которая обеспечивает доступ к разделяемым процессом структурам, аналогичным структурам 1С. Обеспечивает прозрачную передачу данных примитивных типов, в том числе Двоичных данных, в режиме Реального времени между разными контекстами (формами) или потоками одного процесса. В перспективе функционал будет расширен для обмена между процессами, даже разных версий платформ. Совместим с версиями Windows рабочих станций и серверов, с платформами 1С разных версий и релизов в режиме Native начиная с 8.2, и в режиме COM начиная с версий 7.7. По скорости чтения и записи лишь немногим уступает стандартной структуре 1С. НОВОЕ: Добавлен функционал регистрации компоненты COM в качестве OLE Auto (COMОбъект) для поддержки её работы в серверах старых версий 1С: 8.0 и 8.1, где работа с компонентами исключена. Теперь можно коммуникацию с Фоновыми заданиями на этих версиях проводить.

7200 руб.

19.04.2023    6142    1    0    

3

Файловый обмен (TXT, XML, DBF), FTP Учет документов Распознавание документов и образов Бухгалтер Пользователь 1С v7.7 1С v8.3 1C v8.2 1C:Бухгалтерия 1C77 1С:Бухгалтерия 2.0 1С:Бухгалтерия 3.0 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 1.х 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 10 1С:Управление торговлей 11 Россия Платные (руб)

Программный комплекс способный распознавать сотни листов за раз любых сканированных(фото) документов (УПД, ТОРГ12, СФ, паспорт и пр.) и загружать их в любую 1С (БП3.0, УТ, КА, УНФ, УПП, 1С7.7 ТиС, ЗУП3 и пр.), а также формировать архив сканированных документов.<br> Робот применяет до 5 способов распознавания. Максимальное качество загрузки документов из бесплатных OCR. Работает без Интернета.

10800 руб.

13.10.2022    9927    1    12    

9

Файловый обмен (TXT, XML, DBF), FTP Перенос данных 1C Программист 1С v8.3 Оперативный учет 7.7 1С:Торговля и склад 7.7 1С:Бухгалтерия 3.0 Бухгалтерский учет Управленческий учет Абонемент ($m)

Обработка и правила обмена данными для выгрузки документов и всех связанных с ними справочников из 1С7.7 ТиС 9.2 в 1С8.3 БП 3.0 через файл XML. В типовых конфигурациях уже есть такое решение. Это немного доработанные правила и сама обработка выгрузки, добавлена возможность устанавливать отбор по выгружаемым документам по Фирме, Контрагенту, Складу, Проекту, Автору, ЮрЛицу. А также это внешняя обработка, что даёт возможность адаптировать её под нетиповую ТиС. Обработка и правила тестировались на платформах: 1С: Предприятие 7.7 и 1С: Предприятие 8.3.18.1334. На типовых конфигурациях: «Торговля + склад», редакция 9.2 (7.70 1004) и «Бухгалтерия предприятия» редакция 3.0 (3.0.96.30).

1 стартмани

13.08.2021    10954    79    Kuzya_brаtsk    8    

11

Файловый обмен (TXT, XML, DBF), FTP ЭДО и ОФД Программист Бухгалтерский учет 7.7 1С:Бухгалтерия 7.7 1С:Торговля и склад 7.7 1С:Упрощенное налогообложение 7.7 Россия Бухгалтерский учет Абонемент ($m)

Обмениваемся УПД (УКД) с различными контрагентами через 1С-Клиент ЭДО. А чтобы выгрузить УПД (УКД) из 7.7 в конфигурацию 1С-Клиент ЭДО , используем данную обработку, которая создает файл в формате XML, который можно импортировать в систему электронного документооборота. Для конфигурации "Бухгалтерский учет" (тестировалась на релизе 7.70.663) Для конфигурации "Упрощенная система налогообложения" ( тестировалась на релизе 7.70.305) Для конфигурации "Торговля и Склад 7.7" (тестировалась на релизе 7.70.1007)

2 стартмани

31.07.2021    22631    431    AndKovalchuk    151    

22

Логистика, склад и ТМЦ Ценообразование, анализ цен Пользователь 1С v7.7 1C77 Казахстан Управленческий учет Абонемент ($m)

Этот отчёт по остаткам ТМЦ поможет сравнить цены и сделать выборку по количеству товара. Тестировался на конфигурации Торговля+Склад для Казахстана, редакция 1.0, версия 7.70.014.

3 стартмани

14.04.2021    5304    2    softmaker    0    

0

Разработка внешних компонент Защита ПО и шифрование Программист 1С v7.7 Абонемент ($m)

Цифровые подписи, шифрование, просмотр сертификатов ключей ЭЦП, работа с различными криптопровайдерами (в т.ч. КриптоПРО ГОСТ 2012) в 1С 7.7.

1 стартмани

08.06.2020    10485    31    mdbruyfn    10    

9
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. user711367_denis 07.04.21 12:52 Сейчас в теме
Можно без компонент делать стандартными средствами винды:

Функция КодироватьФайл(ФайлИлиСтрокаИсточник, Кодировка="base64",ВозвращатьКакФайл=0) Экспорт
	ЦДО=СоздатьОбъект("CDO.Message");
	Файл=ФайлИлиСтрокаИсточник;
	Попытка
		Если ФС.СуществуетФайл(Файл)=1 Тогда
			Состояние("Кодирование данных..");
			Вложение=ЦДО.AddAttachment(Файл);
			Вложение.ContentTransferEncoding=Кодировка;
			Стрим=Вложение.GetEncodedContentStream();
		Иначе
			БодиПарт=ЦДО.BodyPart;
			Поля=БодиПарт.Fields;
			Поле=Поля.Item("urn:schemas:mailheader:content-type");
			Поле.Value="text/plain; charset=""windows-1251""";
			Поля.Update();
			Стрим = БодиПарт.GetDecodedContentStream();
			Стрим.charset = "windows-1251";
			Стрим.WriteText(Файл);
			Стрим.Flush();
			БодиПарт.ContentTransferEncoding = Кодировка;
			Стрим=БодиПарт.GetEncodedContentStream();
		КонецЕсли;
		
		Если ВозвращатьКакФайл=0 Тогда
			Возврат Стрим.ReadText();
		Иначе
			Стрим.SaveToFile(ВозвращатьКакФайл);
			Возврат ВозвращатьКакФайл;
		КонецЕсли;
	Исключение
		Сообщить("Ошибка кодирования в Base64: " + ОписаниеОшибки());
		Возврат 0
	КонецПопытки;	
КонецФункции
Показать
2. softmaker 41 07.04.21 15:19 Сейчас в теме
(1) Здорово, что есть такой вариант!
3. alex_1cUA 01.10.21 18:49 Сейчас в теме
(1)
CDO.Message


Только этот вариант позволяет кодировать. Но раскодировать уже готовую строку Base64 он не позволяет.
4. selesta 19 23.11.21 14:19 Сейчас в теме
Процедура ДекодироватьВФайл(Стр, Кодировка, Файл) Экспорт
	Перем __ЦДО2;
	__ЦДО2=СоздатьОбъект("CDO.Message");
    БодиПарт=__ЦДО2.BodyPart;
    Поля=БодиПарт.Fields;
    Поле=Поля.Item("urn:schemas:mailheader:content-type");
    Поле.Value="text/plain; charset=""windows-1251""";
    Поля.Update();
    БодиПарт.ContentTransferEncoding = Кодировка;
    Стрим=БодиПарт.GetEncodedContentStream();
	Стрим.WriteText(Стр);
    Стрим.Flush();
    Стрим=БодиПарт.GetDecodedContentStream();
	Стрим.SaveToFile(Файл,2);
КонецПроцедуры
Показать
5. selesta 19 23.11.21 14:21 Сейчас в теме
Функция КодироватьBase64(Текст) 

    Перем Алфавит;
    Перем Группа, Символ;
    Перем Значение, Разряд;
    Перем Символ6, Значение6;
    Перем Значение8, Символ8;
    Перем Текст64;

    Алфавит = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456­789+/=";
    Текст64 = ""; 
    Группа = "";
    Для Номер=1 По СтрДлина(Текст) Цикл
	    Символ = Сред(Текст, Номер, 1);
	    Группа = Группа + Символ;
	    Если ((СтрДлина(Группа) = 3) или (Номер = СтрДлина(Текст))) Тогда
            Значение = 0;
            Разряд = 2;
            Пока Разряд >= 0 Цикл
                Символ8 = Сред(Группа, 3 - Разряд, 1);
                Значение8 = КодСимв(Символ8);
                Если Разряд = 1 Тогда
                    Значение8 = Значение8 * 256;
                ИначеЕсли Разряд = 2 Тогда
                    Значение8 = Значение8 * 256 * 256;
                КонецЕсли;
                Значение = Значение + Значение8;
                Разряд = Разряд - 1;
            КонецЦикла;
            Разряд = 3;
            Пока Разряд >= 0 Цикл
                Значение6 = Значение;
                Если Разряд = 3 Тогда
                    Значение6 = Цел(Значение6 / 64 / 64 / 64);
                    Значение = Значение - Значение6 * 64 * 64 * 64;
                ИначеЕсли Разряд = 2 Тогда
                    Значение6 = Цел(Значение6 / 64 / 64);
                    Значение = Значение - Значение6 * 64 * 64;
                ИначеЕсли Разряд = 1 Тогда
                    Значение6 = Цел(Значение6 / 64);
                    Значение = Значение - Значение6 * 64;
                КонецЕсли;      
                Если СтрДлина(Группа) < 3 Тогда
                    Если (Значение6 = 0) и (СтрДлина(Текст) * 4 / 3 <= СтрДлина(Текст64)) Тогда
                        Значение6 = 64;
                    КонецЕсли;
                КонецЕсли;
                Символ6 = Сред(Алфавит, Значение6+1,1);
                Текст64 = Текст64 + Символ6;
                Разряд = Разряд - 1;
            КонецЦикла;    
        Группа = "";    
        КонецЕсли;
    КонецЦикла;   
    Возврат Текст64;
КонецФункции
Показать
7. GoodZone 13 22.02.22 09:05 Сейчас в теме
(5) с текстом хорошо, а как файл закодировать? картинку к примеру.
10. rbsoft 270 05.11.23 10:50 Сейчас в теме
(5) неверно кодирует иногда.
Например:
0104607029703941215kgFSP93OM/P

Кодирует:
MDEwNDYwNzAyOTcwMzk0MTIxNWtnRlNQHTkzT00vU===

Должно быть:
MDEwNDYwNzAyOTcwMzk0MTIxNWtnRlNQHTkzT00vUA==
11. rbsoft 270 05.11.23 13:38 Сейчас в теме
(5) Исправленная функция:
//*******************************************
Функция ToBase64(Текст) Экспорт
    Перем Алфавит;
    Перем Группа, Символ;
    Перем Значение, Разряд;
    Перем Символ6, Значение6;
    Перем Значение8, Символ8;
    Перем Текст64;
	
    // Подготовка алфавита и результата
    Алфавит = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456­789+/=";
    Текст64 = ""; 
	Группа = "";
	ДлинаТекста = СтрДлина(Текст);
    Для Номер=1 По ДлинаТекста Цикл
    
	    Символ = Сред(Текст, Номер, 1);
	    Группа = Группа + Символ;
		
		ДлинаГруппы = СтрДлина(Группа);
		
    	Если ((ДлинаГруппы = 3) или (Номер = ДлинаТекста)) Тогда
        
	        // Получение числового значения из 3-х символов
	    	Значение = 0;
            Разряд = 2;
            Пока Разряд >= 0 Цикл
                Символ8 = Сред(Группа, 3 - Разряд, 1);
                Значение8 = КодСимв(Символ8);
                Если Разряд = 1 Тогда
                    Значение8 = Значение8 * 256;
                ИначеЕсли Разряд = 2 Тогда
                    Значение8 = Значение8 * 256 * 256;
                КонецЕсли;
                Значение = Значение + Значение8;
                Разряд = Разряд - 1;
			КонецЦикла;        
			
			
			// Получение 4-х символов из числового значения    
			Разряд = 3;
			Пока Разряд >= 0 Цикл
				Значение6 = Значение;
				Если Разряд = 3 Тогда
					Значение6 = Цел(Значение6 / 64 / 64 / 64);
					Значение = Значение - Значение6 * 64 * 64 * 64;
				ИначеЕсли Разряд = 2 Тогда
					Значение6 = Цел(Значение6 / 64 / 64);
					Значение = Значение - Значение6 * 64 * 64;
				ИначеЕсли Разряд = 1 Тогда
					Значение6 = Цел(Значение6 / 64);
					Значение = Значение - Значение6 * 64;
				КонецЕсли;      
				
				Если ДлинаГруппы = 2 Тогда
                    Если Значение6 = 0 Тогда
						Если Разряд=0 Тогда
							//Последний символ-заполнитель "ноль" заменяем на =
							Значение6 = 64;
						КонецЕсли;
					КонецЕсли;
				ИначеЕсли ДлинаГруппы = 1 Тогда
                    Если Значение6 = 0 Тогда
						Если Разряд<2 Тогда
							//Два последних символа-заполнителя нули заменяем на ==
							Значение6 = 64;
						КонецЕсли;
					КонецЕсли;
	
				КонецЕсли;
				
				Символ6 = Сред(Алфавит, Значение6+1,1);
				Текст64 = Текст64 + Символ6;
				Разряд = Разряд - 1;
			КонецЦикла;    
                        
        	Группа = "";    
        КонецЕсли;
    КонецЦикла;   
    
    Возврат Текст64;
    
КонецФункции // КодироватьBase64()
Показать
6. GoodZone 13 22.02.22 09:04 Сейчас в теме
Приветствую! На файлах больше 500 кБ падает. А по CDO.Message не правильно кодирует ))
8. CheBurator 3232 13.09.22 07:47 Сейчас в теме
Могу ошибаться, но максимальный размер текстовой строки в 7.7 - 32Кб...
Поэтому аккуратно, проверить надо...
9. sassashok 08.08.23 12:59 Сейчас в теме
Я тоже себе такую компоненту написал ... по шаблону VB.NET ... для обработки DataMatrix кодов и последующего вложения в тело электронной накладной.. кодировать может и SQL сервер - но не для всех ситуаций приемлемо... да и одной строкой SQL может выдать не более 4000 символов (остальное отрежет)
12. Exebyte 14.03.24 21:59 Сейчас в теме
Давненько писал для базовой авторизации на каком-то REST-API сервисе. Декодирование нацарапал сейчас, для комплекта. Может кому пригодится.
//*******************************************
Функция ЗакодироватьВБаза64(Стр)
	
	Б64Стр = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456­789+/";
	База64 = ""; ТекБайт = 1; Ост = 0;
	Для х =1 По СтрДлина(Стр) Цикл
		Байт = КодСимв(Сред(Стр, х, 1));
		Если ТекБайт = 1 Тогда
			База64 = База64 + Сред(Б64Стр, Цел(Байт/4) + 1, 1);
			Ост = Байт%4;
		ИначеЕсли ТекБайт = 2 Тогда
			База64 = База64 + Сред(Б64Стр, Ост * 16 + Цел(Байт/16) + 1, 1);
			Ост = Байт%16;
		Иначе
			База64 = База64 + Сред(Б64Стр, Ост * 4 + Цел(Байт/64) + 1, 1) + Сред(Б64Стр, Байт%64 + 1, 1);
			Ост = 0;
		КонецЕсли;
		ТекБайт = ТекБайт + ?(ТекБайт = 3, -2, 1);
	КонецЦикла;
	Если ТекБайт = 2 Тогда
		База64 = База64 + Сред(Б64Стр, Ост * 16 + 1, 1) + "==";
	ИначеЕсли ТекБайт = 3 Тогда
		База64 = База64 + Сред(Б64Стр, Ост * 4 + 1, 1) + "=";
	КонецЕсли;
	Возврат База64;
	
КонецФункции
//*******************************************
Функция ДекодироватьИзБаза64(Стр)
	
	Б64Стр = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456­789+/";
	База64 = ""; ТекБайт = 1;
	Для х = 1 По СтрДлина(Стр) Цикл
		Поз = Найти(Б64Стр,Сред(Стр, х, 1));
		Если Поз = 0 Тогда
			Прервать;
		КонецЕсли;
		Байт = Поз - 1;
		Если ТекБайт = 1 Тогда
			Рез = Байт * 4;
		ИначеЕсли ТекБайт = 2 Тогда
			База64 = База64 + Симв(Рез + Цел(Байт/16));
			Рез = Байт%16;
		ИначеЕсли ТекБайт = 3 Тогда
			База64 = База64 + Симв(Рез*16 + Цел(Байт/4));
			Рез = Байт%4;
		ИначеЕсли ТекБайт = 4 Тогда
			База64 = База64 + Симв(Рез*64 + Байт);
		КонецЕсли;
		ТекБайт = ТекБайт + ?(ТекБайт = 4, -3, 1);
	КонецЦикла;
	Возврат База64;
	
КонецФункции
//*******************************************
Показать
request4t; +1 Ответить
13. request4t 05.11.24 23:48 Сейчас в теме
(12)
СПАСИБО, пригодилось! И тоже для базовой авторизации) Предыдущая функция (1) кодировала, но при вставке результата кодирования в заголовок возникала ошибка "Parameter is incorrect".
Для отправки сообщения требуется регистрация/авторизация