Обмен большими данными между клиентом и сервером

Публикация № 1111349 27.08.19

Интеграция - Внешние источники данных

Загрузка выгрузка datatransfer javascript xhr

В статье рассматривается вопрос передачи больших объемов данных, превышающих теоретический лимит сеансовых данных (4Гб за вызов) (они же временное хранилище) как с клиента на сервер, так и в обратном направлении.
  1. Проблематика.

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

А именно: 

  • За один вызов невозможно поместить во временное хранилище больше 4 Гб данных.
  • В процессе помещения данных в ВХ (здесь и далее временное хранилище) активно используются временные файлы. Точных данных нет, но в процессе помещения в темпах занимается временными файлами четырёхкратный объём помещаемого файла. Помещаете 4 Гб - потребуется ещё 16 Гб на разделе, где размещен temp. С нескромными аппетитами можно бы смириться (всё таки дисковое пространство - не самый дорогой ресурс в наши дни), если говорить об исключительности ситуаций, когда требуется обмен большими объемами данных. Если же эта операция выполняется регулярно, большим количеством пользователей, то велик шанс, что одновременно потребуется место для 10-100-Х (подставьте любое большое число загрузок, которое вам нравится) одновременных закачек, которые могут израсходовать всё свободное место на диске.
  • Из второй проблемы вытекает ещё и третья. Скорость записи на жесткий диск (в том числе во временные файлы) не бесконечна, хоть и ожидается выше скорости обмена по сети. А значит, запись пятикратного объема данных (сами данные и четырёхкратный темп для них) займёт пропорционально в 5 раз больше времени, чем если бы данные записывались ровно 1 раз.
  1. Пути решения проблемы.

  • Не передавать столько данных. Всерьёз такой способ рассматривать не будем.
  • Использовать сторонние ресурсы. Тут уже вы ограничены только собственной фантазией (ftp, webdav, облачные хранилища от различных поставщиков). Все эти способы имеют один общий недостаток. Количество операций ввода-вывода увеличивается вдвое. Один раз данные помещаются в условное облако, и только второй раз по назначению (в зависимости от направления передачи данных). Этот способ в статье рассматриваться не будет
  • Разделять файл на более мелкие части, передавать каждую часть последовательно. Вариант предполагает использование временного хранилища, а значит решает только одну из двух проблем - ограничение в 4 Гб. 
  • Использовать альтернативный транспорт, соединяющий напрямую сервер с клиентом (с некоторыми оговорками). Если не уходить в дебри с использованием внешних библиотек, позволяющих открывать TCP сокеты, платформа позволяет нам использовать как довольно гибкий транспорт http соединение с помощью объекта конфигурации http-сервис. А разработчики библиотек компании 1С даже реализовали на основе механизма http-сервисов служебную библиотеку "ПередачаДанных", которая позволяет обмениваться данными серверу 1С Предприятие с различными клиентами (не только родными). На этом способе хотелось бы остановиться более подробно. На тестах по передаче данных объемом до 20Гб средняя скорость получалась примерно в 3 раза выше, чем при передаче через временное хранилище, поддерживалась докачка прерванных загрузок, была теоретическая возможность организовать загрузку в несколько потоков. Описание библиотеки можно найти на сайте ИТС по ссылке. Отдельным пакетом передачу данных не публикуют. Библиотека входит в состав как БСП, так и БТС (из чего следует, что она присутствует во всех типовых, адаптированных для публикации во фреше), которые доступны всем желающим (с подпиской ИТС) на релизах. Библиотека выделена в отдельную подсистему "Передача данных".
  1. Как это устроено. Общее описание ландшафта.

Для простоты считаем, что существует сервер предприятия на хосте srv1c, на котором размещена информационная база base1. В базе внедрена библиотека ПередачаДанных. Информационная база и http-сервисы на веб-сервере Apache2.4, опубликованном на хосте srvweb со следующими endpoint-ами:

Адреса методов "ПередачаДанных"

Endpoint Наименование Метод Описание Роли Способ публикации
/base1 сама база   Позволяет открыть базу в вебклиенте, в тонком клиенте по WS-ссылке Зависит от конфигурации  
/base1/hs/dt/storage/{Storage}/{ID} ХранилищеИИдентификатор   Операции с файлами в логическом хранилище по идентификатору.    
    get Запрос получает токен на скачивание файла из логического хранилища Полные права, удаленный доступ Публикация без явного указания учетных данных. Требует аутентификации
    post Запрос получает токен на загрузку файла в логическое хранилище Полные права, удаленный доступ Публикация без явного указания учетных данных. Требует аутентификации
/base1/hs/dt/volume/{VolumeID}/* ТомИПутьКФайлу        
    get Запрос получает токен на скачивание файла из тома Полные права, удаленный доступ Публикация без явного указания учетных данных. Требует аутентификации
    post Запрос получает токен на загрузка файла в том Полные права, удаленный доступ Публикация без явного указания учетных данных. Требует аутентификации
/base1/hs/dt/download/{ID} Получить get По предварительно полученному токену отдает клиенту данные Полные права, передача данных (анонимный доступ) Публикация под учетной записью служебного пользователя, которому назначена только роль "Передача данных (анонимный доступ)"
/base1/hs/dt/upload/{ID} Отправить put По предварительно полученному токену загружает данные от клиента на сервер Полные права, передача данных (анонимный доступ) Публикация под учетной записью служебного пользователя, которому назначена только роль "Передача данных (анонимный доступ)"

Схема работы:

1. Формируем запрос. Он может быть сформирован как через вызовы методов http-сервиса ХранилищеИИдентификатор и ТомИПутьКФайлу (в этом случае необходимо указать свои учетные данные для аутентификации), так и с помощью серверного вызова: "РегистрСведений.ВременныеИдентификаторыЗапросов.ЗарегистрироватьЗапрос". В этом случае дополнительная аутентификация не нужна, использутся учетные данные текущего сеанса.

2. Ответ на запрос содержит токен. В дальнейшем этот токен используется для анонимного доступа к сервисам "передачи данных". Токен может быть использован только для той операции, которая была запрошена в запросе. Нельзя запросить скачивание файла А, а вместо этого загрузить на сервер файл Б. Токен действителен в течение 10 минут после регистрации запроса. После каждого обращения по токену время его жизни продляется на 10 минут.

3. Запрос может отправлять и получать как данные целиком, так и какую-то порцию. Это поведение регулируется http заголовком Content-Range.

  1. Пример реализации загрузки данных на сервер в тонком клиенте

Рассмотрим последовательность действий, которые необходимо совершить для отправки данных из тонкого клиента на сервер. Предполагаем, что http-сервис настроен и опубликован. Считаем, что файл доступен через диалог выбора файла и выбираем его:

АдресВХранилище = "";
ДополнительныеПараметры = Новый Структура;
ОписаниеОповещения = Новый ОписаниеОповещения("ВыборФайлаОповещение", ЭтотОбъект, ДополнительныеПараметры);
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите файл";
Диалог.ПолноеИмяФайла = "";
Диалог.МножественныйВыбор = Ложь;
Диалог.Показать(ОписаниеОповещения);

 

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

&НаКлиенте
Процедура ПоместитьФайлНаСерверПослеОпределенияРазмера(Размер, ДополнительныеПараметры) Экспорт
	
	Попытка
		
		Если Цел(Размер / ДополнительныеПараметры.РазмерЧасти) = (Размер / ДополнительныеПараметры.РазмерЧасти) Тогда
			ВсегоЧастей = Цел(Размер / ДополнительныеПараметры.РазмерЧасти);
		Иначе
			ВсегоЧастей = Цел(Размер / ДополнительныеПараметры.РазмерЧасти) + 1;
		КонецЕсли;
				
		СтруктураПубликации = Неопределено;
		ИдентификаторЗапроса = Неопределено;
		ЗаполнениеПараметровПубликацииНаСервере(ИдентификаторЗапроса, ДополнительныеПараметры, Размер, СтруктураПубликации);
				
		Соединение = Новый HTTPСоединение(СтруктураПубликации.Хост, , , , , , 
			?(СтруктураПубликации.Схема = "https", Новый ЗащищенноеСоединениеOpenSSL, Неопределено), Ложь);
		Если НЕ СтрЗаканчиваетсяНа(СтруктураПубликации.ПутьНаСервере, "/") Тогда
		
			СтруктураПубликации.ПутьНаСервере = СтруктураПубликации.ПутьНаСервере + "/";
			
		КонецЕсли;
		url = СтрШаблон("%1upload/%2",СтруктураПубликации.ПутьНаСервере, ИдентификаторЗапроса);
		Запрос = Новый HTTPЗапрос(url);
		Файл = Новый Файл(ДополнительныеПараметры.ИмяФайлаНаКлиенте);
		Размер = Файл.Размер();
		Порция = ДополнительныеПараметры.РазмерЧасти;
		Обработано = 0;
		Если Размер <= Порция Тогда
			Количество = Размер;
		Иначе
			Количество = Порция;
		КонецЕсли;
		
		ФайловыйПоток = ФайловыеПотоки.ОткрытьДляЧтения(ДополнительныеПараметры.ИмяФайлаНаКлиенте);
		ОбработаноЧастей = 0;		
		Пока Размер > Обработано Цикл
			ТекстСостояния = НСтр("ru='Идет загрузка файла на сервер (%1 из %2)...'");
			ТекстСостояния = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСостояния, ОбработаноЧастей, ВсегоЧастей);
			ПроцентВыполнения = Окр(ОбработаноЧастей * 100 / ВсегоЧастей, 3);
			
			Состояние(ТекстСостояния, ПроцентВыполнения);
			Количество = Мин(Размер - Обработано, Порция);
			Буфер = Новый БуферДвоичныхДанных(Количество);
			ФайловыйПоток.Прочитать(Буфер, 0, Количество);
			ИнтервалТекст = "bytes "+Формат(Обработано, "ЧН=0; ЧГ=0");
			Обработано = Обработано + Количество;
			ИнтервалТекст = ИнтервалТекст+"-"+Формат(Мин(Размер-1,Обработано-1), "ЧН=0; ЧГ=0")+"/"+Формат(Размер, "ЧН=0; ЧГ=0");
			Запрос.Заголовки.Вставить("Content-Range", ИнтервалТекст);
			Запрос.УстановитьТелоИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(Буфер));
			Ответ	 = Соединение.Записать(Запрос);
			Если Ответ.КодСостояния >= 200 И Ответ.КодСостояния < 300 Тогда
				ОбработаноЧастей = ОбработаноЧастей + 1;
			Иначе
				ТекстСообщения = НСтр("ru = 'При загрузке файла произошла ошибка: %1'");
				ВызватьИсключение СтрШаблон(ТекстСообщения, Ответ.ПолучитьТелоКакСтроку());
				Прервать;
			КонецЕсли;
		КонецЦикла;
		ОтветJSON = Ответ.ПолучитьТелоКакСтроку();
#Если НЕ Вебклиент Тогда
		ЧтениеJSON = Новый ЧтениеJSON;
    	ЧтениеJSON.УстановитьСтроку(ОтветJSON);
		ОтветСтруктура = ПрочитатьJSON(ЧтениеJSON); 
		ИдФайлаВыгрузки = Новый УникальныйИдентификатор(ОтветСтруктура["id"]);
#КонецЕсли
		Исключение // По каким-то причинам файл разделить не удалось.
		
		ОписаниеОшибки = ОписаниеОшибки();
		Сообщить(ОписаниеОшибки);
		
	КонецПопытки;
				
КонецПроцедуры

Вызов "ЗаполнениеПараметровПубликацииНаСервере" регистрирует запрос на сервере от имени текущего пользователя, что в дальнейшем позволит анонимно отправлять http запросы без аутентификации. Образец работы с библиотечными вызовами будет приложен в файлах. Далее инициализируются http соединение, запрос уже на анонимный http сервис upload. Открывается файловый поток на чтение и последовательно вычитывается в буфер указанное в настройках количество байт. Запрос дополняется заголовком "Content-Range", используемым на сервере для "склейки" фрагментов передаваемого файла, и отправляется на сервер. Эта процедура циклически повторяется, пока все данные из файла не будут переданы. Последний ответ сервера содержит идентификатор файла в логическом хранилище (для его дальнейшего использования).

  1. Пример реализации скачивания данных с сервера в тонком клиенте

Тут всё просто:

  • как то находим наш идентификатор
  • формируем запрос на скачивание, как в предыдущем пункте
  • формируем полный URL загружаемого файла
  • делаем гиперссылку с этим URL на форме

На самом деле немного сложнее, но об этом в последнем разделе

  1. Пример реализации загрузки данных на сервер в веб-клиенте

В веб клиенте всё сильно сложнее. На момент разработки веб клиент позволял либо  выбрать файл и поместить его сразу во временное хранилище (метод "НачатьПомещениеФайла" до платформы версии 8.3.13 не позволял отказаться от помещения файла в ВХ), либо требовал установки расширения для работы с файлами, чтобы показать диалог выбора файла. А после ещё и дополнительно запрашивал разрешения на чтение файла ещё раз. И это даже не самое страшное... Веб клиент не позволяет создавать http запросы в коде.

 

А вот java script позволяет. Поэтому было принято решение для веб клиента экспроприировать диалог выбора файла прямо из браузера со всеми стилями и использовать его в своих корыстных целях. HTML форма диалога выбора файла позволяет перетаскивать файл(ы) drag'drop-ом, сразу несколько (хотя это и запрещено в примере), показывает полосу прогресса (чего в 8.3.15 так и не сделали), ну и конечно же работает с библиотекой "Передача данных". Более подробно смотрите внешнюю обработку в приложениях к статье.

  1. Концепт скачивания данных с сервера в веб-клиенте

Тут нужен небольшой экскурс в непростую историю развития браузеров и стандартов html5 в частности. Для предыдущего пункта использовался достаточно удобный, всеми принятый стандарт FileReader API. А вот для аналогичных операций при скачивании файлов нужен противоположный процесс - запись. А вот с этим из соображений безопасности у браузеров очень туго. File Writer так и не вышел из статуса черновика, был с горем пополам в какой то момент реализован Мозиллой, можно сказать, что его не существует. Однако файл загружать хочется. 

Можно это делать тем же способом, как предложено в п.5. Однако тут начинаются неприятные неожиданности на этапе открытия ссылки для скачивания. Браузер непонятно чем занимается, крутит колесико минуту-несколько, потом, возможно показывает диалог скачивания файла, а нередко ошибку 504. Что бы это значило, задумался я?

Проанализировав активность на сервере (дисковую в первую очередь) было выяснено, что файл после запроса начинает бродить по темпам. Сначала его копирует сервер предприятия, потом веб-сервер, потом (в моём случае на внешний мир смотрел ещё 1 слой из nginx в роли reverse proxy) ещё раз это делает nginx. И вот, пока идёт копирование файла во временные, колёсико крутится и мы ждём. Если файл не успевает скопироваться за настроенное время ожидания - привет 504 (Gateway timeout). 

На просторах интернета было найдено решение по рекомендации "лучших собаководов". Оно достаточно зависит от используемого веб-сервера.

Методика называется "контролируемая загрузка", состоит в следующем. Клиент запрашивает какой то ресурс. В нашем случае: https://host/ib/hs/dt/download/queryid. Вебсервер передает этот запрос на backend (на сервер предприятия), который добавляет в ответ специальные заголовки, которые говорят вебсерверу, какой файл отдавать. Примеры (правда для php) можно посмотреть в этой статье на хабре. Здесь приведу пример для nginx в режиме reverse proxy. 

1. В конфиге нашего сервера объявляем дополнительный "internal" location. Это важно. Доступ к файловой системе, указанной в этом location будет только у сервера, клиенты даже случайно не смогут получить доступа к содержимому каталога или даже самим файлам по прямой ссылке. Возможно использование как локальных файловых систем, так и смонтированных cifs и nfs шар.

location /protected/ {
  internal;
  root   /some/path;
}

2. В коде http-сервиса на стороне сервера предприятия добавляем специальные заголовки к ответу. В отличие от стандартной передачи файла в ответе сервера, в тело ответа не добавляются двоичные данные файла, а используется заголовок "X-Accel-Redirect". В переменной ИмяФайла формируется путь до файла в location, например, если файл фактически находится в /some/path/protected/file1.txt, то в переменной ИмяФайла должно находиться значение /protected/file1.txt. Ознакомиться с документацией по этому механизму можно здесь

Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("X-Accel-Redirect", ИмяФайла);
Ответ.Заголовки.Вставить("Content-Disposition", СтрШаблон("attachment; filename=""%1""", ИмяФайла));
Ответ.Заголовки.Вставить("Content-Type", "application/octet-stream");

Аналогичный инструмент существует для Apache (если вам не нужен reverse proxy) - mod_xsendfile, так же есть (вроде бы) модуль для IIS, но этот вопрос я не изучал, поэтому советовать ничего не буду.

 

PS: Не судите строго за не совсем ИС тематику публикации. Очень огорчает распространенное мнение, что 1С - это медленно, местячковый продукт для своих целей и своего рынка.

PPS: файл внешней обработки "выдирался" из конфигурации, возможно содержит ошибки.  Тестирование проводилось на конфигурации Менеджер сервиса 1.0.83.10. Если будут проблемы, с удовольствием помогу разобраться в комментариях и/или обновлениях статьи.

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

Наименование Файл Версия Размер
Обмен большими данными между клиентом и сервером:

.epf 13,20Kb
10
.epf 1.0 13,20Kb 10 Скачать

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. muskul 28.08.19 03:49 Сейчас в теме
Более интересно почему получается 4-х кратное увеличение размера
2. SlavaKron 28.08.19 07:53 Сейчас в теме
(1) Может поиому что это сериализованные данные. Однако не могу подтвердить 4-кратное превышение.
4. logos 206 28.08.19 08:55 Сейчас в теме
(2) А проверить никакой проблемы нет. Возьмите (или сгенерируйте) 3.5 Гб мусора (например) и попробуйте "ПоместитьВоВременноеХранилище". Пока крутится колесико, смотрите за остатком свободного места, можно ещё через монитор производительности смотреть в какие файлы в это время идёт запись на сервере предприятия.
3. logos 206 28.08.19 08:53 Сейчас в теме
(1) Там дело даже не в сериализации, как то совершенно бестолково наполняется параллельно несколько тмп файлов, каждый до полного размера передаваемых данных, потом производится копирование между ними, пока оно, наконец, не осядет в сеансовых данных. Вот на пике получается 4х-кратный размер.
5. markers 271 28.08.19 13:02 Сейчас в теме
Я вот только одно не понял, пока это всё качается, тонкий клиент висит же. Не проще Curl`ом качать? Получается асинхронно.
Для меня подобная тема актуальная, так как надо в некоторых магазинах качать начальные образа РИБа для этого магазина (Которые весят >5Gb) и качать самой 1С (Тонким клиентом) не возможно, так как клиент будет тупо висеть. По этому сделали загрузку Curl`ом, 1С просто запускает процесс скачивания с FTP который на сервере у нас лежит и не ждет скачки, только иногда проверяет, не скачался ли там файл
7. logos 206 28.08.19 14:13 Сейчас в теме
(5) Тонкий висит, веб не висит. xhr запросы выполняются асинхронно. В этом плане, как ни странно, веб клиент оказался гибче.
6. frkbvfnjh 729 28.08.19 13:47 Сейчас в теме
Прочел до половины и ничерта не понял. Что значит
В базе внедрена библиотека ПередачаДанных
? О чем вообще речь, что такое библиотека ПередачаДанных? Её нужно внедрять? Как ее внедрять? Нужен БСП или речь о технологии 1cFresh? Можно ли внедрить в не типовые конфигурации и без БСП? Вы бы хоть дали краткие данные, что нужно иметь, что бы это все заработало. Те кто понимает о чем речь, они наверное и так знают про все, о чем здесь написано, а для тех кто ни знает, даже не понятно с какой стороны к этому подойти.
8. logos 206 28.08.19 14:22 Сейчас в теме
(6) Действительно, отдельным пакетом передачу данных не публикуют. Библиотека входит в состав как БСП, так и БТС, которые доступны всем желающим (с подпиской ИТС) на релизах. Библиотека выделена в отдельную подсистему "Передача данных".
9. frkbvfnjh 729 29.08.19 05:37 Сейчас в теме
(8) Спасибо, теперь более понятно. Это пояснение не помешало бы в статье
10. logos 206 29.08.19 08:43 Сейчас в теме
11. frkbvfnjh 729 29.08.19 08:55 Сейчас в теме
12. o.nikolaev 208 29.08.19 09:37 Сейчас в теме
Отличная статья. Без воды и рассусоливаний, все по делу. Спасибо!
13. VKislitsin 894 29.08.19 14:33 Сейчас в теме
Спасибо. Очень интересные метод.
Что касается нескольких копий файлов, это происходит не только при работе с ВременнымХранилищем, но и при любом обмене между Клиентом и Сервером. Например, при загрузке из Конфигуратора файлов cf или dt, при получении данных формы (большого объема). Как минимум получается 2 "копии" файла, как максимум, 4.
14. Andrefan 02.09.19 09:45 Сейчас в теме
Спасибо, познавательно. Могли бы привести примеры необходимости передачи такого объема данных с к на с?
15. logos 206 02.09.19 14:54 Сейчас в теме
(14) В моём случае это была загрузка бэкапов локальной базы в облако.
16. ValeriVP 1254 09.09.19 14:13 Сейчас в теме
у меня вопросы.
1) Проблема передачи данных из памяти или файла с диска клиента?

Если из памяти:
2) откуда их столько???
3) если накопили все ж - почему не положить временно на диск?

Если файл:
4) чем не нравятся методы ПолучитьФайл и ПоместитьФайл?
17. logos 206 09.09.19 15:09 Сейчас в теме
(16)
1. Это не важно.
2. Соответственно пропускаем
3. Любая операция ввода-вывода - это время. Файл размером 8Гб копируется ощутимое время.
4. ПоместитьФайл считается синхронным вызовом, недоступен в вебклиенте.
Глобальный контекст (Global context)
НачатьПомещениеФайла (BeginPutFile)
Доступен, начиная с версии 8.3.13.
...поскипал...
Описание:
Начинает помещение файла из локальной файловой системы во временное хранилище.

Работает с временным хранилищем. Вы точно читали о чём статья? В первом разделе я описывал, почему мне не подходила работа с временным хранилищем:
1. Ограничение на размер порции данных
2. Нерациональное использование временных файлов.
18. pm74 221 31.01.20 08:22 Сейчас в теме
отлично , вчера как раз раз думал на тему передачи большого объема данных и тут ваша статья
жаль раньше ее не видел
19. Silenser 575 31.01.20 09:42 Сейчас в теме
А не проще разбить файл архиватором и передать частями?
20. logos 206 31.01.20 11:54 Сейчас в теме
(19) На момент создания этого решения разбиение файла на части архиватором в вебклиенте означало интерактивное подтверждение разрешения на запись в каждый файл многотомного архива. Так что, может и проще, но точно менее удобно.
22. Xershi 1388 01.02.20 22:48 Сейчас в теме
(20) сейчас уже для БП РФ нужна 8.3.15 минимум. А ваш момент это когда? Хорошо бы это отразить в статье, т.к. возможно в 8.3.18 метод устареет, а хранилище уменьшат в прожорстве. Кстати ТП по вопросу не писало чего?
23. logos 206 03.02.20 08:49 Сейчас в теме
(22) Писалось в 18 году, под 8.3.13. Работал в то время во фреше, поэтому пытался найти общий язык напрямую с разработчиками платформы. Как я понял, это проблема legacy кода, который написан чёрти когда и его боятся трогать. С тех пор, ситуация немного поправилась, но не полностью. В вебклиенте появилась возможность выбрать файл без установки расширения для работы с файлами.Основная проблема - это всё таки медленная работа ВХ. Какие бы быстрые диски не стояли в приёмнике, х4 - это всё таки х4. То есть скорость всё равно режется в 4 раза, по сравнению с тем, что может выдать диск.
21. tormozit 6872 31.01.20 21:39 Сейчас в теме
24. logos 206 03.02.20 08:51 Сейчас в теме
25. demetrius2003 01.12.20 12:47 Сейчас в теме
Ребята! Объясните валенку поподробнее пункт "как то находим наш идентификатор"? Так КАК его найти то? Я мозг сломал, чтоб понять как сделать правильный GET запрос вытягивающий, допустим, номенклатурную карточку! Кто сможет пнуть в нужном направлении? Заранее благодарю!
26. logos 206 01.12.20 13:06 Сейчас в теме
(25)
А у Вас файлы большие? На гигабайтных объемах через библиотеку скачивание работало плохо из-за того, что все прокси поочередно кэшировали этот файл, прежде чем отдать на загрузку
27. demetrius2003 01.12.20 13:26 Сейчас в теме
(26)
Нет. Вы не поняли. Размер вообще я пока не трогаю. Я не могу понять в принципе как вообще получить данные с сервера! Есть два подхода: Получение содержимого объектного хранилища (GET {{baseURL}}/storage/{Storage}/{ID}) и получение содержимого файлового хранилища (GET {{baseURL}}/volume/{VolumeID}/*). Но что в этих случаях есть Storage, ID, VolumeID и где их брать - абсолютно непонятно!
28. logos 206 01.12.20 14:07 Сейчас в теме
(27)
В общий модуль "ПередачаДанныхПереопределяемый" Вы добавляете свои описания логических и физических хранилищ. У меня там уже было определено логическое хранилище, поэтому я и не акцентировал на этом внимание. Код примерно такой:
Процедура МенеджерыЛогическихХранилищ(ВсеМенеджерыЛогическихХранилищ) Экспорт
	
	ВсеМенеджерыЛогическихХранилищ.Вставить("files", ЛогическоеХранилище);
	
КонецПроцедуры


Где Логическое хранилище - это общий модуль, который реализует некоторый интерфейс:
Функция Описание(ИдентификаторХранилища, ИдентификаторДанных) Экспорт
Функция Данные(ОписаниеДанных) Экспорт
Функция Загрузить(ОписаниеДанных) Экспорт
Процедура СохранитьДвоичныеДанные(Имя, ПолноеИмя, Идентификатор, СобытиеЖурнала = Неопределено) Экспорт


И на Ваш вопрос, как получить идентификатор. Если Вы работаете с логическим хранилищем files, Вы должны передать идентификатор файла из соответствующего поля справочника. Выбрать файл можно интерактивно на форме, например. Далее, Вы уже можете составить запрос get по шаблону ХранилищеИИдентификатор. Или аналогично описать менеджер физического хранилища и работать с ним. В типовых реализацию физического хранилища я не видел, видимо никто не заморочился.

Функция Описание(ИдентификаторХранилища, ИдентификаторДанных) Экспорт
	
	Результат = Неопределено;
	
	Если ИдентификаторХранилища = "files" Тогда
		
		Запрос = Новый Запрос(
		"ВЫБРАТЬ
		|	Файлы.Имя КАК Имя,
		|	Файлы.ПутьКФайлу КАК ПутьКФайлу,
		|	Файлы.Размер КАК Размер,
		|	Файлы.ТомНаДиске КАК ТомНаДиске,
		|	Файлы.ХранитьНаДиске КАК ХранитьНаДиске,
		|	ЕСТЬNULL(ВременныеФайлы.ИмяФайла, НЕОПРЕДЕЛЕНО) КАК ИмяВременногоФайла
		|ИЗ
		|	РегистрСведений.Файлы КАК Файлы
		|
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВременныеФайлы КАК ВременныеФайлы
		|		ПО (НЕ Файлы.ХранитьНаДиске)
		|			И Файлы.Идентификатор = ВременныеФайлы.Идентификатор
		|
		|ГДЕ
		|	Файлы.Идентификатор = &ИдентификаторФайла");
		
		Запрос.УстановитьПараметр("ИдентификаторФайла", Новый УникальныйИдентификатор(ИдентификаторДанных));
		
		УстановитьПривилегированныйРежим(Истина);
		РезультатЗапроса = Запрос.Выполнить();
		УстановитьПривилегированныйРежим(Ложь);
		
		Если НЕ РезультатЗапроса.Пустой() Тогда
			
			Выборка = РезультатЗапроса.Выбрать();
			Выборка.Следующий();
			
			Результат = Новый Структура;
			Результат.Вставить("ИмяФайла", Выборка.Имя);
			Результат.Вставить("Размер", Выборка.Размер);
			
			Если Выборка.ХранитьНаДиске Тогда
				
				Результат.Вставить("Данные", ФайловыеФункции.ПолныйПутьТома(Выборка.ТомНаДиске) + Выборка.ПутьКФайлу);
				
			ИначеЕсли ЗначениеЗаполнено(Выборка.ИмяВременногоФайла) Тогда
				
				РегистрыСведений.ВременныеФайлы.ПродлитьДействиеВременногоФайла(Выборка.ИмяВременногоФайла);
				Результат.Вставить("Данные", Выборка.ИмяВременногоФайла);
				
			Иначе
				
				УстановитьПривилегированныйРежим(Истина);
				
				ИдентификаторФайла = Новый УникальныйИдентификатор(ИдентификаторДанных);
				ИмяВременногоФайла = ПолучитьИмяВременногоФайла("dt");
				
				Запись = РегистрыСведений.Файлы.СоздатьМенеджерЗаписи();
				Запись.Идентификатор = ИдентификаторФайла;
				
				Запись.Прочитать();
				
				ЗаписьВременныйФайл = РегистрыСведений.ВременныеФайлы.СоздатьМенеджерЗаписи();
				ЗаписьВременныйФайл.ИмяФайла = ИмяВременногоФайла;
				ЗаписьВременныйФайл.Идентификатор = ИдентификаторФайла;
				ЗаписьВременныйФайл.Записать();
				
				Запись.Файл.Получить().Записать(ИмяВременногоФайла);
				Результат.Вставить("Данные", ИмяВременногоФайла);
				
				УстановитьПривилегированныйРежим(Ложь);
				
			КонецЕсли;
			
		Иначе
			
			ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Файл с идентификатором %1 не найден.'"), ИдентификаторДанных));
			
		КонецЕсли;
		
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

Показать
29. demetrius2003 01.12.20 16:47 Сейчас в теме
Большое спасибо за ответ. Но, к сожалению, я ничего не понял! Вот есть где-то там Бухгалтерия. Обращаясь запросами (прям в браузере!) к Бухгалтерии я получаю данные. Запросы выглядят как .../base1/hs/dt/storage/... Как правильно строить эти GET запросы? У меня нету никакого общего модуля. У меня нету никаких функций. У меня даже нету 1С. Но есть браузер, могущий в GET запросы прямо в адресной строке. И есть примеры в интернете, которые даже работают. Но как самому узнать, что есть что и как оно должно стоять после /base1/hs/dt/storage/??? Где вы берёте эту информацию?
30. logos 206 01.12.20 17:48 Сейчас в теме
(29)
К сожалению, никак. Данная подсистема - это каркас для разработки, как на стороне клиента, так и на стороне сервера. В моём случае, была реализация логического хранилища в конфигурации "менеджера сервиса" от 1с фреш. В случае с бухгалтерией Вам нужно реализовать интерфейс логического или физического хранилища. Вот код общего модуля целиком:
#Область ПрограммныйИнтерфейс

Функция Описание(ИдентификаторХранилища, ИдентификаторДанных) Экспорт
	
	Результат = Неопределено;
	
	Если ИдентификаторХранилища = "files" Тогда
		
		Запрос = Новый Запрос(
		"ВЫБРАТЬ
		|	Файлы.Имя КАК Имя,
		|	Файлы.ПутьКФайлу КАК ПутьКФайлу,
		|	Файлы.Размер КАК Размер,
		|	Файлы.ТомНаДиске КАК ТомНаДиске,
		|	Файлы.ХранитьНаДиске КАК ХранитьНаДиске,
		|	ЕСТЬNULL(ВременныеФайлы.ИмяФайла, НЕОПРЕДЕЛЕНО) КАК ИмяВременногоФайла
		|ИЗ
		|	РегистрСведений.Файлы КАК Файлы
		|
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВременныеФайлы КАК ВременныеФайлы
		|		ПО (НЕ Файлы.ХранитьНаДиске)
		|			И Файлы.Идентификатор = ВременныеФайлы.Идентификатор
		|
		|ГДЕ
		|	Файлы.Идентификатор = &ИдентификаторФайла");
		
		Запрос.УстановитьПараметр("ИдентификаторФайла", Новый УникальныйИдентификатор(ИдентификаторДанных));
		
		УстановитьПривилегированныйРежим(Истина);
		РезультатЗапроса = Запрос.Выполнить();
		УстановитьПривилегированныйРежим(Ложь);
		
		Если НЕ РезультатЗапроса.Пустой() Тогда
			
			Выборка = РезультатЗапроса.Выбрать();
			Выборка.Следующий();
			
			Результат = Новый Структура;
			Результат.Вставить("ИмяФайла", Выборка.Имя);
			Результат.Вставить("Размер", Выборка.Размер);
			
			Если Выборка.ХранитьНаДиске Тогда
				
				Результат.Вставить("Данные", ФайловыеФункции.ПолныйПутьТома(Выборка.ТомНаДиске) + Выборка.ПутьКФайлу);
				
			ИначеЕсли ЗначениеЗаполнено(Выборка.ИмяВременногоФайла) Тогда
				
				РегистрыСведений.ВременныеФайлы.ПродлитьДействиеВременногоФайла(Выборка.ИмяВременногоФайла);
				Результат.Вставить("Данные", Выборка.ИмяВременногоФайла);
				
			Иначе
				
				УстановитьПривилегированныйРежим(Истина);
				
				ИдентификаторФайла = Новый УникальныйИдентификатор(ИдентификаторДанных);
				ИмяВременногоФайла = ПолучитьИмяВременногоФайла("dt");
				
				Запись = РегистрыСведений.Файлы.СоздатьМенеджерЗаписи();
				Запись.Идентификатор = ИдентификаторФайла;
				
				Запись.Прочитать();
				
				ЗаписьВременныйФайл = РегистрыСведений.ВременныеФайлы.СоздатьМенеджерЗаписи();
				ЗаписьВременныйФайл.ИмяФайла = ИмяВременногоФайла;
				ЗаписьВременныйФайл.Идентификатор = ИдентификаторФайла;
				ЗаписьВременныйФайл.Записать();
				
				Запись.Файл.Получить().Записать(ИмяВременногоФайла);
				Результат.Вставить("Данные", ИмяВременногоФайла);
				
				УстановитьПривилегированныйРежим(Ложь);
				
			КонецЕсли;
			
		Иначе
			
			ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Файл с идентификатором %1 не найден.'"), ИдентификаторДанных));
			
		КонецЕсли;
		
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

Функция Данные(ОписаниеДанных) Экспорт
	
	Возврат ОписаниеДанных.Данные;
	
КонецФункции

Функция Загрузить(ОписаниеДанных) Экспорт
	
	Идентификатор = Новый УникальныйИдентификатор;
	
	Если ОписаниеДанных.Размер < ФайлыМС.МаксРазмерСинхроннойОбработки() Тогда
		
		СохранитьДвоичныеДанные(ОписаниеДанных.ИмяФайла, ОписаниеДанных.Данные, Идентификатор);
		
	Иначе
		
		ПараметрыМетода = Новый Массив;
		ПараметрыМетода.Добавить(ОписаниеДанных.ИмяФайла);
		ПараметрыМетода.Добавить(ОписаниеДанных.Данные);
		ПараметрыМетода.Добавить(Идентификатор);
		
		ПараметрыЗадания = Новый Структура;
		ПараметрыЗадания.Вставить("ИмяМетода", "ЛогическоеХранилище.СохранитьДвоичныеДанные");
		ПараметрыЗадания.Вставить("Параметры", ПараметрыМетода);
		ПараметрыЗадания.Вставить("ЭксклюзивноеВыполнение", Истина);
		
		УстановитьПривилегированныйРежим(Истина);
		ОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания);
		УстановитьПривилегированныйРежим(Ложь);
	
	КонецЕсли;
	
	ОписаниеДанных.УдалитьФайлДанных = Ложь;
	
	Возврат Строка(Идентификатор);
	
КонецФункции

#КонецОбласти

#Область СлужебныйПрограммныйИнтерфейс

Процедура СохранитьДвоичныеДанные(Имя, ПолноеИмя, Идентификатор, СобытиеЖурнала = Неопределено) Экспорт
	
	Попытка
		
		ФайлыМС.СохранитьДвоичныеДанные(Имя,, ПолноеИмя,, Идентификатор);
		
	Исключение
		
		Попытка
			
			УдалитьФайлы(ПолноеИмя);
			
		Исключение
			
			Если СобытиеЖурнала = Неопределено Тогда
				СобытиеЖурнала = НСтр("ru = 'ЛогическоеХранилище'");
			КонецЕсли;
			ЗаписьЖурналаРегистрации(СобытиеЖурнала, УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
			
		КонецПопытки;
		
		ВызватьИсключение;
		
	КонецПопытки;
	
	Попытка
		
		УдалитьФайлы(ПолноеИмя);
		
	Исключение
		
		Если СобытиеЖурнала = Неопределено Тогда
			СобытиеЖурнала = НСтр("ru = 'ЛогическоеХранилище'");
		КонецЕсли;
		ЗаписьЖурналаРегистрации(СобытиеЖурнала, УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
		
	КонецПопытки;
	
КонецПроцедуры

#КонецОбласти
Показать


Конкретную реализацию для бухгалтерии я Вам не дам, потому что там совершенно другая система тех же файлов, для каждого объекта свои "ПрисоединенныеФайлы" свой справочник файлов.
А ссылку для браузера Вы формируете на стороне сервера. Т.е. Вы сами задаёте на сервере значения параметров из "/storage/{Storage}/{ID}", а потом, когда браузер обращается по этому URL, Вы же описываете что делать с этими параметрами.
Например, для бухгалтерии, Вы можете закодировать в {storage} тип справочника файла, а в {ID} его уникальный идентификатор. А в логическом хранилище уже разрулить запрос получения данных по этим параметрам.
31. demetrius2003 01.12.20 19:38 Сейчас в теме
Уф! Спасибо вам, что уделили мне внимание. Только говорим мы о совершенно разных вещах. На стороне сервера мне не надо делать абсолютно ничего. По крайней мене я это делать не хочу. И я почему-то надеюсь, что там хотя бы какой-то минимум уже сделан. Повсеместно я встречаю примеры типа:

И он по мнению написавшего его корректно возвращает данные. Но видимо пример был написан при Брежневе. Моя же бухгалтерия возвращает мне:
{
"odata.error": {
"code": "8",
"message": {
"lang": "ru",
"value": "Сущность 'Catalog_БанковскиеСчета' не найдена"
}
}
}
Показать

Есть примеры и не для ODATA, а для REST /storage/{Storage}/{ID}. Но они так же нихрена не работают! Посему я робко предположил, что достаточно добыть актуальную информацию о формировании запроса клиентом без необходимости залазить в серверные дебри. Но похоже таких ништяков 1С ещё не завезла в свои продукты.
32. demetrius2003 01.12.20 20:20 Сейчас в теме
Уважаемый! Спасибо огромное! У меня всё получилось! Именно благодаря тому, что Ваша статья направила меня в нужное русло))
33. Gendelf 24.05.23 15:43 Сейчас в теме
(32) Подскажите пару примеров для получения справочников? И обновления их...
Оставьте свое сообщение

См. также

Перенос данных из Парус 8 в ЗГУ ред.3

Зарплата Внешние источники данных Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 8 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

84000 руб.

19.08.2020    18380    13    0    

15

Перенос данных из Парус 10 в ЗГУ ред.3

Зарплата Внешние источники данных Кадровый учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    6117    3    8    

5

Автоматическая многопоточная выгрузка данных 1С 8.3 в БД Clickhouse (для работы с данными 1С в BI-системах)

Внешние источники данных Платформа 1С v8.3 Управляемые формы Анализ и прогнозирование Конфигурации 1cv8 Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматизированной выгрузки данных из 1С 8.3 в базу данных ClickHouse для работы с данными 1С в Yandex Datalens, Apache Superset (и не только) - "Экстрактор данных 1С в BI". Решение отлично работает со всеми типовыми (и не только) конфигурациями 1С 8.3 для управляемых форм. Gозволяет автоматизировать работу бизнес-аналитика по ежедневной выгрузке данных из 1С в БД ClickHouse для последующей работы с этой БД в Yandex Datalens/ Система полностью автоматизирует работу с хранилищем данных в БД Clickhouse. Не надо быть программистом, чтобы одной кнопкой получать любые данные из 1С в Yandex Datalens

84000 руб.

15.11.2022    7089    4    23    

13

Перенос начальных остатков из Парус 7.71 в БГУ

Внешние источники данных Взаиморасчеты Учет ОС и НМА Учет ТМЦ Бюджетный учет Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия государственного учреждения Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Перенос словарей и начальных остатков из ПП Парус-Бухгалтерия Бюджет 7.71 в 1Сv8 БГУ2. Заполнение словарей и документов по вводу начальных остатков. Не требуется установка ПП Парус7. Возможна дозагрузка. Внешняя обработка с открытым кодом.

9000 руб.

08.12.2011    77477    116    120    

137

Перенос данных из Парус 7.хх в ЗГУ ред.3

Внешние источники данных Зарплата Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 7.хх учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

24000 руб.

24.04.2017    44714    88    147    

80

Перенос данных из Парус 10 (Торнадо) в ЗГУ ред.3 через Excel

Внешние источники данных Загрузка и выгрузка в Excel Зарплата Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате из Парус 10(Торнадо) учреждений через файлы Excel в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ). В принципе, обработка может быть использована для загрузки из файлов Excel, полученных из любых информационных систем.

24000 руб.

16.11.2018    27398    16    29    

17

Обмен с СУФД (Федеральным казначейством) для Бухгалтерии предприятия 3.0

Внешние источники данных Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Комплект обработок для обмена СУФД и Бухгалтерии 3.0. Содержит две обработки: для переноса платежных поручений из БП 3.0 в СУФД Федерального казначейства и загрузки выписок из СУФД в БП 3.0.

2400 руб.

30.03.2023    3967    6    0    

9

Загрузка данных из F3 TAIL 3 (еФарма 2) в 1С: Бухгалтерия 3.0 (базовая, ПРОФ, КОРП)

Розничная торговля Внешние источники данных Файловый обмен (TXT, XML, DBF), FTP Бухгалтерский учет 1С:Бухгалтерия 3.0 Фармацевтика, аптеки Россия Бухгалтерский учет Платные (руб)

Внешняя обработка загрузки данных из файла-выгрузки, сформированного в программе F3 TAIL версии 3.4 (и выше) или еФарма версии 2.1, в базу конфигурации 1С: Бухгалтерия предприятия 8, ред. 3.0 (базовая, ПРОФ, КОРП).

13200 руб.

19.12.2016    41254    76    101    

62

Загрузка спецификаций в УНФ из системы Базис-мебельщик

Производство готовой продукции (работ, услуг) Внешние источники данных Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 Лесное и деревообрабатывающее хозяйство Россия Управленческий учет Платные (руб)

Обработка предназначена для загрузки файлов, выгруженных из системы Базис-мебельщик, в справочник "Спецификации" для последующих процессов учета и диспетчирования полуфабрикатов и изделий.

6000 руб.

24.06.2021    16091    42    36    

18

Загрузка в БГУ из УРМ "Криста"

Внешние источники данных Банковские операции Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия государственного учреждения Россия Бухгалтерский учет Платные (руб)

Обработки для загрузки данных из УРМ "Криста" в бухгалтерию государственного учреждения редакция 2.0. Обработка условно-бесплатная - бесплатно в течение одного месяца со дня получения демонстрационного ключа регистрации. Поддерживает ПО "Web-исполнение" от НПО "Криста".

4800 руб.

19.06.2013    35793    133    83    

29

Интегрируй это

Внешние источники данных Бесплатно (free)

В последнее десятилетие выросла популярность no-code и low-code систем. Мобильные и простые десктоп-приложения можно создавать практически без строчки кода. О том, как строить интеграционные контуры для 1С-решений с помощью платформ n8n.io и WSO2, на конференции Infostart Event 2021 Moscow Premiere рассказал Вадим Фоминых.

22.05.2023    3033    Shmell    6    

37

Распознавание паспорта РФ. Python+1С без сторонних сервисов

Внешние источники данных Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

В данной публикации мы рассмотрим методы разработки приложений на Python + 1С для распознавания Паспорта РФ.

1 стартмани

30.01.2023    8271    42    Indgo    34    

87

Выгрузка журнала регистрации 1С в ClickHouse с помощью Vector

Журнал регистрации Внешние источники данных Абонемент ($m)

Данное решение предназначено для выгрузки журнала регистрации из 1С 8.2 - 8.3 (формат журнала LGF/LGP) в ClickHouse. Одной из отличительных особенностей данного решения является возможность подключения экспортера ЖР к системам мониторинга.

1 стартмани

10.11.2022    6704    33    axilab    17    

54

#KafkaЭтоПросто: Kafka Adapter 1С (Confluent) - отправляем сообщения

Инструментарий разработчика Внешние источники данных WEB-интеграция Платформа 1С v8.3 Абонемент ($m)

Сегодня поднимем в docker kafka с confluent'om, а в 1С, в EDT загрузим проект из репозитория, создадим обработку, в которой несколькими строчками отправим сообщение в kafka через rest proxy и в confluent control center посмотрим на него. Если коротко, то: как отправить сообщение в Kafka несколькими строчками кода без компонент, регистраций и смс.

5 стартмани

24.07.2022    10405    21    huxuxuya    29    

79

Консоль запросов SQL (управляемые формы)

Инструменты администратора БД Инструментарий разработчика Внешние источники данных Запросы Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Иногда требуется подключиться к другим базам данных для обменов, например: MySQL (сайты, интернет магазины), MS SQL, PostgreSQL (базы данных такие как 1С, WMS, других приложений) и т.д. Данная консоль поможет настроить и проверить подключение, выполнить любые запросы на языке SQL, а также если подключить обработку в конфигуратор использовать для обменов между базами данных с помощью языка SQL.

2 стартмани

04.05.2022    7600    39    nikolasx    12    

28

Консоль обмена по протоколу TCP

Внешние источники данных Обмен между базами 1C Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Внешняя консоль-обработка, позволяющая осуществить обмен пакетами данных между любыми приложениями или устройствами по сетевому протоколу TCP. Консоль работает как в режиме TCP-клиента, так и в режиме TCP-сервера. Реализована с использованием стандартной библиотеки Windows "MS Winsock".

3 стартмани

10.04.2022    8923    35    Bassgood    15    

45

Интеграция 1С и OTRS: Синхронизация заметок тикетов

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

Внешняя обработка для интеграции 1С с системой обработки заявок OTRS. Предназначена для обмена информацией о заявках, позволяет создавать тикеты и заметки из 1С, загружать заметки (элементы тикетов, заявок) из OTRS в электронные письма. Использует API, предоставленный OTRS. Обмен работает как регламентное задание. Разработан на базе УТ 11.4 и OTRS 5s free.

6 стартмани

18.11.2021    6872    12    tps_01    0    

3

Практика OData. Пишем проводник по данным

Внешние источники данных Платформа 1С v8.3 Платформа 1C v8.2 Конфигурации 1cv8 Абонемент ($m)

Специалисты, начиная работать с OData, сталкиваются с трудностями с первых шагов - не очевидно какие именно данные может дать источник и какие механики доступны для формирования выборок данных. Так возникла идея написать обработку, которая позволяет проанализировать структуру и содержимое источника OData, а так же станет примером кода для всех тех, кто делает свою интеграцию на платформе 1С:Предприятие 8.

3 стартмани

11.10.2021    9175    28    Dementor    7    

32

Перенос данных из Парус 7.хх в ЗУП ред.3

Зарплата Внешние источники данных Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ ФОМС, ЕФС Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 7.хх организаций в конфигурацию 1С:Зарплата и управление персоналом, ред. 3 (ЗУП) и начать с ней работать с любого месяца года.

24000 руб.

07.06.2021    12134    1    13    

2

Перенос данных из Парус 8 в ЗУП ред.3

Зарплата Внешние источники данных Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 8 организаций в конфигурацию 1С:Зарплата и управление персоналом, ред. 3 (ЗУП) и начать с ней работать с любого месяца года.

84000 руб.

07.06.2021    10897    0    0    

1

ВИДы на жительство. Использование внешних источников данных в прикладных задачах

Внешние источники данных Платформа 1С v8.3 Бесплатно (free)

На Infostart Meetup Novosibirsk выступил ведущий разработчик МКК «Ваш Инвестор» Вадим Фоминых. Он на практических примерах показал коллегам, как его команда использует внешние источники данных в прикладных задачах, призвал не отказываться от этого инструмента и объяснил – почему.

19.04.2021    3779    Shmell    5    

30

Правила обмена больше не нужны

Внешние источники данных Обмен между базами 1C WEB-интеграция Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Бесплатно (free)

Есть несколько общепринятых подходов к написанию обмена между 1С-системами, каждый из которых упирается в длительное изучение технологии, мучительную отладку правил конвертации и написание большого количества сервисного кода, в котором потом тяжело разобраться. О принципах работы универсального фреймворка liteExchange, который реализует быстрые обмены между 1С и внешними системами, и берет на себя всю техническую обвязку по стандартному преобразованию данных, на INFOSTART MEETUP Saint Petersburg.Online рассказал Николай Крылов.

17.03.2021    19865    Nikola23    41    

80

Работа с Ворд через СОМ-Объект

Внешние источники данных Платформа 1С v8.3 Бесплатно (free)

Статья представляет собой еще один велосипед на тему формирования документов на основе шаблонов через СОМ-Объект. Как и все другие велосипеды, этот написан потому, что другие велосипеды - плохие. В действительности, если погуглить, мы получим огромное количество ссылок на советы в стиле "сделай так и будет тебе счастье". Но почему "так", зачем "так", какие есть альтернативы - авторы советов не раскрывают. Хуже того, половина найденных таким способом рецептов окажутся откровенно вредными. Судя по тому, как вредные рецепты копируются из совета в совет, большинство разработчиков, из тех, что переписываются на форумах, просто воспроизводят то, что когда-то нагуглили сами. Ну да, работает - не трогай :-)

15.02.2021    23922    Sindbad_M    36    

70

DaJet Exchange: обмен данными с 1С (часть 1)

Внешние источники данных Платформа 1С v8.3 Бесплатно (free)

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

11.01.2021    6257    zhichkin    14    

36

Учим Лайку новым трюкам: заказы с предоплатами, выгрузка накладных из 1С

Банковские операции Кассовые операции Учет доходов и расходов Розничная торговля Внешние источники данных Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Рестораны, кафе и фаст-фуд Управленческий учет Платные (руб)

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

14400 руб.

15.10.2020    21836    2    5    

5

Перенос остатков и оборотов из КЛОТО в "1С:Зарплата и кадры государственного учреждения 3.1"

Зарплата Внешние источники данных Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры бюджетного учреждения Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Перенос из КЛОТО в ЗГУ 3.1. Программный продукт КЛОТО очень распространен на территории Тверской области в силу своей простоты и относительной дешевизны. Данным программным продуктом активно пользуются учреждения организационно-правовой формы МДОУ, ФКУ и прочие.

216000 руб.

05.10.2020    12162    1    0    

2

Улучшенная обработка универсального обмена данными в формате XML (УФ)

Универсальные обработки Внешние источники данных Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Улучшенная обработка "Универсальный обмен данными" с полноценными возможностями СКД для выборки данных (не только для отборов).

1 стартмани

23.06.2020    24194    213    Lem0n    1    

74

Импорт розничных продаж из АСУ "Топаз-АЗС" в 1С:Бухгалтерию предприятия 3.0

Внешние источники данных Розничная торговля Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Данная обработка предназначена для импорта данных по продаже топлива из АСУ "Топаз-АЗС" в 1С:Бухгалтерия предприятия 3.0 (Версия формата данных 3.15)

4000 руб.

13.05.2020    14230    15    18    

13

Как мы загружаем данные в "Центр управления кассами Магнита"

Внешние источники данных Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Статья о том, как мы делали механизм загрузки больших объемов данных в "Центр управления кассами Магнита"

08.05.2020    6906    chernenko_vv    26    

43

Синхронизация БИТ:СКУД 8 с Parsec.Net 2.5

Внешние источники данных Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Настройка синхронизации БИТ:СКУД 8 с Parsec.Net.2.5, выгрузка данных из внешней системы контроля доступа.

04.05.2020    5986    RPGrigorev    0    

66

Импорт документов из розничной программы учета (ТрейдФарм, Манускрипт Солюшн, Е-Фарма и др.) в Бухгалтерию 3.0 с формированием книги учета доходов и расходов при УСН и бухгалтерского и налогового учета при ОСНО

Розничная торговля Внешние источники данных Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Фармацевтика, аптеки Россия Бухгалтерский учет Налоговый учет Платные (руб)

Представлена обработка для импорта документов из розничной программы учета товара в торговых точках и аптеках, необходимых для ведения бухгалтерского и налогового учёта, в Бухгалтерию 3.0. При загрузке данных в бухгалтерию переносятся документы поступлений, реализации, возвратов и перемещений в торговых точках и формируются все бухгалтерские и налоговые отчеты с учетом этих документов для любой системы налогообложения. Обработка позволяет загрузить данные из ПО ТрейдФарм. Имеются варианты для других розничных программ (ПО Manuscript Solution, Е-Фарма и S-Market).

14400 руб.

09.04.2020    16068    9    8    

5

Гарантированный обмен 1С с внешними системами через сервер очередей Microsoft MSMQ

Внешние источники данных Бесплатно (free)

Описание решения задачи организации обмена 1С с внешними системами с условием гарантированной доставки сообщений и независимой поддержкой архивов сообщений. Быстрый ответ: сервер очередей Microsoft MSMQ.

09.02.2020    10710    da_1c    12    

83

Google drive - менеджер файлов

WEB-интеграция Внешние источники данных Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Синхронизация с гугл диском легко и просто!

10 стартмани

05.12.2019    34652    49    zykov_vitaliy    28    

45