Имя: Пароль:
1C
 
Как поступить при долгом http сеансе?
↓Ø (Волшебник 01.08.2025 09:09)
0 program345
 
29.07.25
13:39
Привет! Мне по http cервису прилетает xml на 3 мегабайта в теле, и в 1с формирую множество документов в транзакции, отправитель просит отправить ему подтверждение 200 о получении и дальше обрабатывать этот файл чтобы ему не висеть в сеансе http час. Если сделаю возврат то потеряю доступ к файлу, остается только сохранить файл, отправить подтверждение 200 отправителю и потом его обрабатывать или есть еще предложения?

Функция httpОбработчик(Запрос) Экспорт
    
    ЧтениеXML = Новый ЧтениеXML;
    
    СтрXML = Запрос.ПолучитьТелоКакСтроку();
    ЧтениеXML.УстановитьСтроку(СтрXML);
    
    ЭлементыXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
        //обычно тут формирую кипу документов

    Результат = Новый HTTPСервисОтвет(200)
    Возврат Результат;

КонецФункции;
1 mikecool
 
29.07.25
13:42
тебе разрешение выписать? именно так и надо делать
2 mikecool
 
29.07.25
13:42
про очереди слышал?
3 Волшебник
 
29.07.25
13:43
httpОбработчик - плохое имя обработчика
4 Волшебник
 
29.07.25
13:51
(0) В ответ надо выдать номер задачи, по которому вызывающая сторона сможет уточнить статус обработки и получить итог с расшифровкой по элементам.
5 Волшебник
 
29.07.25
13:53
(0) Можно запустить фоновое задание и далее сразу вернуть ответ 200 и ID задания. При завершении фонового задания результат положить в регистр сведений. Другой веб-сервис по ID задания ищет его среди запущенных или в регистре сведений.
6 program345
 
29.07.25
13:57
(2) не, не слыхал.
7 mikecool
 
29.07.25
14:24
предложение есть - сделай, чтобы твой код отработал за доли секунды и отправь ответ 200
8 program345
 
29.07.25
14:37
изначально хотел асинхронно выполнить, но потом вижу что Асинх
Модификатор применим только к процедуре, выполняемой на клиенте. А я на сервере.
9 Волшебник
 
29.07.25
14:39
(8) Запускайте фоновое задание, оно асинхронное
10 Бычье сердце
 
29.07.25
14:48
(0)
"остается только сохранить файл, отправить подтверждение 200"
Лучше тут ничего не придумать. Складывайте файлы в отдельный каталог, а дальше регламентом загружайте документы из этого каталога.
11 timurhv
 
29.07.25
14:48
Фоновые не гарантируют запись объектов. Службу сервера 1С могут в момент транзакции остановить для обновления платформы или еще чего.
Пишите в регистр сведений, потом разбирайте. Можете оставлять записи в течение 7 дней для разбора инцидентов, старше - удалять.
12 Бычье сердце
 
29.07.25
14:50
(10)
+
Подойдет даже, если прилетает множество файлов
13 program345
 
29.07.25
15:25
(11) а разбирать из регистра то все равно регламентным придется? или я вас не понял.

Если я буду считывать файл из каталога регламентным заданием, в транзакции записывать документы и после транзакции Удалять его если нет ошибок какие тогда проблемы могут случиться если остановят Службу сервера 1С?
14 Волшебник
 
29.07.25
15:40
(13) Наверняка Вы накосячите в алгоритме, а исходный файл уже будет удалён
15 program345
 
31.07.25
09:56
(11) создал регистр сведений, в строковый реквизит неограниченной длины пишу xml. Или лучше в хранилище значения пулять?
16 Волшебник
 
31.07.25
10:00
(15) Лучше в хранилище значения со сжатием данных
17 OldCondom
 
31.07.25
10:06
Я бы файлы живые тоже оставлял параллельно. Хранение таких логов может выйти боком потом(забитый регистр/долго извлекать для анализа и т.д.) +файлы запишутся даже при отвалившейся транзакции.
18 Мультук
 
гуру
31.07.25
10:20
(17)

1) Откуда транзакция в "httpОбработчик" ?
2) Нет файла. Есть

СтрXML = Запрос.ПолучитьТелоКакСтроку();


3) Это не столько регистр логов, скорее это регистр очереди
4) Автору никто не мешает СРАЗУ написать механизм,
который будет автоочищать этот регистр автоматически или писать письма счастья в случае проблем
19 OldCondom
 
31.07.25
10:23
(18) сам тс написал в (0) написал.
Плюс работал в компании, где в регистре просто логи хранили и небольшие кусочки json. В итоге все встало таким раком, что пришлось изобретать велосипед на ЖР(чтобы перейти на файловое хранение).
20 program345
 
31.07.25
13:06
(18) да, сразу чищу все записи регистра старше 2 недель.

	ЗапросОчисткаРС = Новый Запрос;
	ЗапросОчисткаРС.Текст = 
	"ВЫБРАТЬ
	|	ХранилищеXML.Период КАК Период,
	|	ХранилищеXML.ID КАК ID,
	|	ХранилищеXML.XML КАК XML,
	|	ХранилищеXML.НачалиОбрабатывать КАК НачалиОбрабатывать,
	|	ХранилищеXML.ДатаВремяНачалаОбработки КАК ДатаВремяНачалаОбработки,
	|	ХранилищеXML.УспешноОбработано КАК УспешноОбработано,
	|	ХранилищеXML.ОбщаяСумма КАК ОбщаяСумма,
	|	ХранилищеXML.Комментарий КАК Комментарий
	|ИЗ
	|	РегистрСведений.ХранилищеXML КАК ХранилищеXML
	|ГДЕ
	|	ХранилищеXML.Период < &Период";
	
	ЗапросОчисткаРС.УстановитьПараметр("Период",ТекущаяДата()-60*60*24*14);  	
	РезультатЗапроса = ЗапросОчисткаРС.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		Запись = РегистрыСведений.ХранилищеXML.СоздатьМенеджерЗаписи();
		ЗаполнитьЗначенияСвойств(Запись, ВыборкаДетальныеЗаписи);
		Запись.Прочитать();
		Запись.Удалить();	
	КонецЦикла;
21 Мультук
 
гуру
31.07.25
13:15
(20)

ХранилищеXML

Сейчас придёт Волшебник и скажет
а) Почему у этого имени нет префикса
б) Имя плохое


А я скажу, что
в) Если у регистра "ХранилищеXML" единственное измерение это ID, то зачем выбираются остальные поля
г) А то что ID уникально в пределах 2-х недель или уникально "Период+ID" это как-то "обосновано" или "вроде всегда разные приходят" ?
22 Волшебник
 
31.07.25
13:16
(21) имя плохое
23 program345
 
31.07.25
13:26
(21)
а+б) согласен, поменял.

в) - выбираю все поля для функции ЗаполнитьЗначенияСвойств(Запись, ВыборкаДетальныеЗаписи); иначе она заполнит не все поля.

г)если приходит с одинаковым id то игнорируется, в РС записывается только первый такой вызов.
24 OldCondom
 
31.07.25
13:33
Прочитать() лишнее, запрос у бд уже был.
И в попытку бы обернуть, а то потом дружно репу чесать : это как то задним числом прилетело, или регламент(геламент же надеюсь?) не отработал.
25 Волшебник
 
31.07.25
14:27
(23) на что поменял?
26 Мультук
 
гуру
31.07.25
14:38
(25)

О переименовании имён объектов

https://vkvideo.ru/video112643063_169846229
27 Волшебник
 
31.07.25
15:19
(26) 👍 ржака
Ну вот Ваше мнение об авторе какое?
Нам нужны такие ветки? Немножко туповато имхо
28 Мультук
 
гуру
31.07.25
15:37
(27)

Автор, имхо спокойно жил в 1С с 2014 года.
А потом 04.03.2025 внезапно решил стать разработчиком.
И внезапно возникла куча вопросов, вопросиков и просто непоняток.
А работодатель готов платить только за решение вопрос, а за время на обучение нет.
Вот и вот.


P.S.

{О себе}
Вопросы технического характера "а как" на работе обсуждаем, только в рамках мозгового штурма.

Иногда задаю вопрос "а какой командой процессора и по каким фазам луны ККТ выбивает чек" (с),
но это чисто вопрос к профи, который на этом съел собаку и сам отвечаю на такие же вопросы.

"Звонок к другу" использую. Но и я и друзья понимаем, что это скорее "разговор с котом",
ибо порой донести суть проблемы очень сложно. Хотя иногда срабатывает :-)

Из всех моих "не шутейных" тем на мисте я получил ожидаемый, адекватный ответ только про почту с русскими буквами. Вопрос решился, кстати так "Дорогие клиенты, пришлите нам нормальный адрес email на латинице"

P.P.S.
Мне 50 лет. Я конечно еще учусь. Я еще могу это делать.
Но с каждым годом это все медленнее и печальнее.
29 Garykom
 
гуру
31.07.25
15:43
(0)
остается только сохранить файл, отправить подтверждение 200 отправителю и потом его обрабатывать или есть еще предложения?

еще есть предложение сгенерить уникальный уид, сохранить с ним файл в очередь и отдать этот уид в ответ http-сервиса
30 Волшебник
 
31.07.25
16:14
(28) Позволю себе не согласиться. По моему мнению, автор просто тупой бот, коллективный аккаунт, через который на мисту закидывают новые топики.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан