Имя: Пароль:
1C
 
Отправка данных при записи справочника
0 Dimarik_1
 
10.03.22
16:19
При записи справочника необходима отправка данных через http сервис. Как вы считаете, является ли наормальным при записи справочника каждый раз пересоздавать httpСоединение, или же считаете что лучше 1 раз его сделать и на этом остановиться? Если сделать его, тогда наверное лучше в параметрах сеанса или как считаете?
1 ДенисЧ
 
10.03.22
16:20
Он сдохнет минут через 5. Лучше пиши в РС, а потом через РЗ отправляй пачкой.
2 acht
 
10.03.22
16:33
(0) > или как считаете
Считаем, что дергать внешнюю систему с непредсказуемым временем обработки из транзакции - дичь.
Ну и включить голову и подумать что делать, если во внешнюю систему данные уже отправятся, а потом транзакция отменится.

Регистриуй изменение (например, автоматически в плане обмена или вручную в регистре, как (1) предлагает) а потом отправляй регламентным.
3 lodger
 
10.03.22
16:39
(0) психически здоровые люди не делают вызовы вне текущего сеанса 1с во время транзакции записи.
4 lodger
 
10.03.22
16:40
и кстати, зачем тебе во внешней системе 100500 версий одной и той же позиции с поочередным вводом реквизитов, поставил снял галочку, стер реквизит, добавил строчку-удалил строчку?
5 Fragster
 
гуру
10.03.22
16:42
(0) в параметрахсеанса не взлетит. максимум - в модуле с повторным использованием возвращаемых значений.
(1) сдохнет, если его не дергать, секунд через 150, если на сервере не сконфигурено иное.
(3) прав, надо юзать фоновое задание и там на все параметры сеанса и прочее - пофиг, все равно пересоздавать
6 Dmitrii
 
гуру
10.03.22
16:43
(0) >> Как вы считаете, является ли наормальным при записи справочника каждый раз пересоздавать httpСоединение.

Нет. Не является.
Присоединяюсь к (1) и (2). Нужен план обмена или РС, и регламентное, которое будет отправлять нужные данные.
Или вообще пересмотреть логику, отказавшись от привязки к событию "запись". Но тут, чтобы что-то советовать, уже нужны подробности стоящей задачи.
7 Garykom
 
гуру
10.03.22
16:45
(0) Это вы там хрень придумали
Делай очередь на отправку при записи объекта
Фоновое обрабатывает очередь отправляя по http
8 Garykom
 
гуру
10.03.22
16:46
(7)+ Не забыть предусмотреть Объект.ЗагрузкаДанных = Истина, для пропуска
9 ДедМорроз
 
11.03.22
00:09
Лучше ДополнительныеСвойства.БезОтправки
10 ДедМорроз
 
11.03.22
00:13
Вообще,когда вы находитесь в процедуре ПриЗаписи объекта,вы еще не знаете,записан он или нет,так как в любой из подписок на события запись можно отменить.
Событие же ПослеЗаписи присутсвует только при интерактивной записи.
Поэтому,если очень хочется что-то передать,то в процедуре ПриЗаписи стартуете фоновое задание и передаете в него версию данных.
В фоновом задании читаете объект - он прочитается как только завершится транзакция,и по версии уже можно определить успешно ли она завершилась.
Ну и при успешном завершении шлем привет в другую систему.
11 acht
 
11.03.22
00:27
(10) > он прочитается как только завершится транзакция
А разверни-ка свою мысль подробней, пожалуйста. Что читать, как читать...
12 Asmody
 
11.03.22
00:30
чета никто еще не сказал слов кролик/кафка/шина?
13 ДедМорроз
 
11.03.22
09:38
(11)если в одной транзакции установлена блокировка на объект,то если мы открываем другую транзакцию и ставим эту же блркировку,то она будет ждать,пока блокировка освободится.
Дальнейшее уточнение зависит от режима блокировок и режима транзакций,так как без блокировки в режиме ReadCommited, который по умолчанию для управляемых блокировок,мы получим фигню.

Шина и т.п.здесь не очень поможет,так как нужно будет отправить запрос,а потом дождаться результата.
Если базы на одном сервере,то такое же можно провернуть и без шин просто через директорию обмена файлами.
Но тут основной вопрос - как база узнает,что ее попросили что-то выгрузить?
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший