Обмен УТ11 -> БП выгрузка контрагентов с адресами



Речь пойдет о ручной выгрузке данных из Управления Торговлей 11 в Бухгалтерию 2.0.
Здесь достаточно приводится рабочих правил выгрузки, но там не работает при выгрузке контрагента выгрузка "Адресов" (Юридические и Фактические), попробуем исправить.

Речь пойдет о ручной выгрузке данных из Управления Торговлей 11 в Бухгалтерию 2.0.
Здесь достаточно приводится рабочих правил выгрузки, посмотрите тут или тут
но там не работает, при выгрузке контрагента, выгрузка «Адресов» (Юридические и Фактические). Повозившись, изменил Алгоритм.ВыгрузкаКонтактнойИнформации, который есть в этих правилах, но отключен, закомментирована его работа.

Так вот, заменяем код этого алгоритма в правилах на мой, и должно работать, предварительно раскомментировав строку

 

//Выполнить(Алгоритмы.ВыгрузкаКонтактнойИнформации);

в Правилах выгрузки(событие «после выгрузки»), Контрагентов

также в правилах конвертации «КотактнойИнформации» необходимо изменить существующие строки события «после загрузки» 
 

вставить следующий код

ОбъектМодифицирован = Ложь;
   
ЗаписьРегистра = Объект;//[НомерЗаписи — 1];
   
Если ЗаписьРегистра.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес И НЕ ЗначениеЗаполнено(ЗаписьРегистра.Представление) Тогда
       
// Заполняем представление по умолчанию, если в УТ адрес был не произвольный
       
ПредставлениеАдреса = УправлениеКонтактнойИнформацией.ПолучитьПредставлениеАдреса(ЗаписьРегистра);
        Если
ЗначениеЗаполнено(ПредставлениеАдреса) Тогда
           
ОбъектМодифицирован = Истина;
           
ЗаписьРегистра.Представление = ПредставлениеАдреса;
        КонецЕсли;
    КонецЕсли;

 

и должно работать, выгружается вся контактная информация по контрагенту, но в бухгателрию попадает только нужная Юр. адрес, Факт. адрес и телефоны.

 

код Алгоритма.ВыгрузкаКонтактнойИнформации

Строки = Новый ТаблицаЗначений;
Строки.Колонки.Добавить(«Ссылка»);
Строки.Колонки.Добавить(«Объект»);
Строки.Колонки.Добавить(«Вид»);
Строки.Колонки.Добавить(«Тип»);
Строки.Колонки.Добавить(«Поле1»);
Строки.Колонки.Добавить(«Поле2»);
Строки.Колонки.Добавить(«Поле3»);
Строки.Колонки.Добавить(«Поле4»);
Строки.Колонки.Добавить(«Поле5»);
Строки.Колонки.Добавить(«Поле6»);
Строки.Колонки.Добавить(«Поле7»);
Строки.Колонки.Добавить(«Поле8»);
Строки.Колонки.Добавить(«Поле9»);
Строки.Колонки.Добавить(«ТипДома»);
Строки.Колонки.Добавить(«ТипКвартиры»);
Строки.Колонки.Добавить(«ТипКорпуса»);
Строки.Колонки.Добавить(«Представление»);
Строки.Колонки.Добавить(«Комментарий»);
Строки.Колонки.Добавить(«ЭтоПроизвольнаяСтрока», Новый ОписаниеТипов(«Булево»));

// Типы дома, корпуса и квартиры, которые поддерживаются в БП
ТипыДомов = Новый Массив;
ТипыДомов.Добавить(«дом»);
ТипыДомов.Добавить(«владение»);

ТипыКорпусов = Новый Массив;
ТипыКорпусов.Добавить(«корпус»);
ТипыКорпусов.Добавить(«строение»);

ТипыКвартир = Новый Массив;
ТипыКвартир.Добавить(«кв.»);
ТипыКвартир.Добавить(«оф.»);
// Заполнение набора
Для Каждого СтрокаКИ Из Объект.КонтактнаяИнформация Цикл
   
// Получаем структуру значений полей
   
СтруктураПолей      = Новый Структура;
   
ПоследнийЭлементИмя = Неопределено;
   
СтрокаПолей         = СтрокаКИ.ЗначенияПолей;

    Для Сч = 1 По СтрЧислоСтрок(СтрокаПолей) Цикл
       
Стр = СтрПолучитьСтроку(СтрокаПолей, Сч);
        Если
Лев(Стр, 1) = Символы.Таб Тогда
            Если
ПоследнийЭлементИмя <> Неопределено Тогда
               
СтруктураПолей[ПоследнийЭлементИмя] = СтруктураПолей[ПоследнийЭлементИмя] + Символы.ПС + Сред(Стр, 2);
            КонецЕсли;
        Иначе
           
Поз = Найти(Стр, «=»);
            Если
Поз <> 0 Тогда
               
ПоследнийЭлементИмя = Лев(Стр, Поз1);
               
СтруктураПолей.Вставить(ПоследнийЭлементИмя, Сред(Стр, Поз+1));
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;

    СтрокаНабора = Строки.Добавить();
   
СтрокаНабора.Объект                 = Объект.Ссылка;
   
СтрокаНабора.Вид                    = СтрокаКИ.Вид;
   
СтрокаНабора.Тип                    = СтрокаКИ.Тип;
   
СтрокаНабора.Представление          = СтрокаКИ.Представление;

    Если СтрокаКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Факс
        ИЛИ СтрокаКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда
       
СтруктураПолей.Свойство(«КодСтраны», СтрокаНабора.Поле1);
       
СтруктураПолей.Свойство(«КодГорода», СтрокаНабора.Поле2);
       
СтруктураПолей.Свойство(«НомерТелефона», СтрокаНабора.Поле3);
       
СтруктураПолей.Свойство(«Добавочный», СтрокаНабора.Поле4);
    ИначеЕсли
СтрокаКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда

        СтруктураПолей.Свойство(«Индекс», СтрокаНабора.Поле1);
       
СтруктураПолей.Свойство(«Регион», СтрокаНабора.Поле2);
       
СтруктураПолей.Свойство(«Район», СтрокаНабора.Поле3);
       
СтруктураПолей.Свойство(«Город», СтрокаНабора.Поле4);
       
СтруктураПолей.Свойство(«НаселенныйПункт», СтрокаНабора.Поле5);
       
СтруктураПолей.Свойство(«Улица», СтрокаНабора.Поле6);
       
СтруктураПолей.Свойство(«Дом», СтрокаНабора.Поле7);
       
СтруктураПолей.Свойство(«Корпус», СтрокаНабора.Поле8);
       
СтруктураПолей.Свойство(«Квартира», СтрокаНабора.Поле9);

        СтруктураПолей.Свойство(«ТипДома», СтрокаНабора.ТипДома);
       
СтруктураПолей.Свойство(«ТипКорпуса», СтрокаНабора.ТипКорпуса);
       
СтруктураПолей.Свойство(«ТипКвартиры», СтрокаНабора.ТипКвартиры);

        // Проверяем значения типа дома, корпуса и квартиры
       
СтрокаНабора.ТипДома     = ?(ТипыДомов.Найти(НРег(СтрокаНабора.ТипДома)) = Неопределено, Неопределено, СтрокаНабора.ТипДома);
       
СтрокаНабора.ТипКорпуса  = ?(ТипыКорпусов.Найти(НРег(СтрокаНабора.ТипКорпуса)) = Неопределено, Неопределено, СтрокаНабора.ТипКорпуса);
       
СтрокаНабора.ТипКвартиры = ?(ТипыКвартир.Найти(НРег(СтрокаНабора.ТипКвартиры)) = Неопределено, Неопределено, СтрокаНабора.ТипКвартиры);

        // Получаем представление, какое оно должно быть
       
КодСтраны = «»;
       
НаименованиеСтраны = СтрокаКИ.Страна;
       
СтранаРоссия = Справочники.СтраныМира.Россия;

        СтруктураПолей.Свойство(«КодСтраны», КодСтраны);
       
Страна = ?(ЗначениеЗаполнено(КодСтраны), Справочники.СтраныМира.НайтиПоКоду(КодСтраны), Неопределено);
       
Страна = ?(ЗначениеЗаполнено(Страна), Справочники.СтраныМира.НайтиПоНаименованию(НаименованиеСтраны, Истина), СтранаРоссия);
       
Страна = ?(ЗначениеЗаполнено(Страна), Страна, СтранаРоссия);

        Представление = «»;
        Если
Страна <> СтранаРоссия Тогда
           
Представление = Представление + ?(ЗначениеЗаполнено(Строка(Страна)), «, » + Строка(Страна), «»);
        КонецЕсли;
       
Представление = Представление + ?(ЗначениеЗаполнено(СокрЛП(СтрокаНабора.Поле1)), «, » + СокрЛП(СтрокаНабора.Поле1), «»);
       
Представление = Представление + ?(ЗначениеЗаполнено(СокрЛП(СтрокаНабора.Поле2)), «, » + СокрЛП(СтрокаНабора.Поле2), «»);
       
Представление = Представление + ?(ЗначениеЗаполнено(СокрЛП(СтрокаНабора.Поле3)), «, » + СокрЛП(СтрокаНабора.Поле3), «»);
       
Представление = Представление + ?(ЗначениеЗаполнено(СокрЛП(СтрокаНабора.Поле4)), «, » + СокрЛП(СтрокаНабора.Поле4), «»);
       
Представление = Представление + ?(ЗначениеЗаполнено(СокрЛП(СтрокаНабора.Поле5)), «, » + СокрЛП(СтрокаНабора.Поле5), «»);
       
Представление = Представление + ?(ЗначениеЗаполнено(СокрЛП(СтрокаНабора.Поле6)), «, » + СокрЛП(СтрокаНабора.Поле6), «»);
       
Представление = Представление + ?(ЗначениеЗаполнено(СокрЛП(СтрокаНабора.Поле7)), «, » + СтрокаНабора.ТипДома    + » № » + СокрЛП(СтрокаНабора.Поле7), «»);
       
Представление = Представление + ?(ЗначениеЗаполнено(СокрЛП(СтрокаНабора.Поле8)), «, » + СтрокаНабора.ТипКорпуса + » » + СокрЛП(СтрокаНабора.Поле8), «»);
       
Представление = Представление + ?(ЗначениеЗаполнено(СокрЛП(СтрокаНабора.Поле9)), «, » + СтрокаНабора.ТипКвартиры + » » + СокрЛП(СтрокаНабора.Поле9), «»);

        Если СтрДлина(Представление) > 2 Тогда
           
Представление = Сред(Представление, 3);
        КонецЕсли;

        // Проверяем представление на наличие произвольного значения
       
Если Представление <> СтрокаНабора.Представление Тогда
           
СтрокаНабора.ЭтоПроизвольнаяСтрока = Истина;
           
СтрокаНабора.Поле1 = Строка(Страна);
        КонецЕсли;

        СтрокаНабора.ТипКвартиры = ?(СтрокаНабора.ТипКвартиры = «кв.», «Квартира», «Офис»);

    КонецЕсли;

    СтруктураПолей.Свойство(«Комментарий», СтрокаНабора.Комментарий);
КонецЦикла;

Для Каждого текСтрокаКотакт из Строки Цикл

    Сообщить(текСтрокаКотакт.Представление);
   
ВыгрузитьПоПравилу(текСтрокаКотакт, ,, , «КонтактнаяИнформация»);
КонецЦикла;

11 Comments

  1. iov

    (0) а само правило?

    Reply
  2. AlexeyK1

    (1) Извините, дублировать не стал, чтобы не тратить ваши $m и не обвинили в плагиате, дал ссылку на те правила которые сам брал отсюда, и внес маленькие корректировки, о которых подробно расписал… просто мои правила которые я переделал они сугубо индивидуальны, но могу конечно задублировать с поправками на те, что ссылался.

    вожно взять вот эти правила http://infostart.ru/public/120056/ и сделать изменения самому…

    удачи

    Reply
  3. iov

    (2) Та я не за себя радею… У мну есть все что надо …

    Reply
  4. orehova123

    хм… спасибо, добавлю себе в закладки, чувствую, что скоро пригодится

    Reply
  5. elena_vash

    Спасибо, пригодилось.

    Reply
  6. FallenMad

    Спасибо, очень пригодилось

    Reply
  7. timothy

    Мне пригодилось спасибо

    Reply
  8. mchammer4

    Спасибо! сохранил кому то SM

    Reply
  9. Anyu-n

    Доброго времени суток! Вылезает ошбка

    Ошибка в обработчике события ПослеВыгрузкиДанных (конвертация)

    Обработчик = ПослеВыгрузкиДанных (конвертация)

    ОписаниеОшибки = Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(35,25)}: Переменная не определена (Объект)

    ПозицияМодуля = (14)

    КСообщенияОбОшибках = 63

    Reply
  10. Anyu-n

    Вроде все делала как сказали …. помогите пожалуйста….

    Reply
  11. Отала

    Аналогичная ошибка ,ОписаниеОшибки = Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(35,25)}: Переменная не определена (Объект)

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *