Имя: Пароль:
1C
1С v8
Конвертация Справочника V8 -> V77
,
0 Михей
 
12.10.11
09:09
Доброе утро.

Переношу справочник Номенклатуры из V8 в V77 с помощью КД2, при загрузке в V77 необходимо настроить гибкий поиск. Если номенклатура не найдена по Коду то попробовать поискать по реквизиту КодV8. Как сие реализовать?

Спасибо.
1 Рэйв
 
12.10.11
09:11
ищи уж сразу тогда по КодV8
2 Михей
 
12.10.11
09:14
(1) нельзя, может дубль тогда создаться
3 SuperMario
 
12.10.11
09:15
(0) Поля поиска.
4 Михей
 
12.10.11
09:16
(3) а оно в V7 работает? в справке написано что только V8
5 SuperMario
 
12.10.11
09:19
(4) ты прав. Только для V8
6 Рэйв
 
12.10.11
09:22
(2)Тогда только курочить обработку загрузки. Находить место где идет поиск, проверять объект на тип и если нужный - проверять нашел или нет и в случае необходимости искать по второму варианту
7 SuperMario
 
12.10.11
09:27
Была похожая задачка. Я в обработчик "При загрузке" получал свойство источника и сравнивал его с кодом магазина. Если условие не проходит, то отказ от загрузки объекта.
Думаю, что можешь код поправить для своих целей.

ПриЗагрузке:

КодПолучателя = УстановитьРеквизитV8(Узел.ВыбратьУзел("Свойство[@Имя=""Комментарий""]"),    "Документ", "ПоступлениеТМЦРозница", "Комментарий");
Если КодПолучателя  <> "Для магазина:"+ СокрП(Константа.КодТекущегоУзла) Тогда
   Отказ = 1;
КонецЕсли;
8 ДемонМаксвелла
 
12.10.11
09:37
кто-то с восьмерки на семерку переходит...

(0) не понял какой смысл искать и по коду и по КодV8, притом сам пишешь,  что по коду можешь и не найти (есть дубли по коду? новые коды присваиваешь?) проще сделать тогда сразу поиск по КодV8, до выгрузки проверить на уникальность
9 Михей
 
12.10.11
10:17
Иходные данные;

СправочникV8:
- Код
- КодV77
- ЭтоГруппа

СправочникV7:
- Код
- КодV8
- ЭтоГруппа

Если перегрузка идет  V77 -> V8 то там все просто, я могу зазать ПоляПоиска
со следующим алгоритмом:

Если ЗначениеЗаполнено(СвойстваПоиска.Получить("КодV8")) Тогда
   
   СтрокаИменСвойствПоиска = "Код, ЭтоГруппа";
   
Иначе
   
   СтрокаИменСвойствПоиска = "КодV77, ЭтоГруппа";
   
КонецЕсли;    


А в v7 я такого написать не могу.
10 nicxxx
 
12.10.11
10:29
есть в обработке v77imp.ert функция:
Функция УстановитьСправочникПоСсылкеV8()
в (6) правильно сказали - надо в этой функции изменить алгоритм поиска, вот начала ветвления:
   Если        КолвоРеквизитовПоиска = 0 Тогда
       
           //    Поиск не производим!
       
   ИначеЕсли    (ПустоеЗначение(Код)            = 0)    И    (КолвоРеквизитовПоиска = 1)    Тогда
       
       Если Справочник.НайтиПоКоду(Код, 0) = 0    Тогда    //    создаем новый
       ИначеЕсли    Справочник.ЭтоГруппа() <> ЭтоГруппа            Тогда    //    создаем новый
       Иначе
           Если ЗапоминатьЗагруженныеОбъекты = 1 Тогда ЗапомнитьСсылку(Вид, Ссылка.ПредставлениеXML, Справочник.ТекущийЭлемент()); КонецЕсли;
           Возврат    Справочник.ТекущийЭлемент();
       КонецЕсли;
11 Михей
 
12.10.11
10:31
(10) да нашел, но еще нашел и такое

Функция СравнитьРеквизитыСправочникаV8(Справочник, РеквизитыПоиска)
             
   Вид    =    Справочник.Вид();
   
   Для Сч = 0 По РеквизитыПоиска.КоличествоУзлов() - 1 Цикл
       
       Реквизит                    =    РеквизитыПоиска.ПолучитьУзел(Сч);
       ИдРеквизита                    =    Реквизит.ПолучитьАтрибут("Имя");
       
       //ТипРеквизита                =    "";
       //ПрочитатьИнформациюОТипеРеквизита("Справочник", Вид, ИдРеквизита, ТипРеквизита);
       //Если        ПустоеЗначение(ТипРеквизита) = 1 Тогда
       //    ПредставлениеРеквизита        =    "Справочник." + Вид + "." + ИдРеквизита;
       //    ЗаписатьОшибку("Неверное имя реквизита:" + ПредставлениеРеквизита);
       //    Продолжить;
       //КонецЕсли;
       
       Значение                    =    УстановитьРеквизитV8(Реквизит, "Справочник", Вид, ИдРеквизита);
       СуществующееЗначение        =    Справочник.ПолучитьАтрибут(ИдРеквизита);
       
       Если (ТипЗначенияСтр(СуществующееЗначение) = "Строка") Или (ПустоеЗначение(СуществующееЗначение) = 1) Тогда
           СуществующееЗначение    =    СокрЛП(СуществующееЗначение);
           Значение                =    СокрЛП(Значение);
       КонецЕсли;
       
       Если СуществующееЗначение <> Значение Тогда Возврат(0) КонецЕсли;
       
   КонецЦикла;
   
   Возврат(1);
   
КонецФункции

Вот думаю может РеквизитыПоиска, как то изменять при выгрузке
12 Михей
 
12.10.11
10:51
Все оказалось проще, в ПКС свойства по которому мне не нужно проводить поиск поставил

Отказ = ПустоеЗначение(Источник.КодV77);

И оно тогда не выгружается ваще.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший