Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Заполнение поля "ИНН" в Приемнике в спр.Организации          
ignsv Подменю пользователя
сообщение 19.09.12, 12:12
Сообщение #1

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 193
Спасибо сказали: 60 раз
Рейтинг: 0

Пытаюсь разбиратся в КД. и что-то никак (.

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

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

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

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

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


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

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



Думаю правило для строки не до конца оформлено.
Что подскажите?

zay Подменю пользователя
сообщение 19.09.12, 13:14
Сообщение #2

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 164
Из: Киев
Спасибо сказали: 133 раз
Рейтинг: 139.4

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



 i 

Правила, п.11
 


Сообщение отредактировал logist - 19.09.12, 13:28

ignsv Подменю пользователя
сообщение 19.09.12, 14:55
Сообщение #3

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 193
Спасибо сказали: 60 раз
Рейтинг: 0

Проблема даже не в переносе спр.Организации ( скорее всего мне сейчас это и не понадобится ибо данные нужно будет подгружать, а организация уже заведена и при загрузке по поиску она будет найдена). Конкретно не могу разобратся как заполнять реквизит Приемника, если его нету в Источнике( но я могу эго получить разными методами).
А как при конвертации значений? Можете поподробнее?

zay Подменю пользователя
сообщение 20.09.12, 8:47
Сообщение #4

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 164
Из: Киев
Спасибо сказали: 133 раз
Рейтинг: 139.4

Цитата(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 Подменю пользователя
сообщение 20.09.12, 14:42
Сообщение #5

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 193
Спасибо сказали: 60 раз
Рейтинг: 0

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



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

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

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


zay Подменю пользователя
сообщение 20.09.12, 15:25
Сообщение #6

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 164
Из: Киев
Спасибо сказали: 133 раз
Рейтинг: 139.4

А если сделать все так же, как вы делали первоначально, но в обработчике "После выгрузки"?

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 20.06.24, 21:52
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!