ООО ЭкоЮнит
FAQПоискПользователиГруппыФайлыВходРегистрацияГлавная
Версия для печати
 
АвторСообщение
Sergey Пол:Муж.


Местный босс - администратор


Зарегистрирован: 06.01.2005
Показать/Спрятать

Сообщение Вт 03 Июн, 2014 23:14 Скачать сообщение Репутация: 88
 Запись произвольного адреса в контактную информацию объекта в конфигурациях на БСП версий 2.X 1С Предприятия 8
При импорте данных, полученных из сторонних источников (текстовый файл, xml, dbf, Excel, etc), иногда встаёт задача записать контактную информацию для объекта базы данных (контрагент, физлицо, etc) в произвольной форме. В произвольной, потому что адреса часто представлены в труднораспознаваемом программным способом формате.
В прежних конфигурациях линии УТ 10.3, БП 2.0 и т.п. запись в регистр нужной информации не представляла особой сложности.

Не помню точно, по какой веской причине и с какого релиза БСП девелоперы из решили хранить адреса в виде сериализованного объекта XDTO вместо строкового представления списка значений, но с тех пор запись адресов программным способом превратилась в разрыв шаблона для простых одноэсников, в том числе и для меня.
Не вдаваясь в подробности адресного формата контактной информации и способов формирования, приведу фрагмент кода для записи адресов, полученных откуда-то.

Код приведён для БП 3.0. Может применяться в конфигурациях на основе БСП не ниже 2.1 (УТ 11.1, Розница 2.0.8.11 и позднее). Под переменной Объект имеется в виду элемент справочника контрагенты или другой с ТЧ КонтактнаяИнформация. Строка XML для шаблона значения полей выдернута из табличной части элемента справочника контрагентов.

Скрытый текст:
Показать


Если всё-таки есть уверенность в корректности информации, можно попытаться произвести парсинг КИ и запись с помощью штатных процедур БСП. В этом случае при больших объёмах данных время импорта объектов в базу может значительно увеличиться.
Обратите внимание. В конфигурациях на БСП 2.2.4 и позднее модуль КонтактнаяИнформацияСлужебный переименован в УправлениеКонтактнойИнформациейСлужебный, процедуры ДесериализацияАдреса, СериализацияКонтактнойИнформации переименованы соответственно в АдресXMLВXDTO, КонтактнаяИнформацияXDTOВXML с сохранением интерфейса.

Код:

//Представление контактной информации
Представление = "446254, Самарская обл, Безенчукский р-н, Безенчук пгт, Тимирязева ул, дом 26, кв. 37";
Представление = ",446254,САМАРСКАЯ ОБЛ,БЕЗЕНЧУКСКИЙ Р-Н,,БЕЗЕНЧУК ПГТ,ТИМИРЯЗЕВА УЛ,26,,37";
Представление = "Лондон, Сити, на углу спросите";

// ВидКИ = Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("ваш вид адреса");
ВидКИ = Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента; //для другого справочника подставить соответствующее значение

//Нормализуем представление для использования в парсере КИ
Пока Лев(Представление, 1) = "," Цикл Представление = Сред(Представление, 2); КонецЦикла;
//Парсим строку и удаляем пустые значения.
МногострочныйТекст = СтрЗаменить(Представление, ",", Символы.ПС);
Представление = "";
Для А = 1 По СтрЧислоСтрок(МногострочныйТекст) Цикл 
    Подстрока = СокрЛП(СтрПолучитьСтроку(МногострочныйТекст, А));
    Если ЗначениеЗаполнено(Подстрока) Тогда Представление = Представление + Подстрока + ", "; КонецЕсли;
КонецЦикла; //Для А = 1 По
//Обрезаем лишнее
Представление = Лев(Представление, СтрДлина(Представление) - 2);

//если поле Страна не заполнять, то программа при редактировании всё равно подставит Россию.
СтруктураСтроки = Новый Структура("Тип, Страна, Вид, Представление, Регион, Город, ЗначенияПолей",
                    Перечисления.ТипыКонтактнойИнформации.Адрес, "Россия", ВидКИ, Представление, "", "", "");

//Пытаемся привести представление КИ в объект XDTO для последующего преобразования в XML-представление
ОбъектXDTOКИ = КонтактнаяИнформацияСлужебный.ДесериализацияАдреса("", СтруктураСтроки.Представление,
                            СтруктураСтроки.Тип);

Если НЕ КонтактнаяИнформацияСлужебный.АдресВведенВСвободнойФорме(ОбъектXDTOКИ) Тогда
    АдресРФ = КонтактнаяИнформацияСлужебный.РоссийскийАдрес(ОбъектXDTOКИ);
    Если АдресРФ <> Неопределено Тогда
        СтруктураСтроки.Город = АдресРФ.Город;
        СтруктураСтроки.Регион = АдресРФ.СубъектРФ;
    КонецЕсли;
    СтруктураСтроки.Представление = КонтактнаяИнформацияСлужебный.СформироватьПредставлениеКонтактнойИнформации(ОбъектXDTOКИ, ВидКИ);
    //Запишем уточнённое представление контактной информации
    КонтактнаяИнформацияСлужебный.ПредставлениеКонтактнойИнформации(ОбъектXDTOКИ, СтруктураСтроки.Представление);
КонецЕсли;

//При необходимости можно принудительно установить флаг корректной информации
//КонтактнаяИнформацияСлужебный.АдресВведенВСвободнойФорме(ОбъектXDTOКИ, Ложь);

//Приводим объект XDTO в XML-строку для записи в табличную часть
СтруктураСтроки.ЗначенияПолей = КонтактнаяИнформацияСлужебный.СериализацияКонтактнойИнформации(ОбъектXDTOКИ);

//Запись сериализованной информации в табличную часть
ЗаполнитьЗначенияСвойств(Объект.КонтактнаяИнформация.Добавить(), СтруктураСтроки);

Объект.Записать();


Или ещё короче, если в вашей конфигурации процедура УправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию() объявлена экспортной.
Код:

//Представление контактной информации
Представление = "Лондон, Сити, на углу спросите";
Представление = "446254, Самарская обл, Безенчукский р-н, Безенчук пгт, Тимирязева ул, дом 26, кв. 37";
Представление = ",446254,САМАРСКАЯ ОБЛ,БЕЗЕНЧУКСКИЙ Р-Н,,БЕЗЕНЧУК ПГТ,ТИМИРЯЗЕВА УЛ,26,,37";

// ВидКИ = Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("ваш вид адреса");
ВидКИ = Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента; //для другого справочника подставить соответствующее значение

//Нормализуем представление для использования в парсере КИ
Пока Лев(Представление, 1) = "," Цикл Представление = Сред(Представление, 2); КонецЦикла;
//Парсим строку и удаляем пустые значения.
МногострочныйТекст = СтрЗаменить(Представление, ",", Символы.ПС);
Представление = "";
Для А = 1 По СтрЧислоСтрок(МногострочныйТекст) Цикл 
    Подстрока = СокрЛП(СтрПолучитьСтроку(МногострочныйТекст, А));
    Если ЗначениеЗаполнено(Подстрока) Тогда Представление = Представление + Подстрока + ", "; КонецЕсли;
КонецЦикла; //Для А = 1 По
//Обрезаем лишнее
Представление = Лев(Представление, СтрДлина(Представление) - 2);

//Пытаемся привести представление КИ в объект XDTO для последующего преобразования в XML-представление
ОбъектXDTOКИ = КонтактнаяИнформацияСлужебный.ДесериализацияАдреса("", Представление, Перечисления.ТипыКонтактнойИнформации.Адрес);

//При необходимости можно принудительно установить флаг корректной информации
//КонтактнаяИнформацияСлужебный.АдресВведенВСвободнойФорме(ОбъектXDTOКИ, Ложь);

//Приводим объект XDTO в XML-строку и записываем сериализованную информацию в табличную часть
УправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию(Объект, 
                КонтактнаяИнформацияСлужебный.СериализацияКонтактнойИнформации(ОбъектXDTOКИ),
                ВидКИ, Перечисления.ТипыКонтактнойИнформации.Адрес);

Объект.Записать();



Запись можно проверить с помощью Универсальные подбор и обработка объектов с установкой реквизитов табличных частей , отобрав несколько контрагентов и исполнив код в произвольном алгоритме. Результат на скриншоте.

АдресВСвободнойФорме.png АдресВСвободнойФорме.png


У кого есть желание посмотреть, как происходит формирование ЗначенияПолей в конфигурации, трассируем модуль формы ввода адресов (Обработки.ВводКонтактнойИнформации.ВводАдреса) после строк
Код:
    Если Модифицированность Тогда
        // Изменено значение адреса

Значения полей адреса в базе данных
Код:
<КонтактнаяИнформация xmlns="http://www.v8.1c.ru/ssl/contactinfo" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Представление="Лондон, Сити, на углу спросите">
<Комментарий/>
<Состав xsi:type="Адрес" Страна="РОССИЯ"><Состав xsi:type="АдресРФ"><СубъектРФ xsi:nil="true"/><СвРайМО>
<Район xsi:nil="true"/></СвРайМО><Город xsi:nil="true"/><НаселПункт/><Улица/><ДопАдрЭл ТипАдрЭл="10100000" Значение=""/>
<Адрес_по_документу>Лондон, Сити, на углу спросите</Адрес_по_документу></Состав></Состав></КонтактнаяИнформация>


Благодарю hazbi с форума forum.mista.ru за финансирование исследования вопроса.

зы: Можно поступить совсем просто. После импорта или обмена данными воспользоваться приложенной обработкой, которая очистит представление адресов или телефонов от лишних знаков препинания, пробелов и запишет значения полей в корректном формате XML. Arrow В контактной информации объектов должны быть установлены правильные виды и типы КИ.
Обработка предназначена для конфигураций на БСП не ниже 2.1.

Скрытый текст:
Показать


Скачать ПреобразованиеКонтактнойИнформацииВФорматXML.epf (15.56 KB). Добавлен/обновлён Вс 06 Сен, 2015 03:04. Скачано 867 раз(а).
Скачивание для зарегистрированных пользователей. Преобразование значений контактной информации в формат XML


_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, скайп, слать емайлы, пытаться писать в приват. Спасибо за понимание. Please do not PM, ICQ, Skype or email me for support help - you won't get any reply. If you have a question or issue, post it in the appropriate forum/topic. Thanks!
ВверхНа форуме нет Профиль Сайт Имя в Skype
Сергей63 Пол:Муж.

Заинтересовался


Зарегистрирован: 16.06.2014
Показать/Спрятать

а как записать Российский адрес?
у меня есть строка ",446254,САМАРСКАЯ ОБЛ,БЕЗЕНЧУКСКИЙ Р-Н,,БЕЗЕНЧУК ПГТ,ТИМИРЯЗЕВА УЛ,26,,37"
ВверхНа форуме нет Профиль
Sergey Пол:Муж.


Местный босс - администратор


Зарегистрирован: 06.01.2005
Показать/Спрятать

Здрасьте. Вы код и скриншот внимательно изучали? Так же и записать. Вместо выделенного красным между кавычек вставляете своё значение.
Кстати, в целях удобочитаемости рекомендую сначала немного нормализовывать значения для записи. Например, удалять знаки препинания впереди, строки приводить в титульный регистр с помощью функции Трег().

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, скайп, слать емайлы, пытаться писать в приват. Спасибо за понимание. Please do not PM, ICQ, Skype or email me for support help - you won't get any reply. If you have a question or issue, post it in the appropriate forum/topic. Thanks!
ВверхНа форуме нет Профиль Сайт Имя в Skype
Сергей63 Пол:Муж.

Заинтересовался


Зарегистрирован: 16.06.2014
Показать/Спрятать

здрасьте!
Внимательно изучил, и даже повторил.
строку отформатировал. все ок, в представление вставляется красивая строка. но адрес не становиться российским. делаю след махинацию, изменяю данные в "представлении" (добавляю/удаляю пробел) перехожу в комментарий - Опа, адрес стал российский. когда копирую строку из представления в другой адрес то он сохранятеся и открывается как российский.
ВверхНа форуме нет Профиль
Sergey Пол:Муж.


Местный босс - администратор


Зарегистрирован: 06.01.2005
Показать/Спрятать

На скриншоте в первом посте ваш адрес. Код без изменений. Записывал в БП 3.0.33.19. Почему у вас какие-то траблы, не знаю. Начинать следовало с озвучивания конфигурации.

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, скайп, слать емайлы, пытаться писать в приват. Спасибо за понимание. Please do not PM, ICQ, Skype or email me for support help - you won't get any reply. If you have a question or issue, post it in the appropriate forum/topic. Thanks!
ВверхНа форуме нет Профиль Сайт Имя в Skype
Сергей63 Пол:Муж.

Заинтересовался


Зарегистрирован: 16.06.2014
Показать/Спрятать

Very Happy
трабл такой же как и на картинке, адрес не раскладываеться в Российский. а то что на скриншоте я тоже получил
я записал его в "представление", при открытие его на редактирование - он "записан в свободной форме", а если я копирую его в другой объект - потом открываю на редактирование, то он открываться как российский
Конфа самописная, на основе БСП, адреса берутся из ИС написанное на дельфи, файл обмена XLS

в общем хотелось чтобы при открытии адреса - он раскидывался по картинке
Город, нас пункт,
улица
дом
квартира
в этом то и был вопрос, извиняюсь, если не так сформулировал
ВверхНа форуме нет Профиль
Sergey Пол:Муж.


Местный босс - администратор


Зарегистрирован: 06.01.2005
Показать/Спрятать

В таком случае парсинг строки превращается в мозговыносящую задачу. Раскладываем строки в массив или многострочный текст и в цикле пытаемся определить вид подстроки (индекс, регион, район, улица, дом, etc). Схема кода примерно такая:
Скрытый текст:
Показать


В строке табличной части контактной информации должно быть заполнено поле "Страна" и "Регион" (СубъектРФ), "Город", если они есть.

Логика понятна? Если нет, нормальная реализация за финансирование.

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, скайп, слать емайлы, пытаться писать в приват. Спасибо за понимание. Please do not PM, ICQ, Skype or email me for support help - you won't get any reply. If you have a question or issue, post it in the appropriate forum/topic. Thanks!
ВверхНа форуме нет Профиль Сайт Имя в Skype
Сергей63 Пол:Муж.

Заинтересовался


Зарегистрирован: 16.06.2014
Показать/Спрятать

логика понятна, пробовал.
дело в не в том чтобы его разложить по XML, два адреса "Прописки" "Проживания" один в формате РФ(в одном объекте Контрагенты), другой в произвольном виде в строке "Представление" и "Значения полей" идентичны, сравнивал посимвольно.
если вытащить ТЧ на форму и сравнить ее.
Суть - загрузить адрес из строки(пример выше), чтобы при нажатии редактирование - она открывалась как адрес РФ.
вот объект? контрагенты
у него ТЧ - контакнтая информация
два адреса? Прописки, Проживания
один загрузил обработкой, второй скопировал из первой записи - в ТЧ - все идентично, однако 2 открывается как адрес РФ, а 1 как произвольный формат
это к тому что обрабатывать его и грузить в XML по особому.
еще раз
адрес записанный в ""представление" программно открывается как "адрес в свободной форме"
тот же адрес записанный интерактивно, открывается как "адрес РФ"
в ТЧ - они хранятся одинаково
если что пишите ЛС, дам тимвьювер чтобы посмотреть живьем.
Smile , можно обсудить размер финансирования
ВверхНа форуме нет Профиль
Павел2104 Пол:Муж.

Постоянный клиент


Зарегистрирован: 27.09.2014
Показать/Спрятать

Благодарю. Начал искать, а у вас уже есть готовое. Confused Теперь надо придумать как записывать телефоны из таблицы excel
ВверхНа форуме нет Профиль
Раев Пол:Муж.

Гостья


Зарегистрирован: 08.09.2015
Показать/Спрятать

Скажите пароль к модулю объекта)
ВверхНа форуме нет Профиль
Sergey Пол:Муж.


Местный босс - администратор


Зарегистрирован: 06.01.2005
Показать/Спрятать

Да, пожалуйста, через спасибо на яндекс-деньги
Скрытый текст:
Показать
Скрытый текст:
Показать
.

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, скайп, слать емайлы, пытаться писать в приват. Спасибо за понимание. Please do not PM, ICQ, Skype or email me for support help - you won't get any reply. If you have a question or issue, post it in the appropriate forum/topic. Thanks!
ВверхНа форуме нет Профиль Сайт Имя в Skype
Владимир2017


Зарегистрирован: 19.06.2017
Показать/Спрятать

Спасибо огромное. Опыта у меня мало, но, если я правильно понимаю, то данный код можно использовать и в обработчике Конвертация данных 2 при переносе в БУ3.0 справочника Контрагенты ?
ВверхНа форуме нет Профиль
Sergey Пол:Муж.


Местный босс - администратор


Зарегистрирован: 06.01.2005
Показать/Спрятать

Можно. Принцип тоже самый.

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор db_update.php для phpBB2 с некоторыми удобствами.
Как ставить моды. Что такое [SQL] и с чем его едят | Как правильно задавать вопросы и получать адекватные ответы | Правила форума
Бесплатная техподдержка только на форуме! Не надо стучаться в аську, скайп, слать емайлы, пытаться писать в приват. Спасибо за понимание. Please do not PM, ICQ, Skype or email me for support help - you won't get any reply. If you have a question or issue, post it in the appropriate forum/topic. Thanks!
ВверхНа форуме нет Профиль Сайт Имя в Skype
Виткота27


Зарегистрирован: 14.06.2017
Показать/Спрятать

Спасибо! Очень помогло Very Happy
ВверхНа форуме нет Профиль
Показать сообщения:   

Общий рейтинг темы Запись произвольного адреса в контактную информацию объекта в конфигурациях на БСП версий 2.X 1С Предприятия 8.2/8.3
Средний рейтинг: 4.56 :: Мин. рейтинг: 1 :: Макс. рейтинг: 5 :: Количество оценок: 9
Выберите оценку: 1   2   3   4   5  


Похожие темы
Тема Автор Форум Ответов Посл. сообщение
Нет новых сообщений Процедуры для работы с офисными документами в конфигурациях на БСП версий 2.X 1С Предприятия...
MSWord, OpenOffice Writer
Процедуры созданы в процессе реализации проекта, в котором присутствует сложная печатная форма для MSWord с таблицами, изображениями, графиками, внедряемыми при генерации документа, и различной ориентацией страниц в
Sergey 1Сv8: Программирование, отчёты, обработки, статьи 17 Вс 29 Янв, 2017 01:39 Посмотреть последнее сообщение
Sergey
Нет новых сообщений Перезаполнить юридический адрес контрагентов и некоторые реквизиты в бухгалтерии предприятия...
контактная информация
Сергей, хочу спросить совета по данному вопросу. В нашей бухгалтерии включена функция заполнения реквизитов по ИНН. Недавно наш главбух захотела привести все юридические адреса в соответствие с базой ЕГРЮЛ и по
Павел2104 1Сv8: Программирование, отчёты, обработки, статьи 7 Сб 30 Май, 2015 17:45 Посмотреть последнее сообщение
Павел2104
Нет новых сообщений Заполнить адрес по умолчанию в контактной информации контрагента в УТ 11
контактная информация
Здравствуйте. Недавно руководство поставило задачу при вводе нового партнёра или контрагента при создании заказа клиента или реализации автоматически заполнять фактический адрес, то есть указывать область и город. Это
Павел2104 1Сv8: Программирование, отчёты, обработки, статьи 9 Ср 08 Июл, 2015 23:29 Посмотреть последнее сообщение
ВладК
Нет новых сообщений Функция. Получение содержимого адреса url (вебстраницы) методом GET для 1С: Предприятия 8.2....
взаимодействие с веб-сервером
Универсальная функция, позволяющая получить содержимое ответа HTTP-сервера. Пример использования можно посмотреть в обработке 516 из статьи Передача файлов и данных на веб-сервер средствами 1С:Предприятие 8.X методом
Sergey 1Сv8: Программирование, отчёты, обработки, статьи 0 Вс 02 Мар, 2014 21:55 Посмотреть последнее сообщение
Sergey
Нет новых сообщений БСП 2.2.3, новшества в получении разрешений на создание COM-объекта
Вышла новая версия БСП 2.2.3.31, и новая версия БП 3.0.34.10... и перестала устанавливаться моя доп. обработка. Падала на вызове: Код ПараметрыРегистрации.Разрешения.Добавить(
Smarty 1Сv8: Программирование, отчёты, обработки, статьи 0 Чт 03 Июл, 2014 11:45 Посмотреть последнее сообщение
Smarty






Часовой пояс: UTC + 3 часа
Просматривают тему:
Зарегистрированные пользователи: Нет

Перейти:   
Версия для печати
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы можете скачивать файлы
/a
Имя:

Пароль:

Запомнить
  Яндекс.Метрика
CrackerTracker © 2004 - 2018 CBACK.de