Имя: Пароль:
1C
1С v8
Конвертация, как сравнить значение реквизита источника со значением приемника
0 Soul771
 
02.10.14
10:34
Добрый день.
В ПКО документа в "При загрузке" пишу такой код:

Если ОбъектНайден
        И ИмяТипаОбъекта = "Документ"
        И Объект.Метаданные().Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить
        И Объект.Ссылка.Проведен
        И Объект.Ссылка.ДатаПоследнегоИзменения> Источник.ДатаПоследнегоИзменения
        Тогда
        НеЗамещатьОбъект = Истина;
    КонецЕсли;


Ругается на Источник.ДатаПоследнегоИзменения, что "значение не является значением объектного типа".

Подскажите, пожалуйста, как мне перед загрузкой сравнить значение реквизита найденного документа со значением реквизита в источнике. Т.е по сути я хочу сделать проверку при повторной загрузке одних и тех же документов: если документ в базе-приемнике уже есть, если он проведен и если значение его реквизита ДатаПоследнегоИзменения больше, чем значение того же реквизита того же документа в базе-источнике, то не переписывать документ.
1 hhhh
 
02.10.14
10:37
И Объект.Ссылка.ДатаПоследнегоИзменения> Объект.ДатаПоследнегоИзменения
2 dimm7310
 
02.10.14
10:38
давно уже не трогал КД, на сколько я помню в "ПриЗагрузке" ты уже не можешь обращаться к источнику. Может стоит попробовать передавать через параметр
3 Soul771
 
02.10.14
10:42
hhhh, спасибо большое :-)
4 GreatOne
 
02.10.14
10:42
А чем не устраивает вкладка настроек в ПКО? Не замещать, не загружать?..
5 Godofsin
 
02.10.14
10:48
(4) Условие на ДатаПоследнегоИзменения
6 Soul771
 
02.10.14
10:56
после того, как написала
И Объект.Ссылка.ДатаПоследнегоИзменения> Объект.ДатаПоследнегоИзменения

ошибка ушла, но почему-то документы все равно замещаются...
мож даты нужно сравнивать как-то по-другому?..
7 Naumov
 
02.10.14
10:59
>=
8 Soul771
 
02.10.14
11:08
Dimm7310,с параметры пока мне плохо поддаются) Если в параметр что-то передовать, то в ПКО при выгрузке надо прописать что-то вроде:
ТаблицаДокументов = Новый ТаблицаЗначений;
ТаблицаДокументов.Колонки.Добавить("Ссылка");
ТаблицаДокументов.Колонки.Добавить("Дата");
Параметры.Вставить("ТаблицаДокументов",ТаблицаДокументов);
Параметры.ТаблицаДокументов.Добавить("Дата",Источник.ДатаПосленегоИзменения);
Параметры.ТаблицаДокументов.Добавить("Ссылка",Источник.Ссылка);

Не знаю, как передать ссылку источника... И как потом сравнивать в "Перед загрузкой"? Через
Отбор = Новый Структура();
Отбор.Вставить("Ссылка",Объект.ссылка);

ТаблицаДокументов.НайтиСтроки(Отбор)?

Если не трудно, напишите пример, пожалуйста.. хочется уже понять раз и применять в дальнейшем..
9 GreatOne
 
02.10.14
11:16
Может так сработает?
И НачалоДня(Объект.Ссылка.ДатаПоследнегоИзменения) > НачалоДня(Источник.ДатаПоследнегоИзменения)
10 GreatOne
 
02.10.14
11:22
А вообще будь брутальней:

Если ОбъектНайден
        И ИмяТипаОбъекта = "Документ"
        И Объект.Метаданные().Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить
        И Объект.Ссылка.Проведен
        И Объект.Ссылка.ДатаПоследнегоИзменения> Источник.ДатаПоследнегоИзменения
        Тогда
        НеЗамещатьОбъект = Истина;
    КонецЕсли;
Иначе
Сообщить(ИмяТипаОбъекта + Объект.Метаданные().Проведение + Объект.Ссылка.Проведен + Объект.Ссылка.ДатаПоследнегоИзменения + Источник.ДатаПоследнегоИзменения);
и выбрать парочку документов. Быть по локоть в коде куда интереснее!
11 prosto-nik
 
02.10.14
11:47
(8) а вот это:
"        И ИмяТипаОбъекта = "Документ"
"

в (0) точно соблюдается?

откуда берется "ИмяТипаОбъекта"?
12 Soul771
 
02.10.14
12:14
GreatOne, спасибо!! Вывела через сообщить, что меняется, что нет, получается, что
Объект.Ссылка.ДатаПоследнегоИзменения выдает такое же значение, что и Объект.ДатаПоследнегоИзменения, хотя в приемнике и в источнике значения разные.. Наверно, надо как-то по-другому обращаться?...
13 Soul771
 
02.10.14
12:24
выдает вот такую строку:

Документ  Разрешить  Да    НО000000305  20.09.2014 0:00:00  20.09.2014 0:00:00

хотя в базе - источнике 20.09.2014, а в базе-приемнике  23.09.2014
14 prosto-nik
 
02.10.14
12:27
(12) переставь код из (0) в другой обработчик:
http://clip2net.com/s/j0SUXs

и сделай
Если .....
          И Ссылка.ДатаПоследнегоИзменения>Объект.ДатаПоследнегоИзменения

Тогда
Отказ = Истина;
15 GreatOne
 
02.10.14
12:33
(14) +1. Всегда "После загрузки" был роднее, можно сравнить ссылку с объектом.

(13) ну если просто скопирован мой код,то все правильно. Он отрабатывает если "НЕ Объект.Ссылка.ДатаПоследнегоИзменения> Источник.ДатаПоследнегоИзменения"))
16 Soul771
 
02.10.14
12:43
prosto-nik, спасибо за ссылку, дааааавно искала такой прекрасный иссточник по конверташке! пробую с "после загрузки".
GreatOne, код чуток изменила, писала вот так:

Если ОбъектНайден
        И ИмяТипаОбъекта = "Документ"
        И Объект.Метаданные().Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить
        И Объект.Ссылка.Проведен
        И Объект.Ссылка.ДатаВходящегоДокумента>=Объект.ДатаВходящегоДокумента
                Тогда
Сообщить(ИмяТипаОбъекта + "  " + Объект.Метаданные().Проведение +"  " +Объект.Ссылка.Проведен +"  "+"  "+ Объект.Ссылка.Номер+ "  "+ Объект.Ссылка.ДатаВходящегоДокумента +"  "+ Объект.ДатаВходящегоДокумента);

НеЗамещатьОбъект = Истина;


    КонецЕсли;
17 prosto-nik
 
02.10.14
12:51
(16) так в самой конвертации внутри события вверху кнопка "Информация по обработчикам..."
18 Soul771
 
02.10.14
13:09
(17) - елки-моталки..... а я столько перерыла в инете... :-)
19 prosto-nik
 
02.10.14
13:10
(18) бывает)))
20 Soul771
 
02.10.14
13:12
че-то я совсем в тупике.... впихала в ПКО документа в "после загрузки" :
Если ОбъектНайден
        //И ИмяТипаОбъекта = "Документ"
        //И Объект.Метаданные().Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить
        И Ссылка.Проведен
        И Ссылка.ДатаВходящегоДокумента>=Объект.ДатаВходящегоДокумента
                Тогда
Сообщить(Ссылка.Проведен +"  "+ Ссылка.Номер+ "  "+ Ссылка.ДатаВходящегоДокумента +"  "+ Объект.ДатаВходящегоДокумента);

ОТказ = Истина;

КонецЕсли;

ругается, как я понимаю, на строку с Сообщить: Преобразование к типу Число не может быть выполнено... Какое тут еще преобразование к Число?....


P.S.: в начале поста писала, что реквизит называется ДатаПоследнегоИзменения, а тут ДатаВходящегоДокумента)) эт он же, я пока новый реквизит не добавила просто, использую тот что есть - ДатаВходящегоДокумента)
21 prosto-nik
 
02.10.14
13:17
(20) ну напиши
Сообщить("" + Ссылка.Проведен +"  ".........
22 Soul771
 
02.10.14
13:30
(21)- случилось чудо))) не представляю, зачем нужны "", но ошибка ушла)))
правда, условие все равно не срабатывает...
выдает
Да  НО000000305  20.09.2014 0:00:00  20.09.2014 0:00:00

как будто бы считывает только из приемника....
23 prosto-nik
 
02.10.14
13:32
(22) посмотри документ в базе приемнике и в выгруженной XMLке
24 prosto-nik
 
02.10.14
13:36
(22) он у тебя кстати в приемнике не перезаписался после (13)? а то может он и в самом деле в приемнике он уже 20.09.2014 0:00:00
25 Soul771
 
02.10.14
13:52
Нашла косяк криворукости))))) В ПКС перенос реквизита ДатаВходящегоДокумента был отключен, с какого ... уже не помню)))

Спасибо огромное, Prosto-nik!!! И всем, кто откликнулся!! :-)
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.