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

19.06.23

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

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

Скачать исходный код

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

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

См. также

SALE! 10%

Перенос данных из 1С:Бухгалтерия 7.7 в БП 3.0. Переносятся остатки, документы и справочники

Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v7.7 Платформа 1С v8.3 1С:Бухгалтерия 7.7 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Бухгалтерия 7.7 в БП 3.0 | Продукт является развитием и исправлением ошибок стандартной обработки для выгрузки данных из 1С Бухгалтерии 7.7 в Бухгалтерию 3.0 | Предоставляем техподдержку | Обновляем на новые релизы 1С | Перенос из 7.7 является сложным, и на рынке сложно найти специалистов 1С по "семерке" - наши сотрудники помогут вам выполнить переход в рамках техподдержки предлагаемого переноса данных!

50722 45650 руб.

26.05.2020    34110    10    67    

16

HTTP сервер, HTTP асинхронный клиент, клиент ГИС МТ "Честный знак": внешние компоненты для 1С 7.7

Разработка внешних компонент 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    7899    19    13    

31

Загрузка документов в 1С (7.7) из табличных файлов Excel,OpenOffice,1C,DBF,TXT (обработка)

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

Обработка решает поставленную задачу по вводу документов, а кроме того обладает важной функцией: настраивается на ассортимент конкретного поставщика, запоминая соответствие между его номенклатурой и «нашей». Т.е. фактически – является самообучающейся системой ввода накладных. У разных поставщиков могут быть накладные различного типа, с разным количеством полей, поэтому для каждого из них может быть сохранена своя собственная настройка диалоговой формы так, что любая поступающая накладная может быть обработана. По отношению к программе "1С:Предприятие 7.7" данное решение является внешними файлами. Для использования данного продукта не требуется вносить изменения в алгоритм существующих программ или используемых конфигураций.

2400 руб.

10.12.2009    76620    58    93    

68

Компонента ExchangeStruc (Структура Обмена). Прямой обмен данными между потоками, сессиями и окнами.

Разработка внешних компонент Платформа 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    4821    1    0    

3

Робот-загрузчик и архив документов. Распознавание/загрузка сканов документов в 1С8(7.7), архив сканированных документов.

Файловый обмен (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    7909    1    12    

9

Выбор из большого списка (для 1С 7.7)

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

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

1200 руб.

02.12.2021    5818    2    19    

4

Выгрузка из 1С ТиС 9.2 в 1С БП 3.0 с дополнительными фильтрами по Фирме, Складу, Контрагенту, Проекту, Автору и Юрлицу

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

11

Выгрузка УПД И УКД в формате ЭДО для Бухгалтерии 7.7 (ПУБ 7.7, УСН 7.7, ТиС 7.7, Комплексной 7.7)

Файловый обмен (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    14917    208    AndKovalchuk    41    

17
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 39 07.04.21 15:19 Сейчас в теме
(1) Здорово, что есть такой вариант!
3. alex_1cUA 01.10.21 18:49 Сейчас в теме
(1)
CDO.Message


Только этот вариант позволяет кодировать. Но раскодировать уже готовую строку Base64 он не позволяет.
4. selesta 17 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 17 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 12 22.02.22 09:05 Сейчас в теме
(5) с текстом хорошо, а как файл закодировать? картинку к примеру.
10. rbsoft 209 05.11.23 10:50 Сейчас в теме
(5) неверно кодирует иногда.
Например:
0104607029703941215kgFSP93OM/P

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

Должно быть:
MDEwNDYwNzAyOTcwMzk0MTIxNWtnRlNQHTkzT00vUA==
11. rbsoft 209 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 12 22.02.22 09:04 Сейчас в теме
Приветствую! На файлах больше 500 кБ падает. А по CDO.Message не правильно кодирует ))
8. CheBurator 3119 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;
	
КонецФункции
//*******************************************
Показать
Оставьте свое сообщение