|
v7: Создание документа | ☑ | ||
---|---|---|---|---|
0
Slypower
07.09.15
✎
13:47
|
Добрый день. Помогите разобраться с дилеммой.
Создается документ. При создании автоматически создается 2-й. Вот код: Док.Новый(); Док.НомерДок=НомерДок; Док.ДатаДок=ДатаДок; Док.Сумма=Сумма; Док.Контрагент=Клиент; Док.Договор=Клиент.ОсновнойДоговор; Док.Валюта=Валюта; Док.Фирма=Фирма; Док.Автор=Автор; Док.Комментарий=Комментарий; Док.Курс=Курс; Док.АвтоВремяКонецДня(); Док.Записать(); Док.Провести(); При создании 2го дока, он имеет время создания ранее чем первый, но это не критично. Вопрос в том, что в журнале документов 2й документ виден без контрагента и при восстановлении последовательности выскакивает ошибка: Не найден контрагент. Если вручную открыть 2-1 док, то контрагент виден, при сохрании, он появляется. При перепроведении 1-го документа, во 2-м тоже появляется контрагент. Почему тогда при начальном создании его нет? |
|||
1
Масянька
07.09.15
✎
13:49
|
(0) Что значит "При создании автоматически создается 2-й"?
|
|||
2
Slypower
07.09.15
✎
13:53
|
(1) При создании 1-го документа, по нажатию кнопки ОК или Провести, создается 2-й документ
|
|||
3
ДенисЧ
07.09.15
✎
13:55
|
(2) расстрелять
|
|||
4
1Сергей
07.09.15
✎
13:55
|
(2) ещё и проводится?
|
|||
5
Масянька
07.09.15
✎
13:58
|
(2) Ищи, где косяк (не путать с табаком).
|
|||
6
Slypower
07.09.15
✎
14:00
|
(4) а почему бы и нет?
|
|||
7
Slypower
07.09.15
✎
14:01
|
Начало пропущено:
Док=СоздатьОбъект("Документ.Документ"); Док.ВыбратьДокументы(); |
|||
8
Масянька
07.09.15
✎
14:02
|
(7) Давай уж весь папирус...
|
|||
9
aka AMIGO
07.09.15
✎
14:05
|
"Документ.Документ" - интересная конструкция :)
|
|||
10
Slypower
07.09.15
✎
14:51
|
(9) Хорошо, Документ.НазваниеДокумента.
Как называется документ - это уже каждому свое, и это строчка никак не влияет на мою проблему |
|||
11
Масянька
07.09.15
✎
14:59
|
(10) Показывай весь папирус (код).
|
|||
12
HawkEye
07.09.15
✎
15:11
|
(7) ужас какой и выбрать и Новый в одном месте, в чем сакральный смысл сего опуса?
и собс-но... вопрос в чем? "При создании 1-го документа, по нажатию кнопки ОК или Провести, создается 2-й документ" - в этом? при чем тут тогда код из (0) ? |
|||
13
HawkEye
07.09.15
✎
15:13
|
(0) "Почему тогда при начальном создании его нет?" - потому что он (контрагент) проставляется при интерактивном проведении документа.
|
|||
14
Slypower
07.09.15
✎
15:16
|
(12) Это так нужно, это проверки:
Док=СоздатьОбъект("Документ.НазваниеДокумента"); Док.ВыбратьДокументы(); Если Док.НайтиПоНомеру(НомерДок,ДатаДок)<>1 Тогда Док.Новый(); Док.НомерДок=НомерДок; Док.ДатаДок=ДатаДок; Док.Сумма=Сумма; Док.Контрагент=Клиент; Док.Договор=Клиент.ОсновнойДоговор; Док.ДатаОплаты=глБанковскаяДата(Док.ДатаДок, (Док.Договор.ГлубинаКредита)); Док.Валюта=Валюта; Док.Фирма=Фирма; Док.Автор=Автор; Док.Комментарий=Комментарий; Док.Курс=Курс; Док.АвтоВремяКонецДня(); Док.Записать(); Док.Провести(); Иначе Док.ВыбратьПоНомеру(НомерДок,ДатаДок); Если Док.ПометкаУдаления()=1 Тогда Док.СнятьПометкуУдаления(); КонецЕсли; Док.СделатьНеПроведенным(); Док.ДатаДок=ДатаДок; Док.Сумма=Сумма; Док.Договор=Клиент.ОсновнойДоговор; Док.ДатаОплаты=глБанковскаяДата(Док.ДатаДок, (Док.Договор.ГлубинаКредита)); Док.Контрагент=Клиент; Док.Валюта=Валюта; Док.Фирма=Фирма; Док.Автор=Автор; Док.Комментарий=Комментарий; Док.Записать(); Док.Провести(); КонецЕсли; (13) Интересно то, что если не вносить сумму в документ вообще, то контрагент появляется без проблем. Значит не только при интерактивном проведении |
|||
15
palpetrovich
07.09.15
✎
15:22
|
(7) зря уточнил :)
Док.ВыбратьДокументы(); Если Док.НайтиПоНомеру(НомерДок,ДатаДок)<>1 Тогда |
|||
16
palpetrovich
07.09.15
✎
15:26
|
+(15) ну и в ветке Иначе так вернее будет:
Если Док.ВыбратьПоНомеру(НомерДок,ДатаДок)=1 Тогда ... |
|||
17
Масянька
07.09.15
✎
15:27
|
(14) А в чём состоит задача?
|
|||
18
HawkEye
07.09.15
✎
15:40
|
(14) еще веселее...
ВыбратьДокументы() - зачем это? зачем после НайтиПоНомеру, делать еще и выбратьПОНомеру? какой смысл гадать когда появляется контрагент - если можно открыть код и посмотреть? ты кем работаешь? |
|||
19
Масянька
07.09.15
✎
15:47
|
(18) Лучше перебдеть, чем не добдеть (С) :)))
|
|||
20
HawkEye
07.09.15
✎
15:51
|
+18, судя по совпадению реквизитов и наличию НомерДок и ДатаДок, ты это все из самого документа делаешь?
|
|||
21
Slypower
07.09.15
✎
15:55
|
(18)Гадать не нужно, и что не так в коде может быть, что не видно контрагента? Неужели все реквизиты нормально заполняются при таком коде, а вот контрагент очень особенный?
(17) Во 2-й Документ, который автоматически создается, никто не лазит и не изменяет вообще, все делается через первый. 2-й даже в журнале по покупателям не показывается, поэтому и идет такой перебор. Это 2 документа должны быть одинаковыми, только модули документов отличается. |
|||
22
Slypower
07.09.15
✎
15:57
|
(17) Задача в том, решить проблему: не восстанавливается последовательность, т.к. не видит контрагент документа №2
|
|||
23
Масянька
07.09.15
✎
15:58
|
(22) Абсолютно ничего не поняла...
|
|||
24
HawkEye
07.09.15
✎
15:59
|
(21) еще раз, для тех кто в танке, ты не тот кусок кода смотришь...
(22) зачем контрагентУ видеть документ №2? )) |
|||
25
Slypower
07.09.15
✎
16:05
|
(24) Почему при 2-х одинаковых документах (одинаковые модули формы)возникла данная проблема?
Почему один при восстановлении последовательности проводится, а второй нет, т.к. пишет: "не заполнен контрагент"? Абсолютно одинаковые, только смысл работы: один увеличивает долг, второй уменьшает. И это прописано в модуле документа. Второй раз напишу: при повторном проведении документа 1, во 2м документе контрагент уже заполняется. Что ему мешаем при первом заполниться? |
|||
26
HawkEye
07.09.15
✎
16:11
|
(24)
1. если один увеличивает, а другой уменьшает - это не одинаковые документы 2. потому что, в одном контрагент заполнен, а во втором нет, это же логично, разве нет? 3. стопитедесятый раз повторю... кривые руки писателя кода мешают... |
|||
27
kobzon2
07.09.15
✎
16:11
|
Док.Контрагент=Клиент;
Клиент это что? Откуда берется? |
|||
28
Масянька
07.09.15
✎
16:19
|
(26) Ты смысл понял? Объясни, пожалуйста.
|
|||
29
Slypower
07.09.15
✎
16:23
|
(27) в документе 1 задаются: контрагент, клиент. Вот клиент это контрагент для документа 2
|
|||
30
HawkEye
07.09.15
✎
16:27
|
(28) еще не до конца..
юноша, создает интерактивно док1, при записи\проведении этого док1, видимо программно создается и проводится док2, у которого все реквизиты совпадают с док1, даже номер и дата (видимо юноша не в курсе про подчиненные документы, что судя по коду из (14) неудивительно).. и видимо при первом проведении док1 в док2 не попадает контрагент, а при втором попадает, вот юноша и вопрошает "а почему собственно?"... )) мне кажется так ) |
|||
31
Масянька
07.09.15
✎
16:30
|
(30) П-п-переведи (С) :))))))
Юноша не колется - зачем это всё? Описал бы задачу, знающие люди предложили бы массу нормальных вариантов... |
|||
32
Slypower
07.09.15
✎
16:30
|
(30) все так, а что в коде (14) не так? Если в нем загвоздка, так пальцем покажите. Дополнение в том, что документе 1 2 реквизита: контрагент и клиент.
|
|||
33
kobzon2
07.09.15
✎
16:31
|
Я блин вапще не понимаю как так вапще создается Док.НомерДок=НомерДок; О_о
Номер же не уникальный получается. |
|||
34
Slypower
07.09.15
✎
16:31
|
Если я правильно понимаю, Док.ВыбратьДокументы(); мешает, т.к. при первом создании еще нет данного документа?
|
|||
35
Масянька
07.09.15
✎
16:32
|
(33)
Но всё-таки знай - Ты не один. (C) |
|||
36
oslokot
07.09.15
✎
16:32
|
Даже мне стало интересно)
(32) а где в коде (14) реквизит "клиент" и какого он типа? |
|||
37
Slypower
07.09.15
✎
16:33
|
(34) нет, все таки не мешает. И почему если не задавать сумму в документе, то даже при первом проведении и создании все отображается хорошо.
|
|||
38
Масянька
07.09.15
✎
16:34
|
(36) Мне интересно - почему бы не использовать НаОсновании()?
|
|||
39
oslokot
07.09.15
✎
16:35
|
Люблю темы про клюшки
|
|||
40
Slypower
07.09.15
✎
16:35
|
(36) Клиент-справочник.Контрагенты.
из (14) Док.Контрагент=Клиент;. Вот для чего нужен этот реквизит |
|||
41
Масянька
07.09.15
✎
16:36
|
(39) Это кто там кодит (С) (пардон, вырвалось) :)))))
|
|||
42
kobzon2
07.09.15
✎
16:37
|
Давай так! Документ уже есть.
Начинает проводиться первый. Там: Док=СоздатьОбъект("Документ.НазваниеДокумента"); Услови6 Если Док.НайтиПоНомеру(НомерДок,ДатаДок)<>1 Тогда - выполняется. И: Док.Контрагент=Клиент; Там окошечко в котором написано клиент?)) Или что это за зверь?) |
|||
43
oslokot
07.09.15
✎
16:37
|
(41) откуда выражение?)
|
|||
44
aka AMIGO
07.09.15
✎
16:38
|
В цикле выбора документов создается еще один, точно такой-же документ..
И тут-же выбирается следующий документ!.. Напрашивается вопрос - а что будет с циклом? Почему-то ТС не приводит весь код обработки? Заставлять додумывать за него, не объяснив цель - это неуважение.. |
|||
45
Масянька
07.09.15
✎
16:38
|
(43) Анекдот (с бородой), в котором действующие лица вместо "х" говорили "к" (проблемы с дикцией).
|
|||
46
palpetrovich
07.09.15
✎
16:41
|
(39) это не "тема про клюшки", это совсем доугая тема ;)
|
|||
47
aka AMIGO
07.09.15
✎
16:42
|
(46) ты прав, клюшки тут по-боку..
|
|||
48
kobzon2
07.09.15
✎
16:43
|
(40) На строчке какой-нить: Док.СделатьНеПроведенным(); Если в отладчике посмотреть Док. Что тама??
|
|||
49
kobzon2
07.09.15
✎
16:46
|
+ (48) Я просто к тому что Док.ВыбратьПоНомеру(НомерДок,ДатаДок); Этого достаточно чтобы очутиться в найденном документе? Или мы все еще будем тут: Док.Новый();
|
|||
50
Slypower
07.09.15
✎
16:48
|
(49) почему там? Там же:
Если Док.НайтиПоНомеру(НомерДок,ДатаДок)<>1 Тогда Док.Новый(); Иначе Док.ВыбратьПоНомеру(НомерДок,ДатаДок); Если Док.ПометкаУдаления()=1 Тогда Док.СнятьПометкуУдаления(); КонецЕсли; Док.СделатьНеПроведенным(); КонецЕсли; |
|||
51
aka AMIGO
07.09.15
✎
16:49
|
блин.. там и цикла нет.. Просто зачем-то "Выбрать документы(...) и тут-же - найти по номеру..
|
|||
52
Масянька
07.09.15
✎
16:49
|
(50) Ну, будь ты человеком - объясни смысл белиберды...
|
|||
53
kobzon2
07.09.15
✎
16:49
|
(50) А ну да не в Док.Новый();
|
|||
54
Slypower
07.09.15
✎
16:54
|
(52) в (28) все объяснено же.
Попробую по другому. Есть контора, на нее создали карточку контрагента. У нее есть 2 магазина и более со своими директорами. Контора заплатила сумму какую-то за проданный товар. Так вот, сумму, что мы получили от нее вешаем на "Клиент" (про него и пишется все тут), и такую же сумму мы вешаем на один из магазинов "Контрагент". Мы создаем один документ, чтобы 2 не создавать в ручную, а программа уже сама создает 2-й документ. В день таких документов №1 может быть от 100, и представьте как это сокращает работу |
|||
55
Масянька
07.09.15
✎
16:56
|
(54) Ну, наконец-таки...
То есть - нужно ... А чего нужно-то? Один клиент платит за другого и что нужно в результате? Я ничего не понимаю... |
|||
56
Slypower
07.09.15
✎
16:59
|
(55) Это папка, у него 2 детей. Каждые из них работают отдельно, и заказы отдельно, и продажи отдельно, но папка платит за них. Так вот чтобы контролировать долги сыновей, мы разбрасываем папкины деньги этими доками, ведь и продажи у них разные идут.
Если так не понятно, то можно и про царей и их шнырей писать |
|||
57
Масянька
07.09.15
✎
17:04
|
(56) Плательщик/грузополучатель.
|
|||
58
Slypower
07.09.15
✎
17:15
|
(57) ааааа, ну тогда все ясно, проблема решена)))
|
|||
59
Масянька
07.09.15
✎
17:18
|
(58) И вот - кто ты после этого? Сказал бы после (17) - давно бы уже деньги в кармане лежали :(
|
|||
60
Slypower
07.09.15
✎
17:20
|
(59) а проблема в другом, что кому какие деньги - это не проблема, никто не откажется)))
Вопрос в коде, и мне так не понятно, что сделано не так и где ошибка |
|||
61
Масянька
07.09.15
✎
17:25
|
(60) Вопрос не в коде...
Вопрос в понимании поставленной задачи и не знании мат. части и типовых механизмов. Век живи - век учись (С) И не надо про продолжение поговорки. Оба варианта - самостоятельны. |
|||
62
HawkEye
07.09.15
✎
18:41
|
(33) это разные документы )) ну и так-то номер может быть не уникальным ))
(34) ничего он не мешает, он просто нафиг не нужен... вообще |
|||
63
HawkEye
07.09.15
✎
18:42
|
(44) где ты там цикл увидел? ))
|
|||
64
HawkEye
07.09.15
✎
18:45
|
(60) для начала, покажи весь код из ПриЗаписи() первого документа.
|
|||
65
alexandr1
07.09.15
✎
19:16
|
А что при проведении находится в клиент, или оно само заполняется если пустое?
|
|||
66
alexandr1
07.09.15
✎
19:30
|
В каком месте код?
|
|||
67
HawkEye
07.09.15
✎
19:39
|
(66) ну в ОбработкеПроведения() он точно не может быть )))
|
|||
68
alexandr1
07.09.15
✎
20:19
|
(67) Почему нет, может и там. А может у него на кнопку что ни будь еще повешено.
|
|||
69
HawkEye
07.09.15
✎
20:21
|
(68) вот ТАМ как раз не может,
а на кнопку что угодно может быть повешено ) |
|||
70
alexandr1
07.09.15
✎
20:48
|
(69) Не вижу никаких проблем.
|
|||
71
alexandr1
07.09.15
✎
20:59
|
(69) ПРОВОДИТЬ НЕЛЬЗЯ,СОЗДАВАТЬ МОЖНО
|
|||
72
HawkEye
07.09.15
✎
20:59
|
(70) жаль
|
|||
73
HawkEye
07.09.15
✎
21:00
|
(71) я в курсе, или это ты себе кричишь? ))
|
|||
74
aka AMIGO
07.09.15
✎
21:01
|
(63) у меня уже до автоматизма дошло сочетание ВыбратьДоки() и цикл по выборке.. Тем более, что опенконф делает это автоматически. Я потом поправился, см. (51).
Был неправ, извините :) ЗЫ. и всё равно, пост с кодом такой покоцаный, что разобраться мне лично так и не удалось.. мозги уже не те стали :) ЗЗЫ. а Масянька - молодец :) |
|||
75
alexandr1
07.09.15
✎
21:01
|
(73) Отвечаю, вдруг не видно )
|
|||
76
alexandr1
07.09.15
✎
21:02
|
(73) С учетом кода, я не удивлюсь что и туда запихнут.
|
|||
77
HawkEye
07.09.15
✎
21:03
|
(76) там ругаться будет при проведении, а раз не ругается, значит не там...
|
|||
78
alexandr1
07.09.15
✎
21:05
|
(77) согласен
|
|||
79
Slypower
08.09.15
✎
09:42
|
(64)
Процедура ПриЗаписи() //Предопределенная процедура Перем ОписаниеОш; Если глМожноЗаписатьДокумент(Контекст)=0 Тогда СтатусВозврата(0); ИначеЕсли глКонтрольДатыДокумента(Контекст, НачальнаяДатаДокумента)=1 Тогда СтатусВозврата(0); Иначе Если глПриЗаписиДокОснСФКонтр(Контекст, ВидСчетаФактуры, "ЗаписьКнигиПродаж", НачКонтрагент, НачДоговор, НачФирма, ОписаниеОш) = 0 Тогда СтатусВозврата(0); Предупреждение(ОписаниеОш, 60); Иначе НачКонтрагент = Контрагент; НачФирма = Фирма; НачВалюта = Валюта; НачДоговор = Договор; КонецЕсли; КонецЕсли; Если ПометкаУдаления()=0 Тогда Док=СоздатьОбъект("Документ.НазваниеДокумента"); //Док.ВыбратьДокументы(); Если Док.НайтиПоНомеру(НомерДок,ДатаДок)<>1 Тогда Док.Новый(); Док.НомерДок=НомерДок; Док.ДатаДок=ДатаДок; Док.Сумма=Сумма; Док.Договор=Клиент.ОсновнойДоговор; Док.ДатаОплаты=глБанковскаяДата(Док.ДатаДок, (Док.Договор.ГлубинаКредита)); Док.Контрагент=Клиент; Док.Валюта=Валюта; Док.Фирма=Фирма; Док.Автор=Автор; Док.Комментарий=Комментарий; Док.Курс=Курс; Док.АвтоВремяКонецДня(); Док.Записать(); Док.Провести(); Иначе Док.ВыбратьПоНомеру(НомерДок,ДатаДок); Если Док.ПометкаУдаления()=1 Тогда Док.СнятьПометкуУдаления(); КонецЕсли; Док.СделатьНеПроведенным(); Док.ДатаДок=ДатаДок; Док.Сумма=Сумма; Док.Договор=Клиент.ОсновнойДоговор; Док.ДатаОплаты=глБанковскаяДата(Док.ДатаДок, (Док.Договор.ГлубинаКредита)); Док.Контрагент=Клиент; Док.Валюта=Валюта; Док.Фирма=Фирма; Док.Автор=Автор; Док.Комментарий=Комментарий; Док.Записать(); Док.Провести(); КонецЕсли; КонецЕсли; КонецПроцедуры Это код в документе №1. (65) Клиента выбираем мы сами, ничего пустое не остается. http://pixs.ru/showimage/1sJPG_1555156_18717710.jpg вот пример работы |
|||
80
HawkEye
08.09.15
✎
12:10
|
(79) оставив в стороне возможность того, что док1 можно просто записать, при этом док2 - проведется...
а чего у тебя в Док1 контрагент и клиент местами поменяны на форме, это то-же какой то особый смысл имеет? |
|||
81
Slypower
08.09.15
✎
12:13
|
(80) да, имеет смысл, просто так бы не делал
|
|||
82
HawkEye
08.09.15
✎
13:07
|
(81) ну кто тебя знает... Найти и Выбрать - же используешь...
покажи модуль проведения документа2 |
|||
83
Slypower
08.09.15
✎
13:24
|
(82)
Процедура ПриЗаписи() //Предопределенная процедура Перем ОписаниеОш; Если глМожноЗаписатьДокумент(Контекст)=0 Тогда СтатусВозврата(0); ИначеЕсли глКонтрольДатыДокумента(Контекст, НачальнаяДатаДокумента)=1 Тогда СтатусВозврата(0); Иначе Если (глПриЗаписиДокОснСФКонтр(Контекст, ВидСчетаФактуры, "ЗаписьКнигиПродаж", НачКонтрагент, НачДоговор, НачФирма, ОписаниеОш) = 0) Тогда СтатусВозврата(0); Предупреждение(ОписаниеОш, 60); Иначе НачКонтрагент = Контрагент; НачФирма = Фирма; НачВалюта = Валюта; НачДоговор = Договор; НачСумма = Сумма; КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
84
HawkEye
08.09.15
✎
13:26
|
(83) это у тебя в модуле документа ? ))
надо все что находится в модуле документа |
|||
85
Slypower
08.09.15
✎
13:27
|
(84) нет, модуль формы
|
|||
86
Slypower
08.09.15
✎
13:29
|
(85) нет, конечно, не все. А разве имеет смысл писать Процедуру ПриОткрытии()?
|
|||
87
HawkEye
08.09.15
✎
13:29
|
(85) а нужен модуль документа, т.е. то, что выполняется при проведении и отмене проведения
|
|||
88
HawkEye
08.09.15
✎
13:30
|
(86) пока нет, я просил модуль документа
|
|||
89
Slypower
08.09.15
✎
13:32
|
(87) Все что написано в модуле документа - это код из документа "Корректировка долга", который идет из ТиС. Чтобы документ понимал, какой контрагент: добавлено:
Док=СоздатьОбъект("Документ.Документ1"); Док.ВыбратьПоНомеру(НомерДок,ДатаДок); Контрагент=Док.Клиент; |
|||
90
HawkEye
08.09.15
✎
13:36
|
(89) это в ОбработкаПроведения() такое написано?
|
|||
91
Slypower
08.09.15
✎
13:37
|
(90) Процедура ОбработкаПроведенияПоВзаиморасчетам()
|
|||
92
Slypower
08.09.15
✎
13:40
|
Все остальное - точно так как в Корректировке долга
|
|||
93
HawkEye
08.09.15
✎
13:44
|
(91) с другой стороны, зачем мне из тебя вытягивать код по строчкам....
совет: либо пригласи специалиста, чтобы сделали на месте, либо пригласи того, кто будет отвечать на те вопросы которые ему задают, не пропуская их через твой интерпретатор... |
|||
94
HawkEye
08.09.15
✎
13:45
|
+93 ну и почитай в конце концов описание метода ВыбратьПоНомеру
|
|||
95
alexandr1
08.09.15
✎
13:50
|
Лезь в отладчик и смотри что у тебя клиент когда кнопку жмешь.
Или через контекст или текущийДокумент пробуй |
|||
96
Slypower
08.09.15
✎
14:09
|
(94) (95) спасибо, этого как раз мне не хватало. Вы правы
|
|||
97
Slypower
08.09.15
✎
15:04
|
Вс оказалось проще простого. Все что в (14) работает верно. Вот что в (89) нафик не нужно. В модуле документ поиск по контрагенту вообще не нужно. Удалил - все работает как доктор прописал.
|
|||
98
alexandr1
08.09.15
✎
19:15
|
Гениально
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |