Имя: Пароль:
1C
1С v8
Создание документа во время записи другого
,
0 dexxxqqq
 
01.05.15
18:24
Здравствуйте, уважаемые участники. УТ 11. Задача: при записи документа "1" создать документ "2" и ссылку на него проставить в документ "1". Никак не врублюсь: если прописать это в события ПриЗаписи или ПослеЗаписи, то проставить ссылку уже не получается. Что я делаю не так?

Цель: указание потерь в документе перемещения и создание документа СписаниеНедостачТоваров автоматически, с дальнейшим редактированием.
1 wertyu
 
01.05.15
18:38
(0) нельзя создавать объект при создании другого объекта, сделай обработку
2 DJ Anthon
 
01.05.15
18:45
(0) я ожиданием сделал, использовал глобальный список документов, но это не считается хорошим тоном
3 Garykom
 
гуру
01.05.15
18:53
(0) тебе это на сервере надо делать?

в смысле запись документа 1 это интерактивно юзверем или может даже обработкой программно и тоже нужно создать док 2 ?
4 RomanYS
 
01.05.15
19:02
почему не ПередЗаписью?
лень обработку заполнения писать?
5 dexxxqqq
 
01.05.15
19:05
(2) Да, кстати, тоже вариант.
(3) Интерактивно юзверем. Он сам создает док 1.
(4) Ну а если документ с ошибкой не запишется, а юзверь раздумает потом его записывать? У меня останется созданный моим быдлокодом документ.
6 RomanYS
 
01.05.15
19:09
(5) ПередЗаписью вызывается после всех действий пользователя, и пользователь уже не должен влиять на процесс. Если не проходят какие-то проверки - проверяй Отказ.
7 RomanYS
 
01.05.15
19:12
а вообще логичнее связывать документы через реквизит в создаваемом документе (+критерий отбора для быстрого поиска) или в регистре сведений
8 dexxxqqq
 
01.05.15
19:15
(7) Я и пытаюсь в документе "1" таким образом прописать реквизит (ссылку на документ "2"). Не выходит нифига. Сейчас свой быдлокод покажу.
9 dexxxqqq
 
01.05.15
19:16
[code]
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    Если Объект.ДокументНедостач = Документы.СписаниеНедостачТоваров.ПустаяСсылка() тогда
        Недостач = Документы.СписаниеНедостачТоваров.СоздатьДокумент();
        Недостач.Записать();
        Объект.ДокументНедостач = Недостач.Ссылка;
    Иначе
        Недостач = Объект.ДокументНедостач;
    КонецЕсли;
КонецПроцедуры[/code]
10 RomanYS
 
01.05.15
19:27
(8) (9) "Не выходит нифига" - конкретнее
ошибка, тогда давай текст ошибки
Если ошибки нет, но ты не видишь результата - запускай отладчик
11 dmpl
 
01.05.15
19:30
(8) А надо наоборот - чтобы документ 2 ссылался на документ 1.
12 RomanYS
 
01.05.15
19:30
Кстати, например, в типовой БП2 при записи авансового отчета создаются СФ и подставляются в документ. Можно посмотреть как это делает 1С
13 Garykom
 
гуру
01.05.15
19:30
(9) веселый код, особенно условие )) а если тип реквизита "Объект.ДокументНедостач" скажем доклюбаяссылка?
14 RomanYS
 
01.05.15
19:31
(11) +1 именно про это я и писал в (7)
15 dexxxqqq
 
01.05.15
19:34
(10) Не, ошибок нет. "Не выходит нифига" - в момент события ПередЗаписьюНаСервере уже поздняк писать туда ссылку, куда я хочу.
(13) Нет, не любая. Только СписаниеНедостачТоваров
(11) Аааа.. Понятно.. А как мне его потом найти, чтобы при редактировании документа "1" изменить и документ "2"?
16 RomanYS
 
01.05.15
19:39
(15) "ПередЗаписьюНаСервере уже поздняк писать.." - почему?
"А как мне его потом найти.." -  посмотри в любой типовой, как ищется и перезаполняется СФ, например, в реализации.
17 dexxxqqq
 
01.05.15
19:42
(16) Хороший вопрос. Пока не понимаю почему, но не пишет. Поле потом пустое... Может лыжи не едут...
(7) Теперь более внимательно прочитал, про критерии отбора понял. Спасибо.
18 RomanYS
 
01.05.15
19:43
"Может лыжи не едут." - отладчик тут точно эффективнее любого форума
19 wertyu
 
01.05.15
19:50
(9) новенькое, обычно путевой лист
20 dexxxqqq
 
01.05.15
19:59
(18) Отладчик мне ничего интересного не сказал. Вижу, что не сохраняет ссылку и все. Даже на другой документ ставлю ссылку, все равно в Объект.ДокументНедостач она не сохраняется.
21 ДенисЧ
 
01.05.15
20:00
хм...
Я понимаю, что наивен, как тысяча чертей... Но почему бы объекту не сказать Записать()?
22 ice777
 
01.05.15
20:03
неверная методология.. нах еще документ городить. пишите в регистры. Потом выбирайте данные, если уж так напрямую данные друг от друга зависят.
23 dexxxqqq
 
01.05.15
20:06
(21) Была такая мысль, но ругается

Метод объекта не обнаружен (Записать)
        Объект.Записать();
24 ДенисЧ
 
01.05.15
20:06
(23) Мда....
А откуда ты взял переменную Объект?
25 dexxxqqq
 
01.05.15
20:06
(22) Ну да, это мне еще в первых постах сказали. Но почему-то продолжают помогать)))
26 dmpl
 
01.05.15
20:07
(15) Если при редактировании документа 1 надо менять и документ 2 - рекомендую просто поправить обработку проведения документа 1, чтобы она делала движения по всем нужным регистрам + печатную форму документа 2. Отдельный документ нужен если данные могут не совпадать, либо нужна связь 1 ко многим.
27 dexxxqqq
 
01.05.15
20:08
(24) Мозг с непривычки перегрелся...
28 Garykom
 
гуру
01.05.15
20:09
Блин да поменяй уже ссылки местами и не ... мозг

при записи док1 создавать док2, ссылку на док1 засовывать в док2

при необходимости легко можно выбрать док2 с реквизитом = док1...
29 ice777
 
01.05.15
20:10
(24) а не нужен нахрен новый объект в таком случае. нефиг сущности городить. но я не претендую на истину в последней инстанции. недаром документы разные существуют, не только док "СделатьВсё".
30 dexxxqqq
 
01.05.15
20:10
(28) Да, уже делаю так. Спасибо))
31 wertyu
 
01.05.15
20:11
(30) а лучше сделай сразу обработку
32 Drac0
 
01.05.15
20:15
(9) Не так надо

Объект.ДокументНедостач = Недостач.Ссылка;

А так

ТекущийОбъект.ДокументНедостач = Недостач.Ссылка;
33 Drac0
 
01.05.15
20:17
А чтобы не путаться, делай в модуле объекта, передавая допсвойство. А то будешь потом бегать по формам в поисках функционала.
34 RomanYS
 
01.05.15
20:19
+(33) а в типовой лучше в подписку
35 dexxxqqq
 
01.05.15
20:53
(32) Так и правда заработало
Всем больше спасибо! С праздником!
36 mistеr
 
01.05.15
23:12
(35) А весь этот геморрой для того, чтобы сэкономить юзеру 1 нажатие кнопки "создать док2 на основании"?
37 ilkoder
 
01.05.15
23:22
нет ничего хуже чем при записи-проведении 1 документа делать что-то с другими, сделайте отдельную кнопку и пишите чего хотите, то потом начнете месяц закрывать документы перепроводить - а они потянут за собой создание-пересоздание или при удалении 1 - чего делать со ссылками на созданные другие.
38 Фокусник
 
02.05.15
00:10
(1) пора уже забывать ограничения 7ки как страшный сон ;)
39 Фокусник
 
02.05.15
00:11
(37) разрабы типовых с тобой не согласны. Например док.реализация вполне себе автоматически перезаполняет счет-фактуру ;)
40 EvgeniuXP
 
02.05.15
00:21
(0) см. базовый курс 1-ый модуль (Гилев)
41 mistеr
 
02.05.15
12:45
(39) Перезаполняет -да, но не создает без участия пользователя.
42 RomanYS
 
02.05.15
13:07
(41) посмотри авансовый отчет в БП2, закладка "прочие"
43 Фокусник
 
02.05.15
13:12
(41) Счет-фактуру автоматом нельзя создавать, т.к. она не каждый раз нужна. В (0) документ нужен каждый раз...
44 mistеr
 
02.05.15
21:57
(43) Если КАЖДЫЙ раз без исключений, то отдельный документ вообще не нужен.
45 sanja26
 
02.05.15
22:22
(0) перед записью подучаешь ссылку нового,  помещаешь в доп. свойства объекта, а при записи уже создаешь 2й документ со ссылкой из доп. свойств этого.
46 Garykom
 
гуру
02.05.15
22:24
(45) в нашей провинции такое называют "Через Ширшу в Маймаксу"
47 sanja26
 
02.05.15
22:25
(37) ничего плохого в этом нет, кроме того, что получается транзакция в транзакции и при ошибке записи второго документа вфлетит ошибка, никакие обертки в попытки не помогут.
48 Фокусник
 
02.05.15
23:42
(44) предлагаешь существенно переписать типовой документ (добавить в него функционал из другого документа)? ИМХО, не рационально...
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой