| 
    
        
     
     | 
    
    
  | 
Реквизит для Объекта и Ссылки | ☑ | ||
|---|---|---|---|---|
| 
    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 
 | 
         
        В форме самого документа &НаКлиенте - Да. У меня процедура ПереоформитьПоОснованию(ЭтаФорма) в общем модуле (используется не только этим типом документов). Если ее вызвать из формы Процедура РазрешеноПереоформитьПоОснованию() &НаКлиенте, то Ошибка при вызове серверного метода.
 
        по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа Добавил &НаСервере Процедура ПереоформитьПоОснованиюНаСервере() - из нее работает как надо.  | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |