Имя: Пароль:
1C
1С v8
Как записать в регистр сведений в документе при отмене транзакции?
0 Антон Мак
 
03.04.12
13:35
При проведении документа (либо перед записью) проверяем некие условия и, если они не выполняются, не проводим документ. При этом сведения о причинах отказа от проведения документа необходимо записать в регистр сведений. В процедурах ПередЗаписью, ПриЗаписи и ОбработкаПроведение записать регистр нельзя, т.к. они выполняются в транзакции и при ее отмене запись в регистр тоже будет отменена. Каким образом можно реализовать такой механизм?
1 FIXXXL
 
03.04.12
13:38
проверять перед проведением не вариант?
2 unregistered
 
03.04.12
13:39
(1) Запись и проведение происходят в одной транзакции.
3 Ненавижу 1С
 
гуру
03.04.12
13:41
1с не реализовала параллельные транзакции
4 Галахад
 
гуру
03.04.12
13:44
(0) А зачем? Пользователю почитать лень?
5 Maxus43
 
03.04.12
13:44
для этого в ЖР пишут, он независим от транзакций
6 НЕА123
 
03.04.12
13:48
ПОслеЗаписи()
?
7 patapum
 
03.04.12
13:49
не делай отмену транзакции. обнули движения, присвой статус не проведен, выдай ругань. и записывай себе в регистр
8 unregistered
 
03.04.12
14:01
(6) У объекта не бывает. Только на форме.
9 hhhh
 
03.04.12
14:18
(0) я писал эти сведения в таблицу значений, а потом уже после эта таблица сохранялась в регистр сведений. НО это было давно, ещё на 8.0.
10 Антон Мак
 
03.04.12
14:26
(9) А где хранилась эта таблица? "Потом" - это в какой момент?
11 Антон Мак
 
03.04.12
14:27
(4)(6) Документы создаются автоматически, без участия пользователя, форма не открывается. Для этого и нужно сохранять отчет об ошибках проведения.
12 Maxus43
 
03.04.12
14:28
(11) ЖР чем не устраивает? по ошибкам там отбор сделать и увидиш всё
13 Антон Мак
 
03.04.12
14:32
(12) А к ЖР можно обращаться из кода? Нам нужно потом выводить эти ошибки в специальную форму пользователям.
14 Maxus43
 
03.04.12
14:33
(13) в него только писать можно из кода, анализировать отдельно не получится, только после выгрузки его в файл
15 Галахад
 
гуру
03.04.12
14:34
В файлик пишите ошибки и пользователю письмом отправляете.
16 Maxus43
 
03.04.12
14:36
или просто в файлик, а другое регл задание пусть проверяет периодически, файл есть - пишет в регистр и удаляет файл
17 Антон Мак
 
03.04.12
14:42
(16) Логично, но к сожалению, при базе на SQL и большом кол-ве заказов этот вариант будет не самым лучшим по скорости.
18 Антон Мак
 
03.04.12
14:43
Единственный более менее подходящий вариант был придуман такой:
- Все проверки из обработки проведения выносятся в ПередЗаписью;
- В конце ПередЗаписью если Отказ, меняем РежимПроведения с Проведения на Запись.
- Пишем ошибки в регистр
- ???
- ПРОфИТ

Но, возможно, есть более изящное решение, позволяющее не выдергивать всё из обработки проведения?
19 ПиН
 
03.04.12
14:45
передзаписью

Если РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения Тогда
20 Maxus43
 
03.04.12
14:49
(17) нормальный вариант. файлики маленьки пиши только с описанием ошибки и ссылкой на док. рег задание потом в фоне сделает записи в регистр об ошибках
21 hhhh
 
03.04.12
14:49
(10) таблица в глобальных переменных была, и обработчик ожидания запускался один раз в минуту, анализировал эту таблицу и писал в регистр.
22 MM
 
03.04.12
14:56
(14) Устаревшие данные
ВыгрузитьЖурналРегистрации(<Приемник>, <Фильтр>, <Колонки>, <ИмяВходногоФайла>, <МаксимальноеКоличество>)
Параметры:
<Приемник> (обязательный)
Тип: Строка; ТаблицаЗначений.
Строка, содержащая имя выходного XML файла, либо таблица значений, в которую будут выгружены выбранные в соответствии с отбором записи журнала регистрации.
23 Maxus43
 
03.04.12
15:02
(22) я об этом же, только выгружать ЖР.
А использовать его для отчетов юзеру об ошиюках - бред) там же другая инфа нужная
24 Sammo
 
03.04.12
15:07
Емнип, был еще вариант использования фонового задания, которое запускается без ожидания его завершения.
Но сама постановка хромает, имхо. Например, нужну ли эти проверки при интерактивном проведении? Если речь идет про обработку, которая проводит документы - может эту проверку вынести в модуль обработки...
25 Maxus43
 
03.04.12
15:09
в обработке то легко...
Попытка
Док.записать(РежимЗаписиДокумента.Проведение);
исключение
ТекстОшибки = ОписаниеОшибки();
КонецПопытки;
//////запись в регистр
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший