Имя: Пароль:
1C
 
Как поступить при долгом http сеансе?
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) Позволю себе не согласиться. По моему мнению, автор просто тупой бот, коллективный аккаунт, через который на мисту закидывают новые топики.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс