ООО ЭкоЮнит
FAQSearchMemberlistUsergroupsFilesLog inRegisterГлавная
printer-friendly view
 
 
AuthorMessage
Sergey Gender:Male


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


Joined: 06 Jan 2005
Show/Hide

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

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

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

Protected Text:
Show


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

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

Code:

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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



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

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


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

Значения полей адреса в базе данных
Code:
<КонтактнаяИнформация 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.

Protected Text:
Show


Download ПреобразованиеКонтактнойИнформацииВФорматXML.epf (15.56 KB). Added/Updated Sun 06 Sep, 2015 03:04. Downloaded 893 Time(s).
This file for registered users. Преобразование значений контактной информации в формат 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!
Back to topOffline View user's profile Visit poster's website Skype Name
Сергей63 Gender:Male

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


Joined: 16 Jun 2014
Show/Hide

а как записать Российский адрес?
у меня есть строка ",446254,САМАРСКАЯ ОБЛ,БЕЗЕНЧУКСКИЙ Р-Н,,БЕЗЕНЧУК ПГТ,ТИМИРЯЗЕВА УЛ,26,,37"
Back to topOffline View user's profile
Sergey Gender:Male


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


Joined: 06 Jan 2005
Show/Hide

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

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор 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!
Back to topOffline View user's profile Visit poster's website Skype Name
Сергей63 Gender:Male

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


Joined: 16 Jun 2014
Show/Hide

здрасьте!
Внимательно изучил, и даже повторил.
строку отформатировал. все ок, в представление вставляется красивая строка. но адрес не становиться российским. делаю след махинацию, изменяю данные в "представлении" (добавляю/удаляю пробел) перехожу в комментарий - Опа, адрес стал российский. когда копирую строку из представления в другой адрес то он сохранятеся и открывается как российский.
Back to topOffline View user's profile
Sergey Gender:Male


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


Joined: 06 Jan 2005
Show/Hide

На скриншоте в первом посте ваш адрес. Код без изменений. Записывал в БП 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!
Back to topOffline View user's profile Visit poster's website Skype Name
Сергей63 Gender:Male

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


Joined: 16 Jun 2014
Show/Hide

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

в общем хотелось чтобы при открытии адреса - он раскидывался по картинке
Город, нас пункт,
улица
дом
квартира
в этом то и был вопрос, извиняюсь, если не так сформулировал
Back to topOffline View user's profile
Sergey Gender:Male


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


Joined: 06 Jan 2005
Show/Hide

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


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

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

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор 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!
Back to topOffline View user's profile Visit poster's website Skype Name
Сергей63 Gender:Male

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


Joined: 16 Jun 2014
Show/Hide

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

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


Joined: 27 Sep 2014
Show/Hide

Благодарю. Начал искать, а у вас уже есть готовое. Confused Теперь надо придумать как записывать телефоны из таблицы excel
Back to topOffline View user's profile
Раев Gender:Male

Гостья


Joined: 08 Sep 2015
Show/Hide

Скажите пароль к модулю объекта)
Back to topOffline View user's profile
Sergey Gender:Male


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


Joined: 06 Jan 2005
Show/Hide

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

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор 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!
Back to topOffline View user's profile Visit poster's website Skype Name
Владимир2017


Joined: 19 Jun 2017
Show/Hide

Спасибо огромное. Опыта у меня мало, но, если я правильно понимаю, то данный код можно использовать и в обработчике Конвертация данных 2 при переносе в БУ3.0 справочника Контрагенты ?
Back to topOffline View user's profile
Sergey Gender:Male


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


Joined: 06 Jan 2005
Show/Hide

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

_________________
Профессионал - это тот же дилетант, только знающий где ошибется. Генератор 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!
Back to topOffline View user's profile Visit poster's website Skype Name
Виткота27


Joined: 14 Jun 2017
Show/Hide

Спасибо! Очень помогло Very Happy
Back to topOffline View user's profile
Косолап Gender:Male


Joined: 01 Aug 2018
Show/Hide

Можно ли как-то сделать, чтобы адрес, который введен в свободной форме (но по всем правилам), попадал в остальные поля этого окошка? Область, Город, улица, дом...
Back to topOffline View user's profile
Display posts from previous:   

Summary Rating For >> Запись произвольного адреса в контактную информацию объекта в конфигурациях на БСП версий 2.X 1С Предприятия 8.2/8.3
Average Rating: 4.56 :: Min Rating: 1 :: Max Rating: 5 :: Number of Ratings: 9
Choose Rating: 1   2   3   4   5  


Similar Topics
Topic Author Forum Replies Last Post
No new posts Процедуры для работы с офисными документами в конфигурациях на БСП версий 2.X 1С Предприятия...
MSWord, OpenOffice Writer
Процедуры созданы в процессе реализации проекта, в котором присутствует сложная печатная форма для MSWord с таблицами, изображениями, графиками, внедряемыми при генерации документа, и различной ориентацией страниц в
Sergey 1Сv8: Программирование, отчёты, обработки, статьи 17 Sun 29 Jan, 2017 01:39 View latest post
Sergey
No new posts Перезаполнить юридический адрес контрагентов и некоторые реквизиты в бухгалтерии предприятия...
контактная информация
Сергей, хочу спросить совета по данному вопросу. В нашей бухгалтерии включена функция заполнения реквизитов по ИНН. Недавно наш главбух захотела привести все юридические адреса в соответствие с базой ЕГРЮЛ и по
Павел2104 1Сv8: Программирование, отчёты, обработки, статьи 7 Sat 30 May, 2015 17:45 View latest post
Павел2104
No new posts Заполнить адрес по умолчанию в контактной информации контрагента в УТ 11
контактная информация
Здравствуйте. Недавно руководство поставило задачу при вводе нового партнёра или контрагента при создании заказа клиента или реализации автоматически заполнять фактический адрес, то есть указывать область и город. Это
Павел2104 1Сv8: Программирование, отчёты, обработки, статьи 9 Wed 08 Jul, 2015 23:29 View latest post
ВладК
No new posts Функция. Получение содержимого адреса url (вебстраницы) методом GET для 1С: Предприятия 8.2....
взаимодействие с веб-сервером
Универсальная функция, позволяющая получить содержимое ответа HTTP-сервера. Пример использования можно посмотреть в обработке 516 из статьи Передача файлов и данных на веб-сервер средствами 1С:Предприятие 8.X методом
Sergey 1Сv8: Программирование, отчёты, обработки, статьи 0 Sun 02 Mar, 2014 21:55 View latest post
Sergey
No new posts БСП 2.2.3, новшества в получении разрешений на создание COM-объекта
Вышла новая версия БСП 2.2.3.31, и новая версия БП 3.0.34.10... и перестала устанавливаться моя доп. обработка. Падала на вызове: Code ПараметрыРегистрации.Разрешения.Добавить(
Smarty 1Сv8: Программирование, отчёты, обработки, статьи 0 Thu 03 Jul, 2014 11:45 View latest post
Smarty






All times are UTC + 3 hours
Users browsing this topic:
Registered Users: None

Jump to:   
printer-friendly view
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum
/a
Username:

Password:

Log me on automatically each visit
  Яндекс.Метрика
CrackerTracker © 2004 - 2018 CBACK.de