Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Заполнение поля "ИНН" в Приемнике в спр.Организации
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Конфигурация "1С:Конвертация данных"
ignsv
Пытаюсь разбиратся в КД. и что-то никак (.

в данном случае: у меня есть УТП8 Украина и УТ8 Украина. пытаюсь перенести организации. в УТП Коды(ИНН,ЕДРПОУ) хранятся в регистре "КодыОрганизаций", в УТ это строки справочника организации. Делаю синхронизацию по строке ИНН. Источник "пусто" - приемник "ИНН-строка". в обработчнике ПередВыгрузкой пишу:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    КодыОрганизацииСрезПоследних.ИНН
|ИЗ
|    РегистрСведений.КодыОрганизации.СрезПоследних(, Организация = &Организация) КАК КодыОрганизацииСрезПоследних";

Запрос.УстановитьПараметр("Организация", Источник);

Результат = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    //    Сообщить(ВыборкаДетальныеЗаписи.ИНН);    
    //Значение = Новый Структура("ИНН",ВыборкаДетальныеЗаписи.Инн);    
    Значение = ВыборкаДетальныеЗаписи.Инн;
КонецЦикла;


Потом создаю Правило конвертации для этой строки, а дальше что то никак не врублю что делать.
Смотрю отладчиком Значение попадает то что нужно.
В ХМЛ файле уже нету значения:

</Свойство><Свойство Имя="ИНН" Тип="Строка">
    <Нпп>2</Нпп>
</Свойство>



Думаю правило для строки не до конца оформлено.
Что подскажите?
zay
При конвертации перечислений и небольших справочников на пару десятков элементов - ИМХО лучше использовать "Конвертацию значений"



 i 

Правила, п.11
 
ignsv
Проблема даже не в переносе спр.Организации ( скорее всего мне сейчас это и не понадобится ибо данные нужно будет подгружать, а организация уже заведена и при загрузке по поиску она будет найдена). Конкретно не могу разобратся как заполнять реквизит Приемника, если его нету в Источнике( но я могу эго получить разными методами).
А как при конвертации значений? Можете поподробнее?
zay
Цитата(ignsv @ 19.09.12, 15:55) необходимо зарегистрироваться для просмотра ссылки
А как при конвертации значений? Можете поподробнее?

Конвертация значений - это правила соответствия "объекты из конфигарации А соответствуют объектам из конфигурации Б".
В данной ситуации это не подходит. Я неправильно понял первоначальный вопрос.

Цитата(ignsv @ 19.09.12, 15:55) необходимо зарегистрироваться для просмотра ссылки
Конкретно не могу разобратся как заполнять реквизит Приемника, если его нету в Источнике( но я могу эго получить разными методами).

Тут надо прописать "Правило конвертации объекта". Объект источник - Организация, объект приемник - ИНН (строка).
  • Создать новое правило конвертации объекта "Организация --> ИНН (Строка)"
  • В обработчике "При выгрузке" написать ваш алгоритм с запросом. Плюс к этому
    ЗначениеИНН = СоздатьУзел("ИНН"); 
    УстановитьАтрибут(ЗначениеИНН, "ИНН", ВыборкаДетальныеЗаписи.Инн);
    ДобавитьПодчиненный(Приемник, ЗначениеИНН);
    (ну, где-то примерно так)
  • В конвертации свойств "Организации" (справочник "Организация" конвертируется в справочник "Организация") для свойства ИНН прописать созданное правило конвертации объекта "Организация --> ИНН (Строка)"


Это способ ИМХО как раз под такую проблему.


Есть способ радикальный, когда вообще все равно что на входе. На выходе генерируется таблица значений, которую надо заполнить самостоятельно. Это используется когда у источника и приемника вообще мало что общего. Мой пример по конвертации 7-ки в 8-ку, документ СписаниеОС
В правилах выгрузки установить "Способ отбора данных" Произвольный алгоритм
В правиле "Перед обработкой" (код 7-рочный)
ВыборкаДанных = СоздатьОбъект("ТаблицаЗначений"); 
ВыборкаДанных.НоваяКолонка("Номер");
ВыборкаДанных.НоваяКолонка("Дата");
ВыборкаДанных.НоваяКолонка("ПометкаУдаления");
ВыборкаДанных.НоваяКолонка("Проведен");
ВыборкаДанных.НоваяКолонка("Организация");
ВыборкаДанных.НоваяКолонка("СобытиеОС");
ВыборкаДанных.НоваяКолонка("СчетСписанияБУ");
ВыборкаДанных.НоваяКолонка("СубконтоБУ1");
ВыборкаДанных.НоваяКолонка("Комментарий");

ВыборкаДанных.НоваяКолонка("ОС");

ОС = СоздатьОбъект("ТаблицаЗначений");
ОС.НоваяКолонка("ОсновноеСредство");
ОС.НоваяКолонка("СтоимостьБУ");
ОС.НоваяКолонка("СтоимостьНУ");


ЛиквидацияНеоборАктивов = СоздатьОбъект("Документ.ЛиквидацияНеоборАктивов");
ЛиквидацияНеоборАктивов.ВыбратьДокументы(ДатаНачала, ДатаОкончания);

Операция = СоздатьОбъект("Операция");
Счетчик = 1;

Пока ЛиквидацияНеоборАктивов.ПолучитьДокумент() = 1 Цикл
    
    Операция.НайтиОперацию(ЛиквидацияНеоборАктивов);
    Операция.ВыбратьПроводки();
    
    Пока Операция.ПолучитьПроводку() = 1 Цикл
        
        КодСимвСчетДт = КодСимв(Лев(Операция.Дебет.Счет.Код, 1));
        КодСимвСчетКт = КодСимв(Лев(Операция.Дебет.Счет.Код, 1));
        
        Если (КодСимвСчетДт > 47) И (КодСимвСчетКт < 58) Тогда
            
            ВыборкаДанных.НоваяСтрока();
        
            ВыборкаДанных.Номер          = СтрЗаменить(ЛиквидацияНеоборАктивов.НомерДок, "-00", "-") + "." + строка(Счетчик);
            ВыборкаДанных.Дата           = ЛиквидацияНеоборАктивов.ДатаДок;
            ВыборкаДанных.ПометкаУдаления    = ЛиквидацияНеоборАктивов.ПометкаУдаления();
            ВыборкаДанных.Проведен    = ЛиквидацияНеоборАктивов.Проведен();
            ВыборкаДанных.Организация    = ЛиквидацияНеоборАктивов.Фирма;
            ВыборкаДанных.Комментарий    = ЛиквидацияНеоборАктивов.Примечание;
            ВыборкаДанных.СобытиеОС    = "Списание";
            ВыборкаДанных.СчетСписанияБУ    = Операция.Дебет.Счет;
            ВыборкаДанных.СубконтоБУ1    = Операция.Дебет.Субконто(1);
            
            ОС.НоваяСтрока();
            
            ОС.ОсновноеСредство    = Операция.Дебет.Субконто(1);
            ОС.СтоимостьБУ    = Операция.Сумма;
            
            лСчетчик = лСчетчик + 1;
            
        ИначеЕсли лКодСимвСчетДт <> 0 Тогда
            
            ОС.СтоимостьНУ    = Операция.Сумма;
            
            ВыборкаДанных.ОС = СоздатьОбъект("ТаблицаЗначений");
            
            ОС.Выгрузить(ВыборкаДанных.ОС);
            
            ОС.УдалитьСтроки();
            
        КонецЕсли;
        
    КонецЦикла;
    
КонецЦикла;

ignsv
по поводу первого варианта:
сделал так: (вроди по Вашему описанию, если что - поправляйте)



в ХМЛ видно что ИНН записалось, но почему-то не как <Значение>

при загрузке в Приемник сообщение:

Ошибка при загрузке данных: {Обработка.УниверсальныйОбменДаннымиXML(6891)}: Значение не является значением объектного типа (ИмяТипа)

zay
А если сделать все так же, как вы делали первоначально, но в обработчике "После выгрузки"?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.