Имя: Пароль:
1C
1C 7.7
v7: Модуль документа, Реквизит справочник, Записать()
,
0 FREEEEs
 
09.02.12
16:13
Всем привет.

Проблема такова.

Есть модуль документа – ОбработкаПроведения.

Есть реквизит Контрагент у документа.

В Обработке ОбработкаПроведения я изменяю этот реквизит путём:

           мКонтрагент    = СоздатьОбъект("Справочник.Контрагенты");
           мКонтрагент.НайтиЭлемент(Контрагент) ;

           мКонтрагент.Наименование = "лл";
           мКонтрагент.Реквизит2 = "";  
           мКонтрагент.Записать();  

Элемент находит, всё доходит до Записать(), записывает без ошибок.

НО ЕСТЬ ОДНО НО !!! Что нефинта он не записывает, ссаный контрагент не меняется вообще не как, не один реквизит.

Даже если я тупо засуну код выше в обработку, всё работает отлично, но именно в модули документа он не даёт мне изменить этот объект.

Вопрос: Как решить эту проблему и из за чего она. Может как то блокируется объект и т.д.
1 FREEEEs
 
09.02.12
16:29
Человеки
2 andrewks
 
09.02.12
16:40
менять непериодические реквизиты в модуле дока? при Сталине за это расстреливали
3 FREEEEs
 
09.02.12
16:43
Спасибо за флуд.

А по делу есть что сказать?
У меня проверка на ошибку одну, при проведении, если она есть надо очистить одно поле у Контрагета, что бы оператор не делал это руками.
4 FREEEEs
 
09.02.12
16:51
И почему же в модуле объекта МОЖНО создать новый объект в справочнике, но НЕЛЬЗЯ изменить уже имеющийся.
Просто маразм.
5 GLazNik
 
09.02.12
16:54
А проведение доходит до конца? Документ становится проведенным? СтатусВозврата(0) случаем не присутствует?
6 zak555
 
09.02.12
16:56
(2) +1

зачем реквизиту менять ориентацию ?
7 PZh
 
09.02.12
16:57
Попробуй распровести документ, а потом провести по новой, увидишь он не проведется.
8 Шапокляк
 
09.02.12
16:57
Как-то некошерно совать одну транзакцию внутрь другой. В 7.7. это может привести к непредсказуемым последствиям.
9 1Сергей
 
09.02.12
17:00
перефразирую (2):

(0)Реквизит периодический?
10 PZh
 
09.02.12
17:01
(9) наименование периодическое?
11 andrewks
 
09.02.12
17:01
(3) ну что тебе сказать по делу? у меня работает, но я никогда так не делал и не советую.
из модуля дока я изменяю периодические реквизиты с галкой "изменяется документами"
12 FREEEEs
 
09.02.12
17:01
Реквизит НЕ переодический.

Документ НЕ проводится, т.к я прерываю сам его проводку и должен очистить реквизит у Контрагента.

То-есть выхода тут нету? Жалко что оператором будет нужно заходить после этой ошибки в Контрагента и очищать поле ((
13 andrewks
 
09.02.12
17:02
(12) "Документ НЕ проводится"

бугага. а сразу сказать слабо было?
14 GLazNik
 
09.02.12
17:02
(12) вот и ответ. Проведение начинает транзакицию, но не фиксирует
15 FREEEEs
 
09.02.12
17:03
Я не пойму причём тут вообще проводка документа?

Я сам напрямую создаю объект, получаю ссылку и меняю его.
16 andrewks
 
09.02.12
17:04
для прояснения сознания:

проведение дока идёт в неявной транзакции, соответственно, всё, что ты изменяешь при проведении (регистры, справочники, и т.д.), при откате транзакции возвращается в состояние до начала транзакции
17 zak555
 
09.02.12
17:04
странная карточка у FREEEEs
18 Шапокляк
 
09.02.12
17:04
Запись элемента справочника - транзакция. вызов транзакций не работает внутри другой транзакции,коей является проведение документа.
(12) А зачем такая страшная методическая модель используется - при перепроведении документа еще и у контрагента реквизиты менять?
19 Шапокляк
 
09.02.12
17:05
(17) Неужто он себя грохнул в процессе перепроведения?
20 FREEEEs
 
09.02.12
17:07
(18) У контрагента в карточке есть дата до которой действует скидка.

При проведении Реализации из карточки Контрагента берётся скидка, дата до которой действует скидка и проверяется с текущей, если текущая больше, то документ не проводится, т.к скидка уже не действует, выводится сообщение, "очищается дата".
21 andrewks
 
09.02.12
17:08
для данной "задачи" методически правильно сделать так:

на кнопку "Провести" повесить ПоКнопкеПровести(), в ней:

Процедура ПоКнопкеПровести()

НашиГрязныеПредДействия();
Провести();
НашиГрязныеПостДействия();

КонецПроцедуры
22 FREEEEs
 
09.02.12
17:08
Эхх ну как я понял тут не как (
23 FREEEEs
 
09.02.12
17:09
(21) А как тут прервать проведение?
24 andrewks
 
09.02.12
17:09
(20) про периодичские реквизиты не слышал?
25 Шапокляк
 
09.02.12
17:09
Страсть какая...
26 FREEEEs
 
09.02.12
17:10
(24) Слышал, делать его переодическим?
27 andrewks
 
09.02.12
17:10
(23) сторнирую (21), т.к. задача (20) имеет _нормальное_ решение
28 PZh
 
09.02.12
17:10
(20) А дату зачем очищать?
29 Джинн
 
09.02.12
17:10
(20) Ужасы нашего городка (с)
30 FREEEEs
 
09.02.12
17:11
(28) Ну чтоб в след. раз не проверять уже, т.к скидка даётся например на 30 дней, потом уже нет.
31 andrewks
 
09.02.12
17:12
(26) обязательно.

и сразу, при задании скидки, прописывай, с какой даты действует такая-то скидка, с какой - другая, а с какой вообще никакая
32 PZh
 
09.02.12
17:13
(30) А что западло проверить? Перепроведение задним числом в базе строго настрого запрещено? Поскольку при это будет происходить лютый пушной зверь!
33 FREEEEs
 
09.02.12
17:21
Мож подскажите как отменить проведение дока ПриНажатииКнопкиПровести ?
34 FREEEEs
 
09.02.12
17:22
То есть НЕ отменить, а не допустить проведение
35 Джинн
 
09.02.12
17:24
(34)
Если НашиГрязныеПредДействия() = 1 Тогда
Провести();
ИначеЕсли;

Но Ваша идея кривая изначально и костыли этому быдлокоду не помогут.
36 FREEEEs
 
09.02.12
17:25
(35) Эмм почему?
37 PZh
 
09.02.12
17:25
Ваша методология - конкретный неадекват. Вряд ли что либо кроме стеба тут услышите. Меняйте методологию или ничего не выйдет.
38 FREEEEs
 
09.02.12
17:26
(35) в чём кривость.

Перед проведением дока я смотрю есть ли у контрагента скидка эта, которая у данного дока и не просрочена ли она. Если она есть и просрочена, я не даю провести документ, сообщаю оператору, очищаю скидку, всё.

Что не так же.
39 PZh
 
09.02.12
17:27
(38) Все так, тока скидку очищать не надо
40 andrewks
 
09.02.12
17:27
(38) а что, без скидки клиент взять уже не может?
41 FREEEEs
 
09.02.12
17:29
(39) ну а если не очищу, оператор будет вечно получать сообщение "Скидка просрочена"

Это не просто скидки, а это как накопление, когда клиент накапливает до 12% (2% + 4% и т.д), он получает скидку 12% ровно на месяц, через этот срок он теряет 12% и снова копит.
42 Шапокляк
 
09.02.12
17:30
(38) Потом перепроводите более ранний документ, сделанный когда скидка действовала. Программа смотрит "Оппа! А скидки-то и не было оказывается". Особенно здорово все это выглядит, если клиент самозабвенно копил и заново заработал себе скидку (41).
43 PZh
 
09.02.12
17:31
(41) А зачем он будет его получать? Пусть оператор видит клиентов с просроченными скидками как клиентов без скидок, в чем проблема?
44 FREEEEs
 
09.02.12
17:32
(43) Ну так чтоб оператор не сделал Реализацию на 12% тому, кто уже не должен!
45 FREEEEs
 
09.02.12
17:33
(42) Не соглашусь.

Скидка записывается в саму Реализацию и будет там годами. А мы убираем скидку у карточки контрагента!
46 PZh
 
09.02.12
17:33
(44) Боже! Ну скидка то в какой момент проставляется? Проверь перед этим просрочена она или нет и если просрочена - действуй так как будто ее нет.
47 FREEEEs
 
09.02.12
17:36
(46) в момент Реализации. Так не одна же скидка 12%! Там ещё 5 видов и тут оператор сам решает какую ставить, у нас ещё агенты
48 FREEEEs
 
09.02.12
17:36
Заранее хочу сказать, всем спасибо за помощь и ответы.
49 alxxsssar
 
09.02.12
17:37
В модуль формы в процедуру "ПриЗаписи" слабо проверку закинуть?
50 PZh
 
09.02.12
17:44
(47) Хорошо, скажу по другому. Нужно чтобы интерфейс оператора реагировал на просроченную скидку так же как на ее отсутствие. А остальные 5 видов тут при чем?
51 FREEEEs
 
09.02.12
17:52
Ладно спасибо, сделал в ПриЗаписи
52 1Сергей
 
10.02.12
08:22
(51) ты не учитываешь то, что документ может записываться/проводиться программно. Что документ должен давать один и тот же результат, если его проведут хоть сто раз. А так ты проведёшь новый документ, реквизит очистится. Старые документы уже не проведутся
AdBlock убивает бесплатный контент. 1Сергей