|
Реквизит для Объекта и Ссылки | ☑ | ||
---|---|---|---|---|
0
Mikhail Volkov
18.02.16
✎
15:00
|
Запутался в конец со значением реквизита для Объекта и Ссылки. Открываю документ, устанавливаю, и проверяю, что не 0:
Объект.МойРеквизит = МояФункция(); Сообщить("МойРеквизит = " + МойРеквизит); Провожу документ, по шагам отслеживаю... в процедуре проведения вызывается процедура из менеджера, куда передает мой документ как ссылку. А там Ссылка.МойРеквизит = 0!? Как сделать, чтобы Ссылка.МойРеквизит имел нужное мне значение МояФункция()? |
|||
1
mikecool
18.02.16
✎
15:06
|
эээ, ты прикалываешься?
|
|||
2
Mikhail Volkov
18.02.16
✎
15:13
|
(1) Нет, МойРеквизит перед проведением успевает сброситься в 0?
|
|||
3
mikecool
18.02.16
✎
15:15
|
как бы объект <> ссылка
ссылка - то , что в базе объект - то, что в форме как то так |
|||
4
zak555
18.02.16
✎
15:15
|
передавай не ссылку, а объект
|
|||
5
Mikhail Volkov
18.02.16
✎
15:25
|
(3) т.е. до записи возможно объект <> ссылка, а запишется после проведения!? Странно как-то...
(4) не хочется в ОбработкаПроведения() вносить изменения |
|||
6
Mikhail Volkov
18.02.16
✎
15:29
|
(3) Не скорее МойРеквизит перед проведением успевает сброситься в 0. Вот только где, как это отловить?
|
|||
7
Михаил Козлов
18.02.16
✎
15:29
|
(5) "т.е. до записи возможно объект <> ссылка, а запишется после проведения!" после записи. Если проведение не выполнится - отменится транзакция и реквизит останется старым.
|
|||
8
Карупян
18.02.16
✎
15:30
|
сделай замер, там поиск по ИмяРеквизита
|
|||
9
Михаил Козлов
18.02.16
✎
15:30
|
(7) В предопределенных процедурах объекта: ПередЗаписью, ПриЗаписи, проведении.
|
|||
10
Лефмихалыч
18.02.16
✎
15:32
|
>А там Ссылка.МойРеквизит = 0
все правильно. Значение не записано еще в базу. Если ты попытаешься получить это ПриЗаписи, то оно там уже будет |
|||
11
Mikhail Volkov
18.02.16
✎
15:41
|
(7) Все же вначале объект записывается, становится ссылка = объект, проводится... если неудачно, запись отменяется!? Значит все же МойРеквизит перед проведением успевает сброситься в 0.
(8) Можно подробнее? не делал... |
|||
12
GROOVY
18.02.16
✎
15:50
|
Объект.МойРеквизит и МойРеквизит как бы разные вещи...
|
|||
13
GROOVY
18.02.16
✎
15:51
|
И я так понимаю это УФ. И все это в событии Перед]записью?
|
|||
14
Mikhail Volkov
18.02.16
✎
15:55
|
(12) в (0) Сообщить("МойРеквизит = " + Объект.МойРеквизит); - не дописал
(13) Да УФ, в модуле формы до записи (или вручную): Объект.МойРеквизит = МояФункция(); |
|||
15
GROOVY
18.02.16
✎
15:56
|
(14) Событие какое?
Реквизит какой тип имеет? |
|||
16
Mikhail Volkov
18.02.16
✎
16:04
|
(15) Документ СписаниеБезналичныхДенежныхСредств, событие при ПересчитатьКурсКонвертации(); (например, при банковских счета, валют), реквизит число КурсКонвертации. Обычно он задействован в хоз. операции КонвертацияВалюты, в остальных равен 0. А мне понадобился при ОплатеПоставщику
|
|||
17
Mikhail Volkov
18.02.16
✎
16:12
|
(16) > (например, при смене банковских счетов, валют)
|
|||
18
Mikhail Volkov
18.02.16
✎
16:28
|
(13) Да, сбрасывается в ПередЗаписью() // Очистим реквизиты документа не используемые для хозяйственной операции.
|
|||
19
Лефмихалыч
18.02.16
✎
16:29
|
(18) оно не сбрасывается, оно еще не установлено
|
|||
20
samozvanec
18.02.16
✎
16:29
|
(16) "событие при ПересчитатьКурсКонвертации(); (например, при банковских счета, валют)"
чето у меня нет таких событий |
|||
21
samozvanec
18.02.16
✎
16:41
|
короче, раз так все плохо, попробуем так:
1. сначала была транзакция 2. потом была перед записью, в которой у объекта и ссылки отличаются реквизиты даже внутрях транзации 3. потом была при записи(запись совершена, но транзакция не зафиксирована) 4. потом была обработка проведения 5. потом закончилась транзакция, и для всех тварей базы данных потерялись различия между данными ссылки и объекта как то примерно так |
|||
22
Mikhail Volkov
18.03.16
✎
04:31
|
Надо в функцию передать несколько реквизитов из формы. Вместо МояФункция(Объект.Реквизит1, Объект.Реквизит2, Объект.Реквизит3) написал МояФункция(Объект.Ссылка) - ошибок нет, но вместо значений в форме передает значения в базе.
Заменил на МояФункция(Объект) - вроде Объект - Данные формы структура, то что надо. Но Ошибка при установке значения атрибута контекста (Объект) Нельзя изменять поле, содержащее объект данных формы!? Заменил на МояФункция(ЭтотОбъект ) - Управляемая форма, дает Ошибка при вызове серверного метода по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. Заменил на МояФункция(ЭтаФорма) - примерно та же ошибка. Как правильно? |
|||
23
Mikhail Volkov
18.03.16
✎
05:16
|
В самой функции добавил: МояФункция(Знач Объект) - ошибки не стало
|
|||
24
hhhh
18.03.16
✎
07:04
|
(23) зачит ты в этой своей функции Объект меняешь.
|
|||
25
GROOVY
18.03.16
✎
07:20
|
Прошел месяц...
|
|||
26
b_ru
18.03.16
✎
07:37
|
Относительно правильно было бы
МояФункция(РеквизитФормыВЗначение("Объект") Но это только на первый взгляд, возможно там идеалогически не верно все понаписано. Лучше всего взять какую-нибудь типовую (например, УНФ - она самая маленькая и относительно простая) и посмотреть, как там реализуется проведение. |
|||
27
Лефмихалыч
18.03.16
✎
08:18
|
(22) зачем ты все это делаешь?
|
|||
28
Mikhail Volkov
18.03.16
✎
08:23
|
(27) Просто короче хотел написать, без списка реквизитов.
(24) Было желание, но обошлось. (25) Подзабыл... (26) Вызов МояФункция() на клиенте. |
|||
29
Лефмихалыч
18.03.16
✎
08:24
|
(28) я спрашиваю о задаче - что и зачем ты делаешь?
|
|||
30
Mikhail Volkov
18.03.16
✎
11:37
|
(29) Делал ERP Воссоздание управленческого учета месяц назад, а теперь попросили добавить сервис по ручной корректировки документов конвертации валюты. Из клиент-банка они грузятся с офиц. курсом. Добавил контроль курса банка по "Назначение платежа", и суммам конвертации.
С УФ мало работаю (в основном в Альфа-Авто), чем в них отличаются Объект, ЭтотОбъект, и ЭтаФорма только догадываюсь по обычным формам. |
|||
31
Mikhail Volkov
18.03.16
✎
13:43
|
(26) А теперь понадобилась функция переоформляющая Объект ПоступлениеБезналичныхДенежныхСредств на валютный р/счет по "основанию" - нахожу СписаниеБезналичныхДенежныхСредств с р/счета (той же банковской транзакции) и переношу из него суммы конвертации и курс. Как это в УФ делается?
|
|||
32
Лефмихалыч
18.03.16
✎
13:46
|
(30) ни чего не понял
|
|||
33
Mikhail Volkov
18.03.16
✎
14:21
|
(32) Из клиент-банка грузятся документы конвертации валюты с офиц. курсом (так положено по регл. учету), и по нему рассчитываются суммы после конвертации (правильно грузится только сумма документов). Это надо поправить для упр. учета по курсу банка ручками. Поправили Списание ДС с рублевого р/счета, а Поступление ДС этой же суммы (только в валюте) на валютный р/счет можно "по основанию" переоформить - вот и весь сервис. Для обычных форм пустяк, для УФ затрудняюсь.
|
|||
34
Mikhail Volkov
20.03.16
✎
15:43
|
(26) Смотрел пример на РеквизитФормыВЗначение
лЭтотОбъект = РеквизитФормыВЗначение("Объект"); лЭтотОбъект.КакаяТоПроцедураВМодулеОбъекта();// Если оно вообще нужно! ЗначениеВРеквизитФормы(лЭтотОбъект, "Объект"); Мне это хочется сделать в общем модуле МоиДоработки: &НаКлиенте Процедура РазрешеноПереоформитьПоОснованию(РезультатВопроса, ДополнительныеПараметры) Экспорт Если РезультатВопроса <> КодВозвратаДиалога.Отмена Тогда Объект.ДокументОснование = ДополнительныеПараметры.ДокументОснование; МоиДоработки.ПереоформитьПоОснованию(Объект); КонецЕсли; КонецПроцедуры В МоиДоработки: Процедура ПереоформитьПоОснованию(Знач Объект) Экспорт лЭтотОбъект = РеквизитФормыВЗначение("Объект"); // лЭтотОбъект.КакаяТоПроцедураВМоемМодуле();// Если оно вообще нужно! Основание = лЭтотОбъект.ДокументОснование; лЭтотОбъект.СуммаДокумента = Основание.СуммаКонвертации; лЭтотОбъект.СуммаКонвертации = Основание.СуммаДокумента; лЭтотОбъект.КурсКонвертации = Основание.КурсКонвертации; ЗначениеВРеквизитФормы(лЭтотОбъект, "Объект"); КонецПроцедуры Взлетит? |
|||
35
Mikhail Volkov
22.03.16
✎
15:03
|
Взлетело:
Процедура ПереоформитьПоОснованию(ЭтаФорма, Объект) Экспорт лЭтотОбъект = ЭтаФорма.РеквизитФормыВЗначение("Объект"); Основание = лЭтотОбъект.ДокументОснование; лЭтотОбъект.СуммаДокумента = Основание.СуммаКонвертации; лЭтотОбъект.СуммаКонвертации = Основание.СуммаДокумента; лЭтотОбъект.КурсКонвертации = Основание.КурсКонвертации; ЭтаФорма.ЗначениеВРеквизитФормы(лЭтотОбъект, "Объект"); КонецПроцедуры А Объект нельзя как-то получить из ЭтаФорма типа как в обычных формах: Объект = ЭтаФорма.ЭтотОбъект; Как? |
|||
36
Mikhail Volkov
22.03.16
✎
15:23
|
Или наоборот, из Объект получить ЭтаФорма? А то параметр ЭтаФорма можно использовать только в процедуре &НаСервере, хотелось сразу из &НаКлиенте
|
|||
37
Mikhail Volkov
22.03.16
✎
17:34
|
Никак?
|
|||
38
aleks_default
22.03.16
✎
17:59
|
Нникак. Раз уж объект от ссылки отличить никак, то клиент-серверное взаимодействие совсем никак.
|
|||
39
hhhh
22.03.16
✎
18:09
|
(36) на клиенте не бывает объектов, только ссылки.
|
|||
40
Карупян
22.03.16
✎
18:19
|
Объект = ЭтаФорма.Объект
Но правда это не совсем тот объект. |
|||
41
Mikhail Volkov
22.03.16
✎
18:29
|
(40) Такой Объект тоже "Управляемая форма" - если отладчиком смотреть. И не имеет реквизитов: ДокументОснование, ХозяйственнаяОперация и прочих
|
|||
42
Mikhail Volkov
23.03.16
✎
08:13
|
+ Это если вызывать из процедуры &НаКлиенте, а из &НаСервере, то Объект = ЭтаФорма.Объект - ДанныеФормыСтруктура, и все работает! Почему так?
|
|||
43
hhhh
23.03.16
✎
09:00
|
(42) ДанныеФормыСтруктура нв клиенте тоже работает. можете спокойно писать Объект.ДокументОснование, Объект.ХозяйственнаяОперация &НаКлиенте
|
|||
44
Mikhail Volkov
23.03.16
✎
11:10
|
В форме самого документа &НаКлиенте - Да. У меня процедура ПереоформитьПоОснованию(ЭтаФорма) в общем модуле (используется не только этим типом документов). Если ее вызвать из формы Процедура РазрешеноПереоформитьПоОснованию() &НаКлиенте, то Ошибка при вызове серверного метода.
по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа Добавил &НаСервере Процедура ПереоформитьПоОснованиюНаСервере() - из нее работает как надо. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |