Имя: Пароль:
1C
1С v8
Конвертация. Проверка типа документа
0 elevika
 
05.02.21
15:13
Всем добрый день. Пишу правила конвертации. Надо перед выгрузкой во всех документах проверять дату, и если она меньше ГраницыЗапретаИзменений, то не выгружать
в Обработчике конвертиции "Перед выгрузкой" пишу условие:
Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Объект)) Тогда
    Если Объект.Метаданные().Реквизиты.Найти("Дата") <> Неопределено И (Объект.Дата < Параметры.ГраницаЗапретаИзменений) Тогда
          Отказ = Истина;
    КонецЕсли;
КонецЕсли;

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

В результате после выгрузки сообщает:
Документ объект: Перемещение товаров
Нет

т.е. реально не определяет, что это документ
Есть у кого-нибудь мысли, почему?
1 DrShad
 
05.02.21
15:35
определяет, но объект и ссылка все таки разные типы
2 ДенисЧ
 
05.02.21
15:37
Документы.ТипВсеСсылки()
Документ объект: Перемещение товаров

Ни на какие мысли не наводит?
3 elevika
 
05.02.21
15:39
(1) Да, когда писала я об этом тоже подумала, но код взяла хелпа этого обработчика. Там, правда, справочник. Но суть то одна. Вот код из хелпа:
Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(Объект)) Тогда
Если Объект.Метаданные().Реквизиты.Найти("Организация") <> Неопределено И (Параметры.Организация <> Объект.Организация) Тогда
  Отказ = Истина;
КонецЕсли;
КонецЕсли;

Ну и тогда вопрос: как определить, что это документ?
4 ДенисЧ
 
05.02.21
15:40
Если тупо - то Объект.Ссылка.
5 DrShad
 
05.02.21
15:41
и дата это стандартный реквизит документа и он есть у всех документов, т.е. условие на наличие такого реквизита избыточно
6 elevika
 
05.02.21
15:51
(4) (5) Спасибо )) Попробую
7 mistеr
 
05.02.21
15:54
(0) Это нужно не при выгрузке, а при регистрации проверять.
8 elevika
 
05.02.21
16:01
(7) Не получится. Ситуация: дату запрета временно сдвигают назад, правят документ, он регистрируется для обмена, дату запрета восстанавливают прежней, а документ идет измененным в базу-приемник. А нам надо, чтобы все уже перенесенные документы из закрытого периода (в базе-источнике) больше не переносились
9 elevika
 
05.02.21
16:14
Знатоки, подскажите ещё как сравнить две даты в Конвертации? В коде пишу:
Если Объект.Дата < Параметры.ГраницаЗапретаИзменений Тогда
Оба имеют значение типа дата. Но на этой строчке выдает ошибку "преобразование к типу число не может быть выполнено"
10 DrShad
 
05.02.21
16:21
как типы проверяешь?
11 ДенисЧ
 
05.02.21
16:21
"Оба имеют значение типа дата"

Значит, одна из черепашек врёт.
12 elevika
 
05.02.21
16:23
(10) Сообщить("ГЗИ: "+ТипЗнч(Параметры.ГраницаЗапретаИзменений));
Сообщить("Дата документа: "+ТипЗнч(Объект.Дата));
На выходе получаю:
ГЗИ: Дата
Дата документа: Дата
13 Cthulhu
 
05.02.21
16:25
типы "дата" и "граница" - разные. хотя и очень похожие.
14 elevika
 
05.02.21
16:29
(13) Параметр.ГраницаЗапретаИзменений я беру из реквизита РС, который имеет тип "Дата". Могу этот параметр обозвать как угодно. Чем его тип будет отличаться от типа ДАТА? И как привести их к одному типу?
15 elevika
 
05.02.21
16:56
Думала, может формат дат разный. Попробовала привести к одному формату через НачалоДня() - ничо не помогает (( При сравнении ошибка "Преобразование значения к типу Число не может быть выполнено"
16 elevika
 
05.02.21
17:10
Все заработало! Помогло именно НачалоДня()
Всем спасибо ))