|
Создаю программно документ, а при открытии-закрытии что то в нем меняется. | ☑ | ||
---|---|---|---|---|
0
Rajva2
22.02.13
✎
09:33
|
Видимо что то забыл указать?
Потому как при открытии-закрытии документ предполагается записать изменения. Как просмотреть какие изменения происходят с реквизитами при открытии-закрытии, только не по одному что бы смотреть. Табличные части я проверил, там ничего не меняется. База Бухгалтерия предприятия, редакция 2.0 (2.0.44.10) РКО = Документы.РасходныйКассовыйОрдер.СоздатьДокумент(); РКО.Дата = ДатаДокумента; РКО.Организация = Организация; РКО.ВидОперации = Перечисления.ВидыОперацийРКО.ПрочийРасход; РКО.СчетКасса = ПланыСчетов.Хозрасчетный.НайтиПоКоду("50.01"); РКО.СчетУчетаРасчетовСКонтрагентом = ПланыСчетов.Хозрасчетный.НайтиПоКоду("76.09.3"); РКО.СубконтоДт1 = ФИО.Ссылка; РКО.СубконтоДт2 = ДоговорФИО.Ссылка; РКО.ВалютаДокумента = Справочники.Валюты.НайтиПоНаименованию("руб"); РКО.СуммаДокумента = стр.Сумма; РКО.Выдать = ФИО.ПолноеНаименование(); РКО.Основание = "На приобретение товара "+Товар.Наименование; РКО.ПоДокументу = ФИО.ДокументУдостоверяющийЛичность; РКО.Ответственный = ИмяПользователя(); СтрРКО = РКО.РасшифровкаПлатежа.Добавить(); СтрРКО.СуммаПлатежа = РКО.СуммаДокумента; СтрРКО.СтатьяДвиженияДенежныхСредств = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("000000007"); РКО.Записать(РежимЗаписиДокумента.Проведение); |
|||
1
Serg_1960
22.02.13
✎
09:43
|
Обход реквизитов через метаданные и сравнение значений объекта и его ссылки.
|
|||
2
Rajva2
22.02.13
✎
11:43
|
А как организовать цикл по реквизитами документа из предопределенной процедуры?
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка) Для Каждого текРеквизит Из метаданные.документы.РасходныйКассовыйОрдер Цикл Как указать что это текущий документ? |
|||
3
Serg_1960
22.02.13
✎
20:54
|
(хоть и поздно, но отвечу)
Во всех процедурах и функция модуля объекта "сам" объект доступен через "ЭтотОбъект" (или просто "Объект"), а его ссылка - "ЭтотОбъект.Ссылка" или "Ссылка". Это же букварь :) И посмотри v8: Поиск "движений" по регистратору - там в п.44 пример обхода всего-всего по метаданным. |
|||
4
GenV
22.02.13
✎
21:04
|
(0) Проще отладчиком пройтись проверяя походово Модифицированность()
|
|||
5
Rajva2
25.02.13
✎
07:27
|
Спасибо, всем, но никак не могу разобраться, что же такое меняется.
По Модифицированности прошел все реквизиты и табличные части. Ничего не меняется. И тем не мение документ хочет записаться после открытия... Может кто подскажет чего я забыл указать? РКО = Документы.РасходныйКассовыйОрдер.СоздатьДокумент(); РКО.Дата = ДатаДокумента; РКО.Организация = Организация; РКО.ВидОперации = Перечисления.ВидыОперацийРКО.ПрочийРасход; РКО.СчетКасса = ПланыСчетов.Хозрасчетный.НайтиПоКоду("50.01"); РКО.СчетУчетаРасчетовСКонтрагентом = ПланыСчетов.Хозрасчетный.НайтиПоКоду("76.09.3"); РКО.СубконтоДт1 = ФИО.Ссылка; РКО.СубконтоДт2 = ДоговорФИО.Ссылка; РКО.ВалютаДокумента = Справочники.Валюты.НайтиПоНаименованию("руб"); РКО.СуммаДокумента = стр.Сумма; РКО.Выдать = ФИО.ПолноеНаименование(); РКО.Основание = "На приобретение товара "+Товар.Наименование; РКО.ПоДокументу = ФИО.ДокументУдостоверяющийЛичность; РКО.Ответственный = ИмяПользователя(); СтрРКО = РКО.РасшифровкаПлатежа.Добавить(); СтрРКО.СуммаПлатежа = РКО.СуммаДокумента; СтрРКО.СтатьяДвиженияДенежныхСредств = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("000000007"); РКО.Записать(РежимЗаписиДокумента.Проведение); |
|||
6
Godofsin
25.02.13
✎
07:32
|
(5) Выложи код ПриОткрытии()
|
|||
7
Wobland
25.02.13
✎
07:32
|
(5) при открытии у тебя что-то происходит, но ты нам показываешь совсем не открытие. зри в модуль формы
|
|||
8
Rajva2
25.02.13
✎
08:04
|
А вот такие же штуки при создании документа не надо заполнять?
ЭлементыФормы.РасшифровкаПлатежа.ТекущаяСтрока = РасшифровкаПлатежа[0]; |
|||
9
Wobland
25.02.13
✎
08:07
|
(8) при создании документа формы может и не быть
|
|||
10
Godofsin
25.02.13
✎
08:13
|
(8) No.
|
|||
11
Песец
25.02.13
✎
08:17
|
Возможно при открытии типизируются пустые поля.
|
|||
12
Rajva2
25.02.13
✎
08:21
|
ну вроде нашел.. вот этой строки не хватало.
РКО.Контрагент = Справочники.Контрагенты.ПустаяСсылка(); Хотя нигде этот реквизит не используется. |
|||
13
Godofsin
25.02.13
✎
08:26
|
(12) хню ты нашел.
|
|||
14
Rajva2
25.02.13
✎
08:29
|
(13) однако при создании с таким реквизитом документ не просится записаться при интерактивном открытии/закрытии.
|
|||
15
Godofsin
25.02.13
✎
08:35
|
(14) ну круто, чо. То есть ты считаешь, что проблемой было отсутствие пустой ссылки у контрагента?
|
|||
16
Песец
25.02.13
✎
08:54
|
(15) Там составной тип контрагенты+физлица, соответственно в новом документе имеет значение Неопределено.
|
|||
17
Serg_1960
25.02.13
✎
09:14
|
(12) "...Хотя нигде этот реквизит не используется." - а с кем у вас РКО? :)
|
|||
18
Песец
25.02.13
✎
09:53
|
(17) С СубконтоДт1 :)
|
|||
19
Reset
25.02.13
✎
10:03
|
Может правильней было таки не пустую ссылку, а "ФИО.Ссылка" или "ФИО"?
|
|||
20
Reset
25.02.13
✎
10:04
|
Этот реквизит как минимум, в форме списка используется
|
|||
21
Serg_1960
25.02.13
✎
10:04
|
В (0) постоянно фигурирует какой-то инкогнито по кличке "ФИО"... и вдруг неожиданно (12)о_о Логичнее смотрится ссылка из справочника физических лиц там. Как бы.
Автор молчит - мы ёрничаем. |
|||
22
Reset
25.02.13
✎
10:05
|
(21) Скорее всего физлицо ага
|
|||
23
Песец
25.02.13
✎
10:06
|
(18+) если вид операции "прочее", дается выбор счета дт и становятся доступными соответствующие поля аналитики дт1, дт2, дт3.
|
|||
24
Песец
25.02.13
✎
10:07
|
(19) Правильно как написано в при выборе вида операции.
|
|||
25
Serg_1960
25.02.13
✎
10:07
|
(22) Ага. И поле это в форме, наверняка, с автоотметкой незаполненного и прочими свойствами, которые умоляют - "Заполни меня!" :)
|
|||
26
Reset
25.02.13
✎
10:12
|
(24) То есть, ты согласен с автором, что реквизит в документе не нужен, добавлен по ошибке и нужно его содержать пустым? :)
|
|||
27
Rajva2
25.02.13
✎
10:13
|
тогда чем отличается РКО.СубконтоДт1 и РКО.Контрагент
Я так понял, что документ просило записаться, из-за того что при создании был не назначен тип РКО.Контрагент. Можно конечно сделать и РКО.Контрагент = ФИО.Ссылка |
|||
28
Pasha
25.02.13
✎
10:14
|
(0) Открываешь отладчик процедура ПриОткрытии(), в табло выводишь показания Объект.Модифицированность() и тыкаешь на F11 до тех пор. пока она не станет Истина.. там и найдешь. что меняется :)
|
|||
29
Serg_1960
25.02.13
✎
10:17
|
PS: короче, не знаю у кого как, а у меня в УПП тему автора создаёт вызов УправлениеДенежнымиСредствами.ЗаполнитьРеквизитыРасчетногоДокумента() при открытии формы. Там происходит анализ объекта и "дозаполнение" значений, которые автор считает ненужным заполнять.
|
|||
30
Godofsin
25.02.13
✎
10:18
|
(29) палтус, что там также
|
|||
31
Rajva2
25.02.13
✎
10:48
|
прошел все по (28)
Как и думал Модифицированность()=истина на Процедура УстановитьТипКонтрагент() ИмяСправочника = "Контрагенты"; ИмяРасчетногоДокумента = "АвансовыйОтчет"; Если ВидОперации = Перечисления.ВидыОперацийРКО.ВыдачаПодотчетномуЛицу ИЛИ ВидОперации = Перечисления.ВидыОперацийРКО.ВыплатаЗаработнойПлатыРаботнику Тогда ИмяСправочника = "ФизическиеЛица"; ИначеЕсли ВидОперации = Перечисления.ВидыОперацийРКО.ПрочийРасход Тогда // Прочее оприходование денежных средств пока не реализовано. КонецЕсли; Если ТипЗнч(Контрагент) <> Тип("СправочникСсылка." + ИмяСправочника) Тогда Контрагент = Справочники[ИмяСправочника].ПустаяСсылка(); КонецЕсли; КонецПроцедуры // УстановитьТипКонтрагент() И устанавливается Контрагент = Справочники.Контрагенты.ПустаяСсылка(); Так правильно так оставить? Или все же РКО.Контрагент = ФИО.Ссылка |
|||
32
hhhh
25.02.13
✎
11:05
|
(31) в свою фигню в (0) вставь
РКО.Контрагент = Справочники.Контрагенты.ПустаяСсылка(); |
|||
33
Rajva2
25.02.13
✎
11:10
|
(32) почему "фигню" ?
|
|||
34
Rajva2
25.02.13
✎
11:17
|
Правильнее наверное будет все же РКО.Контрагент = ФИО.Ссылка
Тогда в журнале РКО колонка Контрагент заполнена :) |
|||
35
Песец
25.02.13
✎
15:32
|
(34) И что произойдет при открытии документа?
Если скорость не критична, создай и открой форму, потом закрой и запиши, чтобы отработали все необходимые процедуры. Этим ты гарантируешь, что все будет заполнено корректно, если например в типовой конфигурации изменят РКО.Контрагент = Справочники.Контрагенты.ПустаяСсылка() на что-нибудь другое, тебе ничего менять не надо. |
|||
36
Песец
25.02.13
✎
15:33
|
(26) Я считаю что документ надо заполнять так, как задумано в типовой.
|
|||
37
Evrepid
25.02.13
✎
15:35
|
Отладчиком найдешь все.
|
|||
38
Reset
25.02.13
✎
17:10
|
(36) Не принимается. Это отговорка, не имеющая под собой основы. Не задумано так в типовой. Смотри, автор подготавливает документ полностью, даже проводит в конце. Почему контрагент должен быть пустым? В типовой так задумано, чтоб был пустой? Пустой - правильно, заполнен - неправильно?
Да зайди на форму документа хотя бы, увидишь у элемента управления "подчеркивать незаполненное", то есть его заполнение, как минимум, рекомендуется. Вон, даже ТС дошел до этого:) --> (34) |
|||
39
Reset
25.02.13
✎
17:15
|
Прочитал рекомендацию заполнять документ открытием его формы ((35)). Вопросов больше не имею ;)
|
|||
40
Rajva2
26.02.13
✎
05:20
|
может это конечно и косяк БП редакция 2.0 (2.0.44.10), но при интерактивном заполнении всего необходимого в РКО по РКО.ВидОперации = Перечисления.ВидыОперацийРКО.ПрочийРасход реквизит РКО.Контрагент остается Справочники.Контрагенты.ПустаяСсылка()
Вот и думаю надо ли делать РКО.Контрагент = ФИО.Ссылка ? |
|||
41
Godofsin
26.02.13
✎
05:33
|
(40) Эээ... а как по-твоему программа должна узнать, кого подставлять?
|
|||
42
Rajva2
26.02.13
✎
06:19
|
(41) я не знаю как и что она должна подставить, но этот реквизит РКО.Контрагент остается пустым при интерактивном заполнении.
И тогда я пытаюсь понять почему (13) ? |
|||
43
Godofsin
26.02.13
✎
06:22
|
(42) Кому ты деньги отдал этим расходником?
|
|||
44
Rajva2
26.02.13
✎
06:49
|
(43) РКО.СубконтоДт1 = ФИО.Ссылка
Логично понятно, что надо сделать еще и РКО.Контрагент = ФИО.Ссылка, но почему в типовой этого не делается? |
|||
45
Godofsin
26.02.13
✎
06:57
|
(44) Видимо потому, что разработчики не учитывали, что ты хочешь заполнять документ программно и при этом указав неполные данные чтоб остальные заполнялись на автомате. Грубо говоря, все процедуры автозаполнения, изменения и контроля описаны в модуле формы и объекта документа, а также в общих модулях. Если тебе надо, чтобы они отрабатывали при программном заполнении док-та, тебе нужно их в ручную перенести в твою обработку создания док-та и/или вызывать их.
|
|||
46
Godofsin
26.02.13
✎
07:01
|
+ (45) я так думаю, РКО.СубконтоДт1 должен заполняться на основе РКО.Контрагент, а не наоборот
|
|||
47
Песец
26.02.13
✎
07:43
|
(46) При виде операции "прочее" субконты заполняются непосредственно, т. к. пользователь выбирает счет сам.
Если (при виде операции прочее) заполнить Контрагент любым значением, отличным от пустого контрагента, например как (34), то будет та же проблема, описанная в (0), т. к при открытии формы в реквизит Контрагент будет записана пустая ссылка. Для решения (0) надо либо в процедуру заполнения скопипастить соответствующей код из типовой конфы, либо как я предложил в (35) программно открыть форму заполненного документа, чтобы отработал код типовой конфы ПриОткрытии, вызывающий появление сабжа. В этом случае если например в последующих релизах конфы в док будет добавлен реквизит аналогичный "Контрагент", т. е. не заполняется, но типизируется, сабж не появится, т. к. отработает код типовой конфы. |
|||
48
Песец
26.02.13
✎
07:52
|
(45)(46) Разработчики учли, что пользователь захочет сам выбирать счет, на котором может вовсе не быть субконто контрагенты. Для чего и предусмотрели вид операции "прочее". Реквизиты СубконтоДт(1,2,3) типизируются при выборе счета и делаются доступными пользователю.
|
|||
49
Godofsin
26.02.13
✎
07:58
|
(47) (48) Да вполне возможно. Я вел к тому, что ТС надо было бы сначала разобраться в механизме, прежде чем наугад программно подставлять значения
|
|||
50
Rajva2
26.02.13
✎
08:07
|
(45) я заполнял интерактивно, а не программно. И все равно РКО.Контрагент=Справочники.Контрагенты.ПустаяСсылка()
(47) да правильно. В (0) я не досмотрел и не учел, что РКО.Контрагент надо заполнить, вернее просто определить. Подумал, что РКО.СубконтоДт1 = ФИО.Ссылка будет достаточно. Но остается вопрос. РКО.Контрагент=Справочники.Контрагенты.ПустаяСсылка() //типовой механизм, при котором в журнале естественно не заполняется колонка Контрагент и неудобно полльзователю. или РКО.Контрагент=ФИО.Ссылка //не типовой механизм, но более удобный пользователю |
|||
51
Песец
26.02.13
✎
08:16
|
(50) Закомментируй заполнение пустой ссылкой в модуле формы. Непонятно зачем в типовой так сделано - счет дт может не иметь аналитики по контрагентам.
Также не забывай, что при программном заполнении лучше типизировать реквизиты вида СубконтоД(К)(1,2,3) в зависимости от выбранного счета, т. к. в незаполненных останется Неопределено, это значение и запишется в бухрегистр и в осв ты увидишь незакрывающиеся остатки, т. к. в одних проводках Неопределено, а в других ЧтоТо.ПустаяСсылка. |
|||
52
Rajva2
26.02.13
✎
08:54
|
(51) там не совсем контрагент. Посмотри (31)
К тому же я все равно оставлю в программном заполнении реквизитов РКО.Контрагент=ФИО.Ссылка, что бы было удобно пользователям. Кстати это ни чем не чревато? По поводу РКО.СубконтоДт3... тут еще не совсем понятно, вроде как после переноса бухгалтер будет сам дозаполнять документ. Но тему я понял. Заострю на этом внимание. |
|||
53
Песец
26.02.13
✎
09:18
|
(52) Убедись, что при открытии формы Контрагент не будет затираться пустой ссылкой.
По поводу РКО.СубконтоДт3 не надо ничего понимать, скопипасть из типовой процедуру которая по выбранному счету типизирует поля-субконто, потом уже их заполняй, это позволит оставлять некоторые субконто незаполненными без последствий. |
|||
54
Rajva2
26.02.13
✎
09:56
|
(53) Все Ок. Контрагент не затирается, СубконтоДт3 так и остается "неопределено".
Думаю на этом можно и остановиться. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |