Имя: Пароль:
1C
1С v8
8.3 Транзакция
,
0 alexei366
 
14.10.13
15:22
Я думаю что ответ нет, но всеже спрошу. Есть у меня некая функция завернутая в Транзакцию, по мере её выполнения я пишу лог - в моем случае это объект базы типом Документ.
Надо чтобы лог писался вне зависимости от того зафиксируется ли транзакция в итоге или нет.
Пока придумал запуск записи в лог через фоновое задание - но этот вариант не особо радует. Есть ли другие возможности оперативной записи данных в базу при наличии Транзакции?
1 alexei366
 
14.10.13
15:23
(0) А ну естественно у меня 1С сервер
2 MrStomak
 
14.10.13
15:24
Только другим сеансом - а значит только фоновым заданием.
3 pumbaEO
 
14.10.13
15:24
Журнал регистрации, типа православно верный способ, одобренный самой 1С.
4 Maxus43
 
14.10.13
15:24
ЖР конечно
5 samozvanec
 
14.10.13
15:26
(0) Лог.Записать() делай после отмены/завершения транзакции
6 alexei366
 
14.10.13
15:27
(2) Блин жалко
7 alexei366
 
14.10.13
15:29
(3) (4) Ну это мы покапаем, просто аналогичный функционал сделан для Фонового задание. Ну всмысле запускаю фоновое задание (весь код в транзакции), которое через запуск фоновых обновляет регистр сведений куды пишет текущий процент своего выполнения. Я и для этого тож спрашивал просто.
8 alexei366
 
14.10.13
15:30
(5) А вдруг до отмены/завершения по какимто причинам процесс 1С вообще упадет, и логи получаются не запишуться.
9 samozvanec
 
14.10.13
15:35
(8) т.е. в транзакцию ты обернул, а исключение не обработал?
ну пиши сразу и запоминай, что записал. если делаешь отмену - повторно пиши. а вообще про ЖР тебе правильно говорят, твой велосипед никак не лучше.
10 alexei366
 
14.10.13
15:41
(9) Да завернул я в исключение.
Давайте рассмотрим случай тогда с процентом выполнения фонового задания. Там то только через другое ФН получается?
11 alexei366
 
14.10.13
15:44
(10) Мож конечно через временное хранилище попробывать, но сеанс проверяющий процент не является родителем для сеанса выполняющего ФН
12 samozvanec
 
14.10.13
15:51
(11) попробуй через ЖР, точно тебе говорю
13 alexei366
 
14.10.13
15:52
(12) Я ща не про лог, а про процент выполнения фонового задания
14 IKSparrow
 
14.10.13
15:54
(0) Попытка...Исключение...КонецПопытки
Не?
15 alexei366
 
14.10.13
16:01
(14) Да этого г_а_в_н_а у меня везде понатыкано, вопрос то в другом
16 samozvanec
 
14.10.13
16:04
(13) первое, что приходит в голову, сделать форму, на ней индикатор, ее открывать и из ФЗ индикатор обновлять. хз, насколько рабочая идея.
17 alexei366
 
14.10.13
16:22
(16) Ну ты и даванул, у меня ФЗ вообще из операции web-сервиса запускается, и процент считывается другой операцией. Корочь нету у меня интерфейса.
18 samozvanec
 
14.10.13
16:28
(17) какой тебе тогда индикатор, если интерфейса нет? кто об нем знать то должен?
19 alexei366
 
14.10.13
17:17
(18) есть кому не переживай
20 fisher
 
14.10.13
17:24
А не проще эту лабуду через текстовые файлы сделать?
21 fisher
 
14.10.13
17:25
В чем необходимость писать эту инфу именно в БД?
22 elCust
 
14.10.13
17:36
Функция ...()
    ТЗЛог = Новый ТаблицаЗначения;
    ...
    НачатьТранзакцию();
    ...
    Если...
    ЗафиксироватьТранзакцию()
    Иначе
    ОтменитьТранзакцию()
    КонецЕсли;
    Для Каждого СтрЛог Из ТЗЛог Цикл
       ...
    КонецЦикла;
КонецФункции
Не?
23 alexei366
 
14.10.13
18:51
(20) Эт д_е_р_ь_м_о какоето, а вдруг у меня кластер серверов, что им ещё и общий сетевой каталог давай. Да и как там с блокировками будет? сразу с исключением падать будет если др сеанс ведет запись в файл, или перезаписывать будет (всмысле открывают файл 2 сеанса, а данные в итоге только с последнего)
24 alexei366
 
14.10.13
18:51
(22) Да блин я уже не про лог говорю посмотри в  (10)
25 Зойч
 
14.10.13
18:56
пиши в скл напрямую
26 bolobol
 
14.10.13
19:09
В жёсткий диск магнитом вводи!
27 alexei366
 
14.10.13
22:48
Корочь я понял мутить через фоновое
28 fisher
 
15.10.13
11:06
(23) Те же логи обычно пишутся без "удержания" файла. Записал-отпустил. Это быстрая операция. При конкурентном доступе - в пределах таймаута доступа. Писать разными сеансами в один файл - не вижу необходимости на твоих задачах. Вот с кластером серверов - да, незадача...
Если подумать, то таки да - фоновые задания привлекательней :)
29 alexei366
 
15.10.13
12:17
(28) Ну пока все через фоновые сделано, я даж подумываю мож в коде открывать доп коннект через ком к 1С, и кода основной код завернут в транзакцию, через доп конект обновлять регистр статуса выполнения процесса, получается вроде как я создаю сам Фоновое задание которое держу за "я_й_ц_а", единственный минус этой затеи что я в коде буду ожидать выполнения процедуры вызываемой в доп коннекте (но на это н_а_с_р_а_т_ь, думаю ожидание завершения процедуры перезаписи одной строки РС ничтожно). Встают др вопросы: например как сделать доп коннект в коде от тек пользователя - ведь пароль то мы не знаем.
30 pumbaEO
 
15.10.13
12:29
(29) добавь еще один веб сервис, который только будет писать логи и его дергай.
31 alexei366
 
15.10.13
12:32
(30) Ты что мне предлагаешь из операции веб сервиса вызывать опять вебсервис для записи тек статуса выполнения (забудьте вы про логи блин). И какя тут нах разница по сравнению с фоновым задание, фоновое хотябы логин пароль не запрашивает, а через веб сервис я должен буду захардкодить его получается, или в базе хранить (что не по феншую).
32 fisher
 
15.10.13
12:34
(29) Я думал об этом. Но стремное это дело - писать в таблицы 1С со стороны. Фиг его знает, чего там сервер приложений кэширует и как. Если уж писать, то в служебную БД.
Но если прикинуть все в целом, получается что проще таки через фоновое задание :)
33 fisher
 
15.10.13
12:37
А, стоп. Пропустил, что ты через COM-соединение 1С хотел писать. Все равно через фоновое проще, ИМХО.
34 alexei366
 
15.10.13
12:55
(33) Да я имел ввиду заменить вызов фоновых (раз 30) созданием доп коннекта.
35 fisher
 
15.10.13
13:26
Один коннект вместо множественных запусков фоновых? Тогда имеет смысл. А запускать можно под служебным пользователем.
36 fisher
 
15.10.13
13:27
Плохо, что COM. Это привязка к винде.
37 МуМу
 
15.10.13
16:35
Для хорошего логирования проблем несколько. Фиксация откатанных транзакций, фиксация при возвратах, фиксация пр критических ошибках. Также нужно учитывать производительность(не должно быть задержек, лишних блокировок) а также необходимо реализовать удобное отображение с учетом изменений в структуре объектов.(если нужны старые и новые значения а не просто факт)

Что касается (0) Сделай отдельное АДО соединение и пиши в таблицу MSSQL в отдельной базе(что бы лицензионное соглашение не нарушать:)).
38 fisher
 
15.10.13
17:26
(37) Ему не совсем логирование в чистом виде нужно. Ему вообще нужно отображать на клиенте ход выполнения фонового задания.
39 alexei366
 
16.10.13
14:08
(38) Не на клиенте, а в второму сеансу дать возможность считывать ход выполнения первого
40 alexei366
 
16.10.13
14:09
(37) А что фоновые тоже лицуху жрут?
AdBlock убивает бесплатный контент. 1Сергей