Речь пойдет о ручной выгрузке данных из Управления Торговлей 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 = Строка(Страна);
КонецЕсли;
СтрокаНабора.ТипКвартиры = ?(СтрокаНабора.ТипКвартиры = "кв.", "Квартира", "Офис");
КонецЕсли;
СтруктураПолей.Свойство("Комментарий", СтрокаНабора.Комментарий);
КонецЦикла;
Для Каждого текСтрокаКотакт из Строки Цикл
Сообщить(текСтрокаКотакт.Представление);
ВыгрузитьПоПравилу(текСтрокаКотакт, ,, , "КонтактнаяИнформация");
КонецЦикла;