Работа с двоичными данными на примере чтения файлов изображений. Новые возможности 8.3.9

Публикация № 561328

Разработка - Практика программирования

двоичные данные формат файла размер файла API Вконтакте

В статье приводятся новые функции по работе с двоичными данными, появившимися в версии платформы 8.3.9 , на примере анализа формата и размера изображений. А также пример отправки изображения через API ВКонтакте с помощью новых объектов (без использования ОбъединитьФайлы())

В данной статье рассмотрим применение новых методов платформы 8.3.9  по работе с двоичными данными. Сначала немного теории.

Как было раньше

Ранее 1С предоставляла для работы с двоичными данными одноименный тип и некоторые методы работы с файлами. Думаю, многим известна ситуация, когда для отправки файла в формате multipart/form-data использовался метод «ОбъединитьФайлы». Это было связано  с отсутствием методов по работе  с внутренним содержимым двоичных данных.

Что нового

В версии 8.3.9 эта ситуация меняется. Разработчики платформы предоставили в наше распоряжение несколько новых типов и методов. Основным из них является обобщенный объект Поток. Потоков бывает три типа: Поток, ФайловыйПоток и ПотокВПамяти.

Основным преимуществом потоков является их способность работать с данными произвольного объема. Но в то же время они предоставляют ограниченные возможности. 

Для получения расширенных возможностей необходимо на основе потока создать объект ЧтениеДанных. С помощью него можно читать отдельные байты, символы, числа.

Побайтовые операции

Для анализа работы новых методов возьмем  за пример анализ параметров изображений для загрузки через API ВКонтакте.
Требования для загрузки фото в товар группы:

Допустимые форматы: JPG, PNG, GIF. 
Ограничения: минимальный размер фото — 200x200px, сумма высоты и ширины не более 14000px, файл объемом не более 50 МБ.
 
Нас будет интересовать формат файла, его разрешение и вес.

Внимание! Формат файла JPG не обрабатывается в обработке.

Вес файла

Сначала на основе выбранного файла создадим ФайловыйПоток и сможем сразу получить Размер файла в байтах:

ПотокИсходный = ФайловыеПотоки.ОткрытьДляЧтения(Объект.ИмяФайла);

///1. Размер файла
Объект.РазмерФайла = Строка(ПотокИсходный.Размер() / 1024) + " Кб";

Формат файла

 Каждый формат файла отличается друг от друга внутренней структурой. Отличительными особенностями каждого формата будем называть сигнатурами.
Зададим сигнатуры для каждого формата:

///Зададим сигнатуры нужных форматов 
МассивДопустимыхФорматов = Новый Соответствие;
МассивДопустимыхФорматов.Вставить("PNG", 	РазложитьСтрокуВМассивПодстрок("137,80,78,71,13,10,26,10"));
//МассивДопустимыхФорматов.Вставить("JPEG", 	РазложитьСтрокуВМассивПодстрок("255,216"));
МассивДопустимыхФорматов.Вставить("GIF1", 	РазложитьСтрокуВМассивПодстрок("71,73,70,56,57,97"));
МассивДопустимыхФорматов.Вставить("BMP", 	РазложитьСтрокуВМассивПодстрок("66,77"));
МассивДопустимыхФорматов.Вставить("TIF", 	РазложитьСтрокуВМассивПодстрок("73,73,42,0"));
МассивДопустимыхФорматов.Вставить("TIF1", 	РазложитьСтрокуВМассивПодстрок("77,77,0,42"));

Каким образом получены сигнатуры?

В hex-записи сигнатура PNG файла выглядит так и состоит из 8 байт:
89 50 4E 47 0D 0A 1A 0A

Это можно проверить, открыв любой PNG файл в HEX-редакторе. Например, возьмем иконку месседжера Telegram размером 32*32.

Переведем эти значения из 16-ной системы в 10-ную и получим значения:
"137,80,78,71,13,10,26,10"

Аналогично поступаем с остальными форматами.

Проверяем формат файла

Создаем объект ЧтениеДанных на основе потока:
ЧтениеДанных = Новый ЧтениеДанных(ПотокИсходный, КодировкаТекста.ANSI, ПорядокБайтов.BigEndian);
ИскомыйТипФайла = ПроверитьСоответствиеТипаФайла(ЧтениеДанных, МассивДопустимыхФорматов);
	
	Если ИскомыйТипФайла = Неопределено Тогда
		Сообщить("Не поддерживаемый тип файла");
		Возврат;
	КонецЕсли;

&НаСервере
Функция ПроверитьСоответствиеТипаФайла(ЧтениеДанных, МассивДопустимыхФорматов)
	
	МаксРазмер = 0;
	Для Каждого ТипФайла Из МассивДопустимыхФорматов Цикл
		МаксРазмер = Макс(МаксРазмер, ТипФайла.Значение.Количество());		
	КонецЦикла; 
	
	//прочитаем в новый буфер максимальный размер сигнатуры
	БуферПроверка = ЧтениеДанных.ПрочитатьВБуферДвоичныхДанных(МаксРазмер);
	
	Для Каждого ТипФайла Из МассивДопустимыхФорматов Цикл
		//Хотелось бы конечно напрямую сравнить Буфер = Буфер, но так не работает
		//Приходится сравнивать каждый байт
		
		ДвоичнаяСигнатураФормата = ПолучитьСигнатуруФорматаВДвоичномВиде(ТипФайла.Значение);
		БуферПроверкаТипаФайла = БуферПроверка.Прочитать(0, ДвоичнаяСигнатураФормата.Размер);
		
		Сч = 0;
		Равны = Истина;
		Для Каждого Счет Из БуферПроверкаТипаФайла Цикл
			Если Счет <> ДвоичнаяСигнатураФормата[Сч] Тогда
				Равны = Ложь;	
				Прервать;
			КонецЕсли; 
		    Сч = Сч + 1; 
		КонецЦикла; 
		Если Равны Тогда
			Возврат ТипФайла.Ключ;
		КонецЕсли; 
	КонецЦикла; 

	Возврат НЕопределено;

КонецФункции

Т.к. буферы нельзя сравнить между собой, пришлось сравнивать байт за байтом. Если кто знает, как сделать красивее, пишите в комментариях.

Ищем размеры изображения

В каждом формате файла размеры изображения хранятся в разных местах. Например, в PNG они находятся после маркера «IHDR». Зная это, с помощью новых методов, мы можем переместить указатель на нужную позицию :
ЧтениеДанных.ПропуститьДо("IHDR", КодировкаТекста.ANSI);

Так же из спецификации формата PNG известно, что ширина и высота изображения занимают по 4 байта. Сначала прочитаем все 8 байтов, а потом отдельно ширину и высоту:

БуферЗаголовок 				= ЧтениеДанных.ПрочитатьВБуферДвоичныхДанных(8);
ОБъект.ШиринаИзображения 	= БуферЗаголовок.Прочитать(0, 4).ПрочитатьЦелое32(0, ПорядокБайтов.BigEndian);
Объект.ВысотаИзображения 	= БуферЗаголовок.Прочитать(4, 4).ПрочитатьЦелое32(0, ПорядокБайтов.BigEndian);

В методе ПрочитатьВБуферДвоичныхДанных() мы указываем общее количество байтов, которое хотим прочитать в буфер двоичных данных. Далее этот буфер читаем методом Прочитать(0, 4) – где 0 это позиция, а 4 – количество байтов для чтения.

С GIF ситуация немного другая. Т.к. мы использовали  исходный объект ЧтениеДанных для проверки соответствия форматам изображений, то указатель в этом экземпляре объекта переместился на какое-то количество позиций. 

Если мы продолжим читать этот экземпляр, то не сможем найти размеры изображения. Поэтому используем метод потока Перейти() и создаем новое ЧтениеДанных на основе нашего исходного потока. Дальше как обычно читаем размеры.

Как выглядит внутренняя структура файла GIF:
W и H - это ширина и высота. Чтобы до них добраться читаем в буфер 10 байт и получаем ширину и высоту с позиций 6 и 8, прочитав в каждом случае по 2 байта.
 
ТекПозиция 		= ПотокИсходный.ТекущаяПозиция();
ПотокИсходный.Перейти(-ТекПозиция, ПозицияВПотоке.Текущая);
ЧтениеДанныхGIF = Новый ЧтениеДанных(ПотокИсходный, КодировкаТекста.ANSI, ПорядокБайтов.LittleEndian);
БуферРазмеры 				= ЧтениеДанныхGIF.ПрочитатьВБуферДвоичныхДанных(10);
Объект.ШиринаИзображения 	= БуферРазмеры.Прочитать(6,2).ПрочитатьЦелое16(0, ПорядокБайтов.LittleEndian);
Объект.ВысотаИзображения 	= БуферРазмеры.Прочитать(8,2).ПрочитатьЦелое16(0, ПорядокБайтов.LittleEndian);

 Таким образом, зная спецификации нужных форматов, мы проверяем формат файла, размеры изображения.

Отправка изображения через API ВКонтакте

Привожу пример работающего кода  отправки сообщения multipart/form-data (проверено на отправке фото товара в группу ВКонтакте) (в обработке не приведен этот код):

//здесь получается объект с типом Картинка
Изображение = Номенклатура.ОсновноеИзображение.Хранилище.Получить();
//в функцию передаем двоичные данные картинки стандартным методом ПолучитьДвоичныеДанные()
ДвоичныеДанныеТело = СобратьИзображениеИзДвоичныхДанных(Изображение.ПолучитьДвоичныеДанные(), Boundary, ИмяФайлаДляЗагрузки);


Функция СобратьИзображениеИзДвоичныхДанных(ДвоичныеДанныеИзображения, Boundary, ИмяФайлаДляЗагрузки)
	
	ПотокТело = Новый ПотокВПамяти();
	ЗаписьДанных = Новый ЗаписьДанных(ПотокТело);
	
	ЗаписьДанных.ЗаписатьСтроку("--" + Boundary);
	ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""file""; filename=""" + ИмяФайлаДляЗагрузки + """");	
	
	ЗаписьДанных.ЗаписатьСтроку("Content-Type: image/jpeg");
	ЗаписьДанных.ЗаписатьСтроку("");

	ЗаписьДанных.Записать(ДвоичныеДанныеИзображения);		
	//Завершение раздела двоичных данных
	ЗаписьДанных.ЗаписатьСтроку("--" + Boundary);
	
	//Завершение сообщения для сервера
	ЗаписьДанных.ЗаписатьСтроку("--" + Boundary + "--");	
	
	ЗаписьДанных.Закрыть();
	
	ДвоичныеДанныеТело = ПотокТело.ЗакрытьИПолучитьДвоичныеДанные();
	
	Возврат ДвоичныеДанныеТело;
	
	
КонецФункции      

 

Скачать файлы

Наименование Файл Версия Размер
Работа с двоичными данными на примере чтения файлов изображений

.epf 8,25Kb
16
.epf 8,25Kb 16 Скачать

Специальные предложения

Вознаграждение за ответ
Показать полностью
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. CyberCerber 740 14.11.16 09:27 Сейчас в теме
Добрый день

Спасибо за информацию, записывать файл в multipart/form-data стало теперь намного красивее.

Вот только:

Объект.РазмерФайла = Строка(ПотокИсходный.Размер() / 1000) + " Кб";

Почему делите на 1000, а не 1024?
maksa2005; корум; frkbvfnjh; aximo; +4 Ответить
2. Anton64 288 14.11.16 10:33 Сейчас в теме
(1) CyberCerber, Спасибо, ошибка закралась. Исправил
20. kadild 25.06.18 17:52 Сейчас в теме
(2) Почему не исправили в прикрепленной обработке?
3. Armando 1394 14.11.16 11:14 Сейчас в теме
Подсчет количества страниц TIFF
&НаКлиенте
Процедура Команда1(Команда)
	
	ПапкаСФайлами = "";
	МассивФайлов = НайтиФайлы(ПапкаСФайлами, "*.tif*");
	Для Каждого Файл Из МассивФайлов Цикл
		ФайловыйПоток = ФайловыеПотоки.ОткрытьДляЧтения(Файл.ПолноеИмя);
		Буфер = Новый БуферДвоичныхДанных( 4 );
		ФайловыйПоток.Прочитать(Буфер, 0, Буфер.Размер);
		Если Буфер[0] = 73 И Буфер[1] = 73 И Буфер[2] = 42 И Буфер[3] = 0 Тогда
			ПорядокБ = ПорядокБайтов.LittleEndian;
		ИначеЕсли Буфер[0] = 77 И Буфер[1] = 77 И Буфер[2] = 0 И Буфер[3] = 42 Тогда
			ПорядокБ = ПорядокБайтов.BigEndian;
		Иначе
			Сообщить(Файл.ПолноеИмя + ": формат не поддерживается");
			Продолжить;
		КонецЕсли;
		ФайловыйПоток.Перейти(4, ПозицияВПотоке.Начало);
		Буфер = Новый БуферДвоичныхДанных( 8 );
		ФайловыйПоток.Прочитать(Буфер, 0, Буфер.Размер);
		СмещениеПервогоIFD = Буфер.ПрочитатьЦелое32(0, ПорядокБ);
		
		Количество = Команда1Фрагмент(СмещениеПервогоIFD, ФайловыйПоток, 0, ПорядокБ);
		Сообщить(Файл.ПолноеИмя + ": " + Количество);
		
		ФайловыйПоток.Закрыть();
	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Функция Команда1Фрагмент(СмещениеСледущего, Знач ФайловыйПоток, Счетчик, ПорядокБ)
	
	Перем Буфер, КоличествоТэгов, СмещениеСледущегоСмещения;
	
	Пока СмещениеСледущего > 0 Цикл
		Если Счетчик = 999 Тогда
			Прервать; // что-то не так
		КонецЕсли;
		Счетчик = Счетчик + 1;
		ФайловыйПоток.Перейти(СмещениеСледущего, ПозицияВПотоке.Начало);
		Буфер = Новый БуферДвоичныхДанных( 8 );
		ФайловыйПоток.Прочитать(Буфер, 0, Буфер.Размер);
		КоличествоТэгов = Буфер.ПрочитатьЦелое16(0, ПорядокБ);
		СмещениеСледущегоСмещения = СмещениеСледущего + 2 + (КоличествоТэгов * 12);
		ФайловыйПоток.Перейти(СмещениеСледущегоСмещения, ПозицияВПотоке.Начало);
		Буфер = Новый БуферДвоичныхДанных( 8 );
		ФайловыйПоток.Прочитать(Буфер, 0, Буфер.Размер);
		СмещениеСледущего = Буфер.ПрочитатьЦелое32(0, ПорядокБ);
		Команда1Фрагмент(СмещениеСледущего, ФайловыйПоток, Счетчик, ПорядокБ);
	КонецЦикла;
	
	Возврат Счетчик;
	
КонецФункции
Показать
kraynev-navi; swiss-garant; VasilVtoroy; Anton64; DrAku1a; +5 Ответить
4. kredko 19 15.11.16 04:32 Сейчас в теме
Переведем эти значения из 16-ной системы в двоичную и получим значения:
"137,80,78,71,13,10,26,10"

Может всё же в десятиричную систему счисления?
5. Anton64 288 15.11.16 07:23 Сейчас в теме
(4) kredko, да, всё верно, спасибо
6. Serj1C 480 16.11.16 08:06 Сейчас в теме
Как же мне не хватало работы с двоичными данными в 2010 году...
Но BMP читать и писать уже тогда получалось средствами платформы) http://infostart.ru/public/77713/
7. sml 36 17.11.16 09:44 Сейчас в теме
Плюсанул за подробное описание форматов файлов
8. mixperm 64 18.11.16 19:11 Сейчас в теме
Отправка картинки в ВК не удалась. Буду очень благодарен если сообщите кусок кода где на upload_url отправляется эта картинка
9. Anton64 288 19.11.16 17:57 Сейчас в теме
(8) mixperm,
Код
10. Yashazz 3615 21.11.16 17:10 Сейчас в теме
Ай-ай, такие прогрессивные вещи описываете, а всё РазложитьСтрокуВМассивПодстрок вместо СтрРазделить пользуете)))

Если честно, не особенно понимаю прикладную пользу этих новшеств. Где это реально сильно и позарез надо?
TreeDogNight; Сурикат; user636219_dmitriy.gomzin; +3 Ответить
12. DrAku1a 1416 09.01.17 08:28 Сейчас в теме
(10) Разбор кода POST-запроса для HTTP или WEB сервисов.
11. Godman 67 23.11.16 16:29 Сейчас в теме
Ну и зачем это надо? Теперь вирусы писать станет проще - прямо средствами нативного языка. Как щас вижу баннер от Касперского: "Надежная защита от 1С. Доступно и всерьёз!"
DrAku1a; TreeDogNight; da.buraev; bow; brr; +5 Ответить
13. fokin 10.01.18 10:40 Сейчас в теме
бьюсь в поисках
а есть способ определить цветное это изображение или оттенки-серого или ч/б ?
14. DenisCh 10.01.18 10:49 Сейчас в теме
Я себе через бинарные файлы вот эту фигню http://ftsc.org/docs/fsc-0048.002 читаю )))
15. fokin 10.01.18 11:22 Сейчас в теме
(14) а можно поподробнее? что это?
18. fokin 10.01.18 13:40 Сейчас в теме
19. DenisCh 10.01.18 15:10 Сейчас в теме
(18) Тебе ничем. я просто привёл пример того, что я делаю с бинарными файлами )))
17. fokin 10.01.18 13:35 Сейчас в теме
21. kadild 25.06.18 19:34 Сейчас в теме +2 $m
Скачал обработку. JPEG файлы неправильно определяет ширину высоту. Зря потраченные стартмани.
Например, прикрепил картинку 800x600. Твоя обработка показывает 55653х62772. Неужели за 2 года никто не проверил?
Прикрепленные файлы:
22. Anton64 288 27.06.18 09:49 Сейчас в теме
(21) Убрал описание JPEG файлов из публикации. Вернул ваши кровно заработанные зря потраченные стартмани в двойном размере.
Danil.Potapov; juker; pm74; GreenDragon; +4 Ответить
Оставьте свое сообщение

См. также

Интеграция с бонусной программой лояльности ManyBonus Промо

Управление взаимоотношениями с клиентами (СRM) Розничная торговля WEB v8 Розница УУ Абонемент ($m)

ManyBonus.com - бонусная программа лояльности на базе мессенджеров. Позволяет регистрировать клиента в программе лояльности через Telegram, Viber, VK, отправлять коды скидок в мессенджеры, получать уведомления при списании/начислении бонусных баллов, альтернатива сообщениям СМС.

3 стартмани

07.01.2021    1268    1    Anton64    0    

FormCodeGenerator Программная доработка форм. Часть 2 (Режим работы "Режим сравнения форм") на примере ERP 2.5

Практика программирования Адаптация типовых решений Прочие инструменты разработчика v8 1cv8.cf Абонемент ($m)

Данная публикация является продолжением описания функционирования обработки "FormCodeGenerator " в режиме сравнения форм и генерирования кода на основании сравнения. Подходит для перевода уже доработанных форм с интерактивной доработки на программную. Данный режим работы обработки снизит издержки при дальнейших обновлениях конфигураций.

5 стартмани

21.12.2020    2024    12    huxuxuya    11    

BIM: взаимодействие с платформой Autodesk Forge

WEB v8 Строительство Абонемент ($m)

Предлагаемый пример демонстрирует широкие возможности для взаимодействия «1С:Предприятие» с платформой Autodesk Forge и позволяет вам получить базовые представления о применения технологий информационного моделирования в строительстве. Поддерживаются все версии платформы от 8.3.12 и выше до 8.3.18.

1 стартмани

25.11.2020    10086    4    kandr    0    

"Учет штрафов ГИБДД" с возможной загрузкой из открытых источников в интернет Расширение конфигурации 1С: Предприятие 8.3

Обработка документов WEB v8 v8::УФ 1cv8.cf Россия БУ УУ Абонемент ($m)

Расширение конфигурации Бухгалтерия предприятия, редакция 3.0 (при минимальных изменениях любой типовой конфигурации), позволяющее вести историю данных по штрафам ГИБДД для справочника транспортных средств компании. Бонусом поставляется внешняя обработка, способная загружать эти данные из открытых источников в интернет.

4 стартмани

30.12.2019    9511    12    capitan    11    

Внешняя компонента для работы по Web-socket протоколу x32 x64 Промо

Разработка внешних компонент WEB v8 Абонемент ($m)

Кто когда-нибудь сталкивался с обменом данными по Web-Socket (wss) протоколу из 1С, тому известно, что в платформе отсутствуют данные механизмы (не путать с HTTP запросами и WebServices). Предлагается использовать внешнюю компоненту, написанную по технологии NativeAPI, для подключения и обмена с серверами из 1С-Предприятия, работающими по протоколу Web-Socket.

1 стартмани

30.03.2018    28438    33    Ditron    86    

Работа с релизами 1С и договорами ИТС

WEB БСП (Библиотека стандартных подсистем) v8 1cv8.cf Абонемент ($m)

Работа с релизами 1С и партнерским кабинетом.

2 стартмани

15.08.2019    15552    46    RocKeR_13    15    

Вам нравятся запросы в 1С?

Практика программирования Разработка v8 v8::Запросы 1cv8.cf Абонемент ($m)

Речь не только о том, что простейший запрос с "легальным" оформлением растянется на пол-экрана, речь еще обо всем, что нужно написать "в нагрузку" к тексту запроса. Все эти "Новый Запрос", "УстановитьПараметр" и последующие пляски с обработкой результата... Пора с этим заканчивать!

1 стартмани

03.07.2019    22227    5    m-rv    88    

Проверка VAT номеров

WEB v8 1cv8.cf Абонемент ($m)

Обработка для вызова сервиса проверка VAT номера.

1 стартмани

26.11.2018    13691    2    wtlz    1    

Трекинг номеров РПО в Почте России Промо

WEB Оптовая торговля Оптовая торговля v8 Оптовая торговля, дистрибуция, логистика Абонемент ($m)

Относительно недавно Почта России стандартизировала и описала сервисы получения информации о регистрируемом почтовом отправлении (РПО). Представляю вашему вниманию конфигурацию-обертку над сервисами Почты России. Она позволяет просто (http-запросы) и без изменений конфигурации подключить сервисы отслеживания к своим информационным системам.

2 стартмани

28.03.2016    28188    38    Smaylukk    3    

Работа с публикациями "Инфостарт"

Практика программирования О сообществе WEB v8 УУ Абонемент ($m)

Работа с рублевыми публикациями на сайте "Инфостарт": ведение клиентов, заказов, обновление файлов публикации, рассылка обновлений.

1 стартмани

13.09.2018    22969    13    RocKeR_13    16    

Позиционирование в помещении с помощью нейросети по сигналу Wi-Fi. Интерактивная карта склада в 1С с показом позиции

Инструментарий разработчика Практика программирования v8 Абонемент ($m)

Данная публикация содержит в себе редактор и интерактивную карту склада или иного помещения, на которой в реальном времени отображается позиция устройства, координаты которого вычисляются по уровням сигнала нескольких роутеров Wi-Fi. В статье и приложенным к ней разработкам предлагаются инструменты и методика для реализации вычисления точной геопозиции внутри помещений с помощью нейронной сети. Конфигурация написана на релизе 1С:Предприятие 8.3.12.1412, клиентское приложение имеет минимальный уровень совместимости SDK -16.

5 стартмани

09.08.2018    29684    26    informa1555    26    

Работа с данными выбора

Практика программирования Работа с интерфейсом v8 Россия Абонемент ($m)

В управляемом интерфейсе заложена мощная возможность описывать связи реквизитов формы через параметры. Установка параметров связей позволяет ограничить выбор данных так, чтобы целостность данных была обеспечена на этапе ввода. Однако без дополнительного программирования задать можно только самые простые связи. Такие условия связи, как зависимость от реквизита через точку или зависимость через дополнительное отношение, заданное в регистре сведений - уже задать без программирования не получится.

1 стартмани

17.07.2018    51832    18    kalyaka    16    

Работа с картами 1С 4 в 1: Яндекс, Google , 2ГИС, OpenStreetMap(OpenLayers) Промо

Универсальные обработки WEB v8 1cv8.cf Абонемент ($m)

С каждым годом становится все очевидно, что использование онлайн-сервисов намного упрощает жизнь. К сожалению по картографическим сервисам условия пока жестковаты. Но, ориентируясь на будущее, я решил показать возможности API выше указанных сервисов: Инициализация карты Поиск адреса на карте с текстовым представлением Геокодинг Обратная поиск адреса по ее координатами Взаимодействие с картами - прием координат установленного на карте метки Построение маршрутов по указанным точками Кластеризация меток на карте при увеличении масштаба Теперь также поддержка тонкого и веб-клиента

1 стартмани

28.12.2012    108737    2676    Smaylukk    358    

Пример использования REST API Яндекс Диска

WEB v8 1cv8.cf Абонемент ($m)

Пример использования REST API Яндекс Диска: чтение диска, добавление каталога, загрузка файла, скачивание файлов или каталогов, удаление файлов или каталогов.

1 стартмани

26.06.2018    27187    42    MKFreeUser    15    

Обмен файловыми базами данных через Yandex диск

WEB v8 Россия Абонемент ($m)

Выполнение операций обмена с Yandex диском для файловых БД, по протоколу WebDav, в автоматическом или ручном режимах.

1 стартмани

11.06.2018    18120    7    slimper    1    

Конфигурация для просмотра публичных телеграм каналов

WEB v8 Абонемент ($m)

Просмотр и каталогизация в более удобном виде публичных телеграм каналов, групп и чатов.

1 стартмани

02.06.2018    18930    11    DO_WHILE_LOOP    7    

ВСТАВИТЬ В Справочник.Номенклатура (Код, Наименование) ЗНАЧЕНИЯ ("001", "Новый товар")

Практика программирования v8 v8::Запросы 1cv8.cf Абонемент ($m)

Вас не обманывают ваши глаза, это запрос на изменение данных! И это работает без прямого доступа к БД, регистрации и смс.

1 стартмани

01.06.2018    31611    88    m-rv    57    

Построение маршрута доставки с расчётом расстояния для любой базы УФ

Универсальные обработки WEB Оптовая торговля Оптовая торговля v8 v8::УФ 1cv8.cf Абонемент ($m)

Графическое изображение маршрутного листа по картам гугл. Работает на любой конфигурации с управляемыми формами. Использует новую версию api google-карт от 13.02.2018 года под IE11.

10 стартмани

24.02.2018    37291    43    KorotkovRV    16    

Заполняем по шаблону (по умолчанию)

Практика программирования v8 v8::УФ 1cv8.cf Абонемент ($m)

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

1 стартмани

08.02.2018    29550    19    mvxyz    17    

Сервер push сообщений “Push0k“ 18.05

WEB v8 1cv8.cf Абонемент ($m)

Аналог других “мессенджеров“. Позволяет практически все то же самое, что и другие решения. За исключением смайлов, эмодзи, голосовой и видео связи. Основное отличие от других решений, открыта и доступна для изменения серверная и клиентская часть месенджера. Общедоступной серверной части нет, за серверную часть отвечаете вы сами.

1 стартмани

19.12.2017    19257    12    PloAl    20    

Печатная форма, сделанная как расширение конфигурации для БП 3.0. Новые возможности БСП

Практика программирования Универсальные печатные формы v8 БП3.0 Абонемент ($m)

Печатные формы на внешних обработках скоро канут в лету. На смену им приходят ПФ, реализованные в виде расширений конфигурации. Не нашел на сайте примеров таких расширений. Привожу пример подобного расширения для БП 3.0.

1 стартмани

06.12.2017    28074    54    kwazi    6    

Подсистема Вики - интеграция 1С и сайта под управлением MediaWiki

WEB v8 Абонемент ($m)

Редактирование статей сайта Mediawiki из 1С. Формирование функционального описания конфигурации на сайте Вики.

1 стартмани

19.09.2017    29699    35    shmalevoz    20    

Работа с картой. Кадастровый учет (Росреестр). Тематические карты

WEB Рабочее место v8 v8::УФ 1cv8.cf Абонемент ($m)

Внешняя обработка для работы с картами в 1С. Получения изображения с публичной кадастровой карты России, построения тематических карт

5 стартмани

31.08.2017    19667    7    vipchep    0    

Расширения конфигураций 1С: учимся перехватывать методы

Практика программирования v8 v8::УФ 1cv8.cf Абонемент ($m)

В этой статье я на примерах разберу некоторые механизмы расширений конфигураций 1С. А именно «перехваты» методов модуля объекта и «перехваты» событий формы и элементов формы. Данная статья написана с учебными целями, чтобы показать, как при помощи расширений конфигурации можно делать такие доработки, ради которых раньше приходилось снимать конфигурацию с поддержки.

1 стартмани

30.05.2017    137941    13    signum2009    48    

Настройка рекламной кампании Яндекс.Директ на 30000 ключевых фраз за 60 минут - теперь это реально!

WEB v8 Реклама, PR и маркетинг Россия Абонемент ($m)

Конфигурация для настройки Яндекс.Директа.

10 стартмани

20.10.2016    30253    51    avalakh    10    

Конструктор-тестер http запросов в 1С

WEB Инструментарий разработчика v8 1cv8.cf Россия Абонемент ($m)

Данная обработка позволяет в несколько кликов конструировать http запросы на языке 1С и просматривать результаты их выполнения.

3 стартмани

19.08.2016    43736    302    hlopik    18    

1С: Предприятие + корпоративный чат, как наладить оперативные уведомления за 10 минут

Практика программирования v8 Абонемент ($m)

Как сделать автоматические уведомления о разных событиях из 1С в корпоративный чат MyChat для сотрудников компании

1 стартмани

14.08.2016    49504    36    Demanoidos    60    

Легкий интернет-магазин из УТ 11.2

WEB Управление взаимоотношениями с клиентами (СRM) Оптовая торговля Розничная торговля Управление взаимоотношениями с клиентами (СRM) Оптовая торговля Розничная торговля v8 УТ10 УУ Абонемент ($m)

Обработка создания интернет-магазина из УТ 11. Создается единственный файл html, который содержит все выгруженные товары. Клиент составляет и отправляет заказ вам на e-mail прямо из браузера, не прибегая к использованию стороннего ПО.

11.08.2016    32556    0    hlopik    36    

Подсистема обмена данными с порталом ИМНС по электронным счетам-фактурам (автоматический обмен)

Внешние источники данных WEB Инструментарий разработчика v8 1cv8.cf Беларусь БУ НДС Абонемент ($m)

Подсистема включает документы и обработки для автоматического обмена данными с порталом ИМНС через web-сервис. Присутствует возможность заполнения данными типовых операций за период, учёта входящих документов, учёта произвольных исходящих документов. Приложены обработки для запуска задания планировщика на автоматический обмен данными.

1 стартмани

28.07.2016    34710    19    c1nil    4    

Хранение файлов в томах на диске (для УПП 1.3)

Практика программирования v8 УПП1 Абонемент ($m)

Доработка типовой УПП 1.3 в плане хранения присоединенных файлов вне базы данных

2 стартмани

05.06.2016    59680    11    wowik    32    

Остатки на каждый день в запросе

Практика программирования Учет ТМЦ Учет ТМЦ v8 1cv8.cf УУ Абонемент ($m)

Запрос формирует остатки товаров на каждый день в пределах выбранного периода.

1 стартмани

26.04.2016    62273    19    arakelyan    20    

Просмотр данных системы Платон на картах Google

Универсальные обработки WEB v8 1cv8.cf Автомобили, автосервисы Транспорт, автопарки, такси Абонемент ($m)

Обработка для просмотра предполагаемых треков движения транспортного средства на карте Google согласно данным, предоставляемым системой Платон в формате CSV. Работает под 8.2 и 8.3, обычное и управляемое приложение, может подключаться к типовым конфигурациям в качестве внешней обработки.

1 стартмани

15.04.2016    34517    19    anig99    8    

Выполнение JavaScript кода из 1С в объекте Поле HTML Документа (HTML 5) и вызов события в 1С ПриНажатии

Практика программирования v8 1cv8.cf Россия Абонемент ($m)

Пример выполнения JS кода из 1С в Поле HTML Документа под управляемыми формами, с удобным получением результата в 1С(С помощью вызова привязанного события ПриНажатии к элементу ПолеHTMLДокумента)

1 стартмани

22.03.2016    84341    162    igo1    54    

Количество дней недели (понедельников/вторников/...) в заданном диапазоне одним запросом

Практика программирования v8 Абонемент ($m)

При реализации периодического авто-заполнения маршрутных листов по графику (недельному) необходимо было просчитать стоимость всего периода, с условием выездов только по определенным дням. Заморачиваться с обходом результата не хотелось. Пришлось написать "Небольшой" запрос.

1 стартмани

03.03.2016    19211    1    Alexander.Shvets    5    

Простые радости жизни программиста 1С: выбор типа значения

Работа с интерфейсом Практика программирования v8 1cv8.cf Абонемент ($m)

Предлагаемая в работе обработка включает обычную и управляемую формы, которые максимально точно реализуют функциональность системного диалога выбора типа в толстом клиенте обычное приложение (включая оформление диалога). Эти формы имеют дополнительные интерфейсные удобства и могут быть использованы в качестве альтернативных диалогов выбора типа.

1 стартмани

17.02.2016    51925    54    yuraos    17    

Яндекс.Деньги "Благотворительность"

Инструментарий разработчика Практика программирования v8 1cv8.cf Абонемент ($m)

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

1 стартмани

16.02.2016    24310    8    Tatitutu    5    

Модуль для работы 1С (платформа 8.2 и выше) с внешними SOAP Web-сервисами

Внешние источники данных WEB Интеграция v8 1cv8.cf Абонемент ($m)

Модуль для работы 1С (платформа 8.2 и выше) с внешними Web-сервисами, реализованными по протоколу SOAP.

2 стартмани

15.02.2016    40923    84    lunjio    15    

Мастер рассылки e-mail 2.2 для управляемых форм

Практика программирования Email v8 v8::УФ ERP2 БП3.0 УТ11 Абонемент ($m)

Для пользователей: переделанный из старый разработки под 8.2 с использованием библиотеки Мастер рассылки e-mail 2.2 (ERP, УТ, БП) (Только управляемые формы), который теперь может запускаться под любой версией платформы с разрешенными или запрещенными модальными/синхронными вызовами в конфигурации. Также удобный выбор e-mail и их владельцев с помощью отбора динамического списка по любым критериям и галочки исключения.

1 стартмани

29.12.2015    39892    20    milkers    4    

Облачный каталог товаров на 1C

WEB Оптовая торговля Розничная торговля Оптовая торговля Розничная торговля v8 УТ10 Розница Абонемент ($m)

Поднимите руки те, кто занимается разработкой на 1С. Спасибо, опустите. Поднимите руки те, кто хоть раз писал загрузку прайса из экселя. Я смотрю, все те же. Ладно, а теперь поднимите руки те, кто хоть раз задумывался о каком-то каталоге мастер-данных по товарам. Чуть меньше. А признайтесь, кто из вас свято убежден, что делать этот каталог должен кто-то другой, например, веб-разработчики? Об этом и пойдет речь.

1 стартмани

28.12.2015    27818    32    skif47    42    

Нечеткий поиск одним запросом

Практика программирования v8 1cv8.cf Абонемент ($m)

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

1 стартмани

28.12.2015    29128    71    vasvl123    9    

Передача больших пакетов через веб-сервисы

Практика программирования Администрирование данных 1С Внешние источники данных v8 Абонемент ($m)

Реализация механизма передачи больших пакетов через веб-сервисы. С его помощью передать файл размером в несколько гигабайт не составит проблем.

1 стартмани

06.12.2015    58872    48    YPermitin    19