Loginchev Anton

211
Рейтинг

logos



  •   Регистрация: 28.10.2009 (14 лет назад)

  •   Был(а) на сайте: 03.04.2024

Друзья
  • Всеволод Соковиков
  • Андрей Селиванов
  • Сергей Мельник
  • Андрей Хорошев
  • Дмитрий Малышев
  • Евгений Комиссаров
  • murad novruzov
  • Андрей Волин
  • Сергей Н
Подписчики 11

Группы

Профессиональный разработчик

IE 2016 Участник

IE 2019 Участник

Рейтинг 211

Обработка перенаправлений 3xx (HTTP Redirect) средствами 1С

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

Статья описывает способ обработки HTTP ответов с кодом 3хх, говорящих о том, что целевой ресурс переехал по другому адресу.

1 стартмани

11.11.2020    7106    4    logos    6       

12

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

Статья Программист Платформа 1С v8.3 Абонемент ($m) Внешняя обработка (ert,epf) Внешние источники данных

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

1 стартмани

27.08.2019    21762    11    logos    33       

114

Алгоритм определения вхождения точки в полигон

Статья Программист Платформа 1С v8.3 Абонемент ($m) Внешняя обработка (ert,epf) Математика и алгоритмы

Нередко встает необходимость ведения аналитики по территориальному признаку. Вручную, человеческими руками определить к какому региону относится контрагент, адрес доставки, розничная точка или ещё что-либо проблем не составляет. А если этих точек необходимо обрабатывать 500 в день или даже больше? Задача становится трудоемкой и её решение таким образом не рационально. Можно ли это сделать автоматически?

1 стартмани

28.11.2012    29025    53    logos    29       

47

Пример интерактивной работы с картами Google.

Инструменты и обработки Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m) Конфигурация (md, cf) WEB-интеграция Работа с интерфейсом

В этой публикации приведен пример, как можно взаимодействовать с Google Maps API, интерактивно создавать и редактировать объекты карты, обрабатывать события объектов карты.

1 стартмани

16.10.2012    22647    195    logos    26       

28

Комментарии

ОбменНормализуем Excel средствами Python для Построителя запросов 1С#18 01.06.23 10:27
(17)
Ок, какая то часть разбора формата ooxml (небольшая) в этой публикации описана. Если реализованные возможности удовлетворяют - слава богу. Я же говорил об универсальном решении, которое позволяет сделать свой офис с шарадами и флейтистками.
ОбменНормализуем Excel средствами Python для Построителя запросов 1С#14 01.06.23 9:23
(13)
(4)
Поясню свою точку зрения. OpenXML SDK - решение полнофункциональное. Все решения на питоне, го и ежи с ними - всего лишь прокладка, реализующая функции из этой библиотеки. Эксель ладно, с некоторыми ограничениями можно открыть как табличный документ. А, если нужно, например, что то нетривиальное с вордом? Мне однажды потребовалось в docx вставлять штрихкод в колонтитул. Причём docx был произвольный, не по шаблону. Пришлось разбираться с SDK
ОбменНормализуем Excel средствами Python для Построителя запросов 1С#1 30.05.23 11:51
А ведь можно было написать ВК, через OpenXML SDK сделать всё то же самое и не заморачиваться с экзешниками в макетах :)
ОбменХранилище значений в ZIP на чистом SQL#3 22.12.22 16:46
Дефакто что в "платформенном" сценарии получается blob из бд, к которому применяется deflate, что в Вашем. Понимаю, это ненормальное программирование, но профит просматриваю с трудом.
ОбменХранилище значений в ZIP на чистом SQL#1 22.12.22 16:02
Это, конечно, скучно, но у хранилища значения есть возможность сжимать хранимые данные. Используется алгоритм inflate (по сути тот же zip):
ХранилищеЗначения (ValueStorage)
На основании значения
Синтаксис:
Новый ХранилищеЗначения(<Значение>, <АлгоритмСжатияДанных>)
Параметры:
<Значение> (обязательный)
Тип: Произвольный.
Значение, которое должно быть помещено в хранилище.
<АлгоритмСжатияДанных> (необязательный)
Тип: СжатиеДанных.
Задает степень сжатия данных.
Если параметр не установлен, сжатие не используется.

В этом случае двоичные данные можно было перенести в другую таблицу просто с помощью insert into.
Ну или я задачу, которую нужно решить, не до конца понимаю
ОбменОбработка перенаправлений 3xx (HTTP Redirect) средствами 1С#6 11.08.22 13:57
(5) Так когда завезли и когда это было писано
ОбменИнтеграция 1С и Slack (slack.com) с помощью API#6 05.09.21 13:10
Проверил и способ с передачей параметров в json, Тоже работает:
curl --location --request POST 'https://slack.com/api/chat.postMessage' \
--header 'Authorization: Bearer токен \
--header 'Content-Type: application/json' \
--data-raw '{"channel": "Dличный канал", "text": "ping"}'
ОбменИнтеграция 1С и Slack (slack.com) с помощью API#5 05.09.21 13:07
Можно для небольших сообщений пользоваться параметрами url.
https://slack.com/api/chat.postMessage?channel=D01XXXX&text=ping&pretty=1

Authorization: Bearer token
ОбменИнтеграция 1С и Slack (slack.com) с помощью API#3 01.09.21 11:08
А запрос покажите, какой отправляете
ОбменОбмен большими данными между клиентом и сервером#30 01.12.20 17:48
(29)
К сожалению, никак. Данная подсистема - это каркас для разработки, как на стороне клиента, так и на стороне сервера. В моём случае, была реализация логического хранилища в конфигурации "менеджера сервиса" от 1с фреш. В случае с бухгалтерией Вам нужно реализовать интерфейс логического или физического хранилища. Вот код общего модуля целиком:
Код
#Область ПрограммныйИнтерфейс

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

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

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

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

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

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

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


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