![]() |
![]() |
![]() |
|
Зафиксировать транзакцию при отказе. Как? | ☑ | ||
---|---|---|---|---|
0
ИС-2
16.07.14
✎
08:11
|
в продолжении v8: Модификация одного документа при проведении другого. Аргументы против.
Необходимо менять документ заказ покупателя, если не прошли проверки в реализации. Примерно такой код: Процедура ПередЗаписью() Отказ = ЕстьОшибки(); Если Отказ тогда СделкаОб = Сделка.ПолучитьОбъект(); СделкаОб.ЕстьОшибки = истина; СделкаОб.Записать(); конецесли КонецПроцедуры Он в Сделке изменения не фиксируются. Это из-за того, что действие выполняется в транизакции? Как можно зафиксировать изменения, если транзакция откатывается? Выносить в форму? Что еще? |
|||
1
shuhard
16.07.14
✎
08:16
|
(0)[Как можно зафиксировать изменения, если транзакция откатывается]
хранить их там где нет транзакций: - в журнале - в файлах - в другой СУБД |
|||
2
vde69
16.07.14
✎
08:16
|
не возможно...
1с не поддерживает вложеные транзакции, если внутри вложеной транзакции будет необработаная ошибка она протранслируется на самую верхнюю транзакцию выход только один - сделать ВНЕ транзакции... |
|||
3
Рэйв
16.07.14
✎
08:20
|
(0)Сделай кнопку "Проверка" и пока ее не нажмут не давай записать.
|
|||
4
DrZombi
гуру
16.07.14
✎
08:21
|
(0) Ты главное помни, когда ты повторно вызываешь "Записать" в Предопределенных процедурах Модуля документа.
То они будут вызываться каждый раз и до бесконечности. Порочный Круг лучше разрывать элементарной передаче параметра через "ДополнительныеСвойства" Документа (Объекта) И анализировать, есть ли "Флаг", того что документ уже записывается повторно :) |
|||
5
DrZombi
гуру
16.07.14
✎
08:23
|
+ (0) Да и код "СделкаОб.ЕстьОшибки = истина"...
Зачем оно? Как правило, если Пользователь записывает не проведенный документ, то можно разрешать ему делать, все что Угодно... Проверку лучше делать перед или при Проведении. Ну и соответственно, если документ уже проведен. |
|||
6
DrZombi
гуру
16.07.14
✎
08:24
|
+(5) И если пользователь просто записывает документ без проведения, так и меняй признак "ЕстьОшибки" на истину.
И далее работай в Журналах для разукраски :) |
|||
7
ИС-2
16.07.14
✎
08:27
|
(2) печально
|
|||
8
AlexITGround
16.07.14
✎
09:29
|
обрати внимание на 8 пост в предыдущей теме или постарайся подробнее объяснить с какой целью требуется изменить ЗаказПокупателя, а то тут предлагатели уже напредлагали
|
|||
9
AlexITGround
16.07.14
✎
09:54
|
"(15) логика такая. При проведении реализации могут возникнуть ошибки (большая дебеторка, нет товара на остатках, нет цен и т.д) или, при автоформировании, будут удаляться позиции, которых нет на остатке.
Т.е надо фиксировать почему клиенту не отгрузили, то что он хотел" - большая дебеторка Ведиде кредитный контроль на уровне заказа. - нет товара на остатках Делайте закрытие заказов типовым способом, указывая причину невыполнения заказов. Это тоже важный момент. - нет цен Это вообще забей. Если вообще нет - то не проводить документ. Если не те цены - воспитывать фин. отдел или кто там у вас их вводит не вовремя. |
|||
10
ИС-2
16.07.14
✎
11:06
|
(9) все это не подходит т.к очень большой объем ввода документов (1000 за 1 час). Типовым функционалом не пахнет
|
|||
11
ИС-2
30.07.14
✎
11:53
|
сейчас надо как-то зафиксировать транзакцию, которая происходит в обработке проведения (контроль остатков).
Как можно сделать? |
|||
12
ИС-2
30.07.14
✎
15:48
|
Составили способы. Есть еще:
1. Вынос проверки в событие ПередЗаписью. Если документ не удается провести, то менять режим записи с проведения на запись. Таким образом транзакция зафиксируется. 2. Вынос проверки в форму 3. Писать GUIDы причин и реализаций в файлики на XEON. Сложно и не надежно 4. Писать GUIDы причин и реализаций в журнал регистрации. Медленная работа журнала регистрации 5. Писать GUIDы причин и реализаций в отдельной базе и подтягивать данные от туда 6. Писать GUIDы причин и реализаций в глобальную переменную клиентского сеанса. Через обработчик ожидания считывать информацию из данной переменной и записывать. Тормоза у пользователя 7. При возникновении ошибки порождать фоновое задание, которое будет менять заказ. |
|||
13
France
30.07.14
✎
16:02
|
зачем тогда создавать заказ, если его "втихаря" и "взади" будете править при проведении реализации?? не проще отказаться от использования заказов??
|
|||
14
hhhh
30.07.14
✎
16:54
|
(11) можно записывать эти сделки например в журнал регистрации. Потом, после транзакции обработкой меняете сделки.
|
|||
15
ИС-2
31.07.14
✎
08:55
|
(13) таково ТЗ. Надо фиксировать именно в заказе.
Поясните, пжс, про блокировки при реализации варианта 1. Вынос проверок в событие ПередЗаписью. Если документ не удается провести, то менять режим записи с проведения на запись. Таким образом транзакция зафиксируется. Событие ПередЗаписью реализации. Идет проверка по остаткам, в этот момент блокируем записи по измерениям (склад+номенклатура). Если контроль остатков прошел, то делаем запись в регистр, снимаем блокировку регистра. Если нет остатков, то тоже снимаем блокировку. Остальные движения выполняются в проведении. Блокировка остатков будет до тех пор пока документ полностью не проведется или она пропадет как только я сниму блокировку? |
|||
16
ИС-2
31.07.14
✎
10:00
|
вверх
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |