Имя: Пароль:
1C
 
Правила конвертации, выгружаю только ссылку как проверить что объект есть в приемнике?
0 Бешеный заяц
 
21.01.20
10:33
Нужно чтобы при загрузки регистра сведений если в реквизите "Владелец" битая ссылка (номенклатуры) то такой регистр не загружался и не плодились записи с битыми ссылками.
Предполагаю необходимо в модуле "Перед загрузкой" проверять так как там есть "Отказ" поставить, но как проверить будет ли ссылка битой или нет?
1 mikecool
 
21.01.20
10:35
а почему не перегружаешь номенклатуру по ссылке?
2 pechkin
 
21.01.20
10:35
после загрузки ставь отказ если ссылка битая
3 Бешеный заяц
 
21.01.20
10:37
(2) точно спасибо, не дочитал до конца описание обработчика:-)
(1) другая номенклатура для другой базы
4 Aleksey
 
21.01.20
10:37
Никак, ибо в самой КД заложены битые ссылки. Так как владелец может быть загружен позже. Т.е. на доанном этапе ссылка битая, а уже в конце загрузки или в следующем пакете - опа и всё норм
5 mikecool
 
21.01.20
11:09
(4) по идее - номенклатура выгружается раньше, чем документ, в котором она участвует, порядок у нее будет меньше
6 Бешеный заяц
 
21.01.20
13:55
Не буду плодить отдельную тему, еще вопрос связанный с данным вопросом.
В модуле "После загрузки" пытаюсь выполнить проверку на битую ссылку

Если СокрЛП(Объект.Владелец.Код) = ""  Тогда
    Отказ = Истина;
КонецЕсли;

В результате получаю ошибку при этом открываю УПП вижу что у регистра "Штрихкоды" Владелец есть, подскажите в чем проблема? как лечить?



Ошибка в обработчике события ПослеЗагрузкиОбъекта
    ИмяПКО                 =  ШтрихкодыНоменклатуры
    ТипОбъекта             =  Регистр сведений набор записей: Штрихкоды
    Объект                 =  РегистрСведенийНаборЗаписей.Штрихкоды
    Обработчик             =  ПослеЗагрузкиОбъекта
    ОписаниеОшибки         =  Поле объекта не обнаружено (Владелец)
    ПозицияМодуля          =  (1)
    КСообщенияОбОшибках    =  21
7 Бешеный заяц
 
21.01.20
13:56
может существуют особенности для конвертации регистров?
8 mikecool
 
21.01.20
13:56
а что есть объект в этом случае? Добавть сначала
Сообщить(Объект);
Сообщить(ТипЗнч(Объект));
9 Cyberhawk
 
21.01.20
13:59
Веселуха будет когда в одном сообщении обмена будет и сам объект (новый, которого еще нет в приемнике), и запись регистра с этим объектом, и:
- нет управления порядком объектов при загрузке
или
- нет механизма пропуска ошибочных объектов в приемнике с передачей и перерегистрацией оных в источнике
.
10 Cyberhawk
 
21.01.20
13:59
Второе, исходя из постановки, автору без первого не подойдет, и первого тоже нет
11 Бешеный заяц
 
21.01.20
14:03
(8) РегистрСведенийНаборЗаписей.Штрихкоды и Регистр сведений набор записей: Штрихкоды
12 Cyberhawk
 
21.01.20
14:05
(11) Не томи, давай уже структуру регистра из дерева метаданных
13 Бешеный заяц
 
21.01.20
14:09
14 Cyberhawk
 
21.01.20
14:11
Ну добавь тогда еще
Сообщить(Объект.Владелец);
Сообщить(ТипЗнч(Объект.Владелец));
15 Бешеный заяц
 
21.01.20
14:18
(14)  Поле объекта не обнаружено (Владелец)
16 Бешеный заяц
 
21.01.20
14:19
по метаданным набора записей можно циклом пройтись посмотреть что там вообще есть?
17 palsergeich
 
21.01.20
14:19
(16) Можно
18 Бешеный заяц
 
21.01.20
14:21
(17) не по метаданным регистра. а именно текущего набора записей, тогда вопрос как?
19 Бешеный заяц
 
21.01.20
14:23
возможно особенности какие есть при работе с регистром сведений в конвертации? это же не совсем объект на подобно документу или справочнику.
20 Cyberhawk
 
21.01.20
14:23
А, ну так у тебя ж набор, а не запись. Нет у набора никаких свойств-измерений регистра.
21 Cyberhawk
 
21.01.20
14:24
Объект[0].Владелец - вот так будет
22 pechkin
 
21.01.20
14:27
(9) если в выгружаются объекты по ссылкам, то такого быть не может
23 Cyberhawk
 
21.01.20
14:29
(22) Как скажешь
24 Бешеный заяц
 
21.01.20
14:46
(21) на владельца продолжает ругаться, но уже в другом месте в попытке исключения
Если СокрЛП(Объект[0].Владелец.Код) = ""  Тогда
    Отказ = Истина;
КонецЕсли;
Попытка
    Если  Объект.Владелец[0].ВидНоменклатуры.код = "000000046" или Объект[0].Владелец.ВидНоменклатуры.код = "000000003" и НЕ Отказ  Тогда       
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ ПЕРВЫЕ 1
        |    СоответствияНоменклатуры.НоменклатураИсточник,
        |    СоответствияНоменклатуры.ХарактеристикаИсточник
        |ИЗ
        |    РегистрСведений.СоответствияНоменклатуры КАК СоответствияНоменклатуры
        |ГДЕ
        |    СоответствияНоменклатуры.НоменклатураПриемник = &НоменклатураПриемник
        |    И СоответствияНоменклатуры.ХарактеристикаПриемник = &ХарактеристикаПриемник";
        Запрос.УстановитьПараметр("НоменклатураПриемник",Объект[0].Владелец);
        Запрос.УстановитьПараметр("ХарактеристикаПриемник",Объект[0].ХарактеристикаНоменклатуры);
        Результат = Запрос.Выполнить();
        Если НЕ Результат.Пустой() Тогда
            Выборка =    Результат.Выбрать();
            Выборка.Следующий();
            Объект[0].Владелец = Выборка.НоменклатураИсточник;
            Объект[0].ХарактеристикаНоменклатуры = Выборка.ХарактеристикаИсточник;
            Объект[0].ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.ПустаяСсылка();
        КонецЕсли;    
    КонецЕсли;
Исключение
    Сообщить(ОписаниеОшибки());
КонецПопытки;
25 Бешеный заяц
 
21.01.20
15:21
(24) нашел косяк в коде всем спасибо
26 Бешеный заяц
 
22.01.20
12:16
Еще одна проблема ОТКАЗ = Истина для регистра сведений не работает, как обойти?
те у меня набор, соответственно если у меня в наборе есть не заполненный владелец ставлю отказ=истина те не загружать, в результате у меня всё равно грузит запись с битыми ссылками.
Вопрос как грамотно удалить запись набора? если написать Запись.Удалить() то у меня цикл посыпется если нет следующей записи ?


Для Каждого Запись Из Объект Цикл
    Если НЕ ЗначениеЗаполнено(Запись.Владелец) или СокрЛП(Запись.Владелец.Код) = "" Тогда
         ЗаписьЖурналаРегистрации("Загрузка ШК",,,, "Сработал отказ: "+СокрЛП(Запись.Владелец.Код));
        Отказ = Истина;
    Иначе
        ЗаписьЖурналаРегистрации("Загрузка ШК",,,, "Проверка пройдена: "+СокрЛП(Запись.Владелец.Код));
    КонецЕсли;    
    
КонецЦикла;
27 Бешеный заяц
 
22.01.20
12:22
(26) да и Запись.Удалить() вообще не работает нужно видимо Объект.Удалить(индекс)
Основная теорема систематики: Новые системы плодят новые проблемы.