Имя: Пароль:
1C
1С v8
Запись документа в транзакции и отмена транзакции
,
0 КуплюКровать
 
19.12.12
16:00
Нашел в одной из баз вот такой код, суть его подменить организацию, напечатать с подмененной и вернуть как было
Но  как то криво, что думаете об этом? И еще удивило что это работает, то есть запись в базе меняется, хотя транзакция не завершена, вот это странно
           
           Если АБС Тогда
               Если ДокументыОснования.Количество() Тогда
                   НачатьТранзакцию();
                   ДокОбъект    = ДокументыОснования[0].ДокументОснование.ПолучитьОбъект();
                   ДокОбъект.Организация    = Справочники.сталЗначенияПроверки.АБС.ЗначениеПроверки;
                   ДокОбъект.Записать();
                   ПараметрКоманды = Новый Массив;
                   ПараметрКоманды.Добавить(Ссылка);
                   УправлениеПечатьюКлиент.ВыполнитьКомандуПечати("Документ.СчетФактураВыданный", ИмяМакета, ПараметрКоманды, Неопределено, Неопределено);
                   ОтменитьТранзакцию();
               КонецЕсли;
           КонецЕсли;
1 Defender aka LINN
 
19.12.12
16:02
Жесть какая. А про транзакцию - иди учи матчасть, двоешник :)
2 Лефмихалыч
 
19.12.12
16:07
(0) все работает, как положено
3 Rico_1C
 
19.12.12
16:08
(1) Нормальный код, какая жесть-то?!..
4 pessok
 
19.12.12
16:08
(0) красотища то какая!
5 pessok
 
19.12.12
16:09
(2) во-во. неандертальцы бы 100500 раз документ переписывали. другое дело, что лучше в макет передать параметр :)
6 Defender aka LINN
 
19.12.12
16:11
(3) Нет-нет, что ты. Дергать записи в таблицах базы, накапливать блокировки, чтобы Мирьиванне в печатной форме вместо "ООО Вектор" вывело "ООО абырвалг" - это нормально.
7 Лефмихалыч
 
19.12.12
16:13
+(2) в том смысле, что код-то гогно и автора надо найти и ему причинить, но такое поведение транзакции - это абсолютно нормально и так и должно быть
8 Rico_1C
 
19.12.12
16:13
(5) Он ведь не записывается..
Как ты передашь Параметр, если вызывается Общий модуль - менять всю конфу?!..
9 pessok
 
19.12.12
16:14
(8) тебе кто-то мешает поменять данные в ТабДок перед его показыванием?
10 Defender aka LINN
 
19.12.12
16:16
(8) ДокОбъект.Записать(); - это мне в коде мерещится, надо полагать, да?

Ну и я что-то не встречал в заповедях запрета на написание своих процедур. Даже с особо циничным использованием копипасты. У вас, видимо, как-то по другому дела обстоят.
11 pessok
 
19.12.12
16:17
(10) в заповедях есть "не укради". это к вопросу копипасты :)
12 Rico_1C
 
19.12.12
16:19
(9) Я так понимаю весь механизм реализован не Модуле объекта, а ч/з кучу промежуточных процедур - в кот. нуно будет добавлять параметр..
13 Rico_1C
 
19.12.12
16:21
(10) Запись отменяется Транзакцией - на сколько я понимаю..
14 pessok
 
19.12.12
16:23
(12) сам табличный документ же.

Область = ТабДок.Найти(Организация);
Область.Текст = АБСОрганизация
15 Reset
 
19.12.12
16:23
(13) Именно. Сначала записывается, потом отменяется.
16 pessok
 
19.12.12
16:23
ВыполнитьКомандуПечати() какие два последних параметра у процедуры?
17 Rico_1C
 
19.12.12
16:26
(16) Процедура ВыполнитьКомандуПечати(ИмяМенеджераПечати, ИменаМакетов, ПараметрКоманды, ВладелецФормы, ПараметрыПечати = Неопределено) Экспорт
18 pessok
 
19.12.12
16:29
(17) ну вот, она ж форму открывает, на которой ПТД. Ползем в форму, получаем, ползем там в ПТД, делаем (14), профит!
19 pessok
 
19.12.12
16:35
вот даже в упыпырище посмотрел

ПечатьДокументовУправляемая. все там прелестно правится. и никаких транзакций вообще не надо
20 Defender aka LINN
 
19.12.12
16:47
(13) И что с того? Сервер 1С не гоняет данные, код не выполняется, всяческие связанные с записью процедуры не срабатывают и блокировки не возникают?
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший