|
v7: Как программно ПЕРЕзаписать документ? | ☑ | ||
---|---|---|---|---|
0
e-9
11.08.14
✎
16:33
|
Есть документ (КадровоеПеремещение). Нужно, чтобы при его проведении, программно создавался и сохранялся документ ПриказНаОплатуПоСреднему (значения реквизитов которого берутся из реквизитов кадрового перемещения).
Если же РЕДАКТИРУЕМ уже ранее проведенное кадровое перемещение, то, при перепроведении, должен поменяться и зависимый ПриказНаОплатуПоСреднему. Сделал так: в документе КадровоеПеремещение завел реквизит ДокНаОплатуПоСреднему - в него записываю ссылку на ПриказНаОплатуПоСреднему. Соответственно, если этот реквизит пуст - создаем новый документ; если не пуст - редактируем имеющийся. Так вот, при первом проведении, все ок - документ создается, ссылка сохраняется. А во втором случае, на строке "Док.Записать();" получаю ошибку "Не выбран документ!". Вот сам код: //******* Док = СоздатьОбъект("Документ.ПриказНаОплатуПоСреднему"); Если ДокНаОплатуПоСреднему = ПолучитьПустоеЗначение("Документ.ПриказНаОплатуПоСреднему") Тогда Док.Новый(); Иначе Док = ДокНаОплатуПоСреднему; КонецЕсли; Док.Сотрудник = Сотрудник; Док.Начало = Начало; //...и другие реквизиты Док.Записать(); //ВОТ ТУТ ПОЛУЧАЮ ОШИБКУ!!! ДокНаОплатуПоСреднему = Док.ТекущийДокумент(); ...Убился уже - почему "не выбран"??!!! |
|||
1
Voronve
11.08.14
✎
16:35
|
Если ДокНаОплатуПоСреднему = ПолучитьПустоеЗначение("Документ.ПриказНаОплатуПоСреднему") Тогда
Док.Новый(); Иначе Док.НайтиДокумент(ДокНаОплатуПоСреднему); КонецЕсли; |
|||
2
Voronve
11.08.14
✎
16:36
|
Если ДокНаОплатуПоСреднему = ПолучитьПустоеЗначение("Документ.ПриказНаОплатуПоСреднему") Тогда
Замени на Если ПустоеЗначение(ДокНаОплатуПоСреднему) = 1 Тогда |
|||
3
e-9
11.08.14
✎
16:40
|
(1) Я пробовал этот вариант - "Объект не может быть перепозиционирован!", на строке
Док.НайтиДокумент(ДокНаОплатуПоСреднему); (2) к гадалкам я вроде не обращался - в чем рациональное зерно такой замены??? |
|||
4
e-9
11.08.14
✎
16:44
|
в отладчике вижу, что Док, в случае перепроведения, получает нужное значение - т.е. ссылку на тот документ, который был создан при первом проведении.
Тем более непонятно - почему "не выбран"! |
|||
5
Ёпрст
11.08.14
✎
16:45
|
(3)В том, что всегда в ветку иначе летит, где НайтиДокумент(пусто, ибо в реквизите нихрена нет) приводит к ошибке ""Объект не может быть перепозиционирован!", н"
|
|||
6
Ёпрст
11.08.14
✎
16:46
|
(4) Записать() есть только у объектов созданные через СоздатьОбъект().
|
|||
7
Ёпрст
11.08.14
✎
16:46
|
записывать ссылку - нельзя
|
|||
8
e-9
11.08.14
✎
16:56
|
ой-ёй....(1) прав Voronve - а я слепошарый, вместо
Док.НайтиДокумент(ДокНаОплатуПоСреднему); написал Док = НайтиДокумент(ДокНаОплатуПоСреднему); Заменил, как надо - и все супер! и даже с Если ДокНаОплатуПоСреднему = ПолучитьПустоеЗначение("Документ.ПриказНаОплатуПоСреднему") Тогда :))) Так что, Ёпрст, со всем уважением - в (2) особого смысла нет. Ниче в ветку Иначе не летит, когда не надо, и летит, когда надо:) |
|||
9
e-9
11.08.14
✎
16:57
|
ну и, (7,8) - в точку, значит, вместе с (1)...
|
|||
10
e-9
11.08.14
✎
16:57
|
(тьфу, не 7,8 а 6,7)
|
|||
11
Voronve
11.08.14
✎
17:12
|
Смысл в 2 в том что у тебя второй объект не создается. Обходимся методами платформы. А вообще:
Если Док.НайтиДокумент(ДокНаОплатуПоСреднему) = 0 Тогда Док.Новый(); КонецЕсли; Так и элегантнее и методами объекта обходимся. |
|||
12
e-9
11.08.14
✎
17:35
|
(11) хм...попробовал - теперь при первом проведении, когда документ на оплату по среднему должен первый раз создаться, выдает "Недопустимая операция", на строке
Если Док.НайтиДокумент(ДокНаОплатуПоСреднему) = 0 Тогда |
|||
13
e-9
11.08.14
✎
17:35
|
а уже ранее созданные - перепроводит без проблем
|
|||
14
e-9
11.08.14
✎
17:48
|
не, не идет (11), как ни крути - видимо, НайтиДокумент должен обязательно получить непустую ссылку...
остальные варианты (через ПустоеЗначение и ПолучитьПустоеЗначение) работают норм. Спасибо за помощь! Это я с самого начала накосячил с Док = НайтиДокумент...; |
|||
15
e-9
12.08.14
✎
11:54
|
...да, кстати....А я случайно не костыль мастерю?:)
По требованиям, документ ПриказНаОплатуПоСреднему МОЖЕТ создаваться (необязательно!) при проведении документа КадровоеПеремещение; либо, может создаваться и независимо от кадрового перемещения. Может, тут нужно было использовать механизм "Ввод на основании", или подчиненных документов? |
|||
16
e-9
12.08.14
✎
12:10
|
(хотя, механизм подчиненных я уже и так реализовал - только в другую сторону:D)
|
|||
17
User_Agronom
12.08.14
✎
12:17
|
Поправь на
Док = ДокНаОплатуПоСреднему.ПолучитьОбъект(); |
|||
18
e-9
12.08.14
✎
12:29
|
(17) это вместо "Док.НайтиДокумент(ДокНаОплатуПоСреднему)"?
Будет быстрее, дальше, выше?.. |
|||
19
User_Agronom
12.08.14
✎
12:30
|
(18)
Если ДокНаОплатуПоСреднему = ПолучитьПустоеЗначение("Документ.ПриказНаОплатуПоСреднему") Тогда Док.Новый(); Иначе Док = ДокНаОплатуПоСреднему.ПолучитьОбъект(); КонецЕсли; |
|||
20
e-9
12.08.14
✎
12:38
|
(19) так я в (17) про то же
так в чем смысл замены? работает и "Док.НайтиДокумент(ДокНаОплатуПоСреднему)" |
|||
21
Duke1C
12.08.14
✎
13:01
|
(15) ИМХО "правильнее" будет заюзать Ввод на основании, но если "тупой" юзер забывает при изменении основания, изменить подчиненный документ, то делай как делаешь.
(20) Не слушай (19), он от 8-ки не отошел |
|||
22
e-9
12.08.14
✎
13:03
|
(21) так и думал - но всегда легче, когда получаешь подтверждение от "старших":)
|
|||
23
User_Agronom
12.08.14
✎
13:07
|
(21) Это 7-ка? Ну тогда пардон, я ХЗ как там.
|
|||
24
drunkovsky
14.08.14
✎
16:30
|
// я не понимаю цели этого условия :
// Если ДокНаОплатуПоСреднему = ПолучитьПустоеЗначение("Документ.ПриказНаОплатуПоСреднему") Тогда // из того, что я понял - вот вариант, если ДокНаОплатуПоСреднему - это ен реквизит, а переменная // Если ПустоеЗначение(ДокНаОплатуПоСреднему)=1 Тогда ДокНаОплатуПоСреднему=СоздатьОбъект("Документ.ПриказНаОплатуПоСреднему"); ДокНаОплатуПоСреднему.Новый(); КонецЕсли; ДокНаОплатуПоСреднему.Сотрудник = Сотрудник; ДокНаОплатуПоСреднему.Начало = Начало; ДокНаОплатуПоСреднему.Записать(); |
|||
25
e-9
15.08.14
✎
16:51
|
(24) ДокНаОплатуПоСреднему - это как раз реквизит. Был.....:)
все переделал |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |