Внешняя компонента для преобразования файлов из/в кодировку 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
14 Скачать (10 SM) Купить за 4 550 руб.

Для работы с компонентой положите файл 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

См. также

Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v7.7 Конфигурации 1cv7 Россия Платные (руб)

Класс 1С++ для подключения ФИАС (Федеральная информационная адресная система) к любой конфигурации 1С 7.7. Опционально доступно геокодирование адресов и хранение географических координат адресных элементов ФИАС в отдельной БД. В конфигурации, где для ведения адресов используется типовой интерфейс по работе с КЛАДР, встраивается за пару минут.

6000 руб.

15.11.2017    27554    31    71    

29

Разработка внешних компонент Системный администратор Программист Платформа 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    5256    1    0    

3

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

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

10800 руб.

13.10.2022    8446    1    12    

9

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

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

2000 руб.

27.05.2022    8844    23    17    

34

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

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

1200 руб.

02.12.2021    6233    2    19    

4

Файловый обмен (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    9281    56    Kuzya_brаtsk    8    

11

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

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

1 стартмани

31.07.2021    16731    259    AndKovalchuk    56    

18

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

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

3 стартмани

14.04.2021    4729    2    softmaker    0    

0
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 18 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 18 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 231 05.11.23 10:50 Сейчас в теме
(5) неверно кодирует иногда.
Например:
0104607029703941215kgFSP93OM/P

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

Должно быть:
MDEwNDYwNzAyOTcwMzk0MTIxNWtnRlNQHTkzT00vUA==
11. rbsoft 231 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 2712 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".
Оставьте свое сообщение