Имя: Пароль:
1C
1С v8
Зафиксировать транзакцию при отказе. Как?
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
вверх