Как программно получить код адреса КЛАДР
Чтобы было понятно, вот такие строки:
<ADDR>Россия, 630024, Новосибирская обл, Новосибирск г, Чукотский 4-й пер (бывш. 4-й Чукотский пер), дом 17</ADDR>
<ADDR_KLADR>#54000001000153700</ADDR_KLADR>
(это выгрузка из программы ФСС)
Как в ЗИК 7.7 программно получить этот 17-значный код? (у сотрудника введен адрес через кладр)
PS Зачем это нужно?
Это для пилотного проекта ФСС.
Обработки, которые есть на Инфостарте выгружают адрес, но не выгружают код адреса КЛАДР.
А ФСС требует этот код. Из программы ФСС код подхватывается.
<ADDR>Россия, 630024, Новосибирская обл, Новосибирск г, Чукотский 4-й пер (бывш. 4-й Чукотский пер), дом 17</ADDR>
<ADDR_KLADR>#54000001000153700</ADDR_KLADR>
(это выгрузка из программы ФСС)
Как в ЗИК 7.7 программно получить этот 17-значный код? (у сотрудника введен адрес через кладр)
PS Зачем это нужно?
Это для пилотного проекта ФСС.
Обработки, которые есть на Инфостарте выгружают адрес, но не выгружают код адреса КЛАДР.
А ФСС требует этот код. Из программы ФСС код подхватывается.
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Korben Dallas, вот вариант, как первое приближение, чуть позже сделаю эту функцию более универсальной
Функция ПолучитьКодКЛАДРПоАдресу(Регион, Район, Город, НасПункт, Улица)
KLADR = СоздатьОбъект("Справочник.KLADR");
STREET = СоздатьОбъект("Справочник.STREET");
KLADR.НайтиПоНаименованию(Регион);
КодРегиона = Лев(KLADR.Код, 2);
KLADR.НайтиПоНаименованию(Город + " #" + КодРегиона + "000");
STREET.НайтиПоНаименованию(Улица + " #" + KLADR.Код);
Возврат STREET.КодУлицы
КонецФункции // ПолучитьКодКЛАДРПоАдресу()
Показать
(8) Ёпрст, спасибо
Да, нашел КодУлицы = "540000010001537" не хватает в конце 00..., но это разберусь, хоть что-то
Проблема, в коде обращаясь (допустим из внешней обработки) к сотруднику "Сотрудники.АдресПрописка" (тип строка), заполучить КодУлицы справочника STREET
Да, нашел КодУлицы = "540000010001537" не хватает в конце 00..., но это разберусь, хоть что-то
Проблема, в коде обращаясь (допустим из внешней обработки) к сотруднику "Сотрудники.АдресПрописка" (тип строка), заполучить КодУлицы справочника STREET
(9) Korben Dallas, АдресСписком = глРазложить(выбСотр.АдресПрописка);
Индекс = АдресСписком.ПолучитьЗначение(2);
Регион = АдресСписком.ПолучитьЗначение(3);
СпрРегионы = СоздатьОбъект("Справочник.KLADR");
СпрРегионы.НайтиПоНаименованию(Регион);
КодРегиона = СпрРегионы.Код;
ИскомыйКод=КодРегиона+ Индекс;
Сообщить("ИскомыйКод="+Строка(ИскомыйКод));
Индекс = АдресСписком.ПолучитьЗначение(2);
Регион = АдресСписком.ПолучитьЗначение(3);
СпрРегионы = СоздатьОбъект("Справочник.KLADR");
СпрРегионы.НайтиПоНаименованию(Регион);
КодРегиона = СпрРегионы.Код;
ИскомыйКод=КодРегиона+ Индекс;
Сообщить("ИскомыйКод="+Строка(ИскомыйКод));
(10) Hla, это круто и так быстро!
Данный код дает "код региона + индекс", то есть в моем примере дает 54000000000630024
а нужно 54000001000153700, причем 540000010001537 (без нулей в конце) - это КодУлицы спр.STREET, проверено.
А в спр.STREET искать по наименованию легко не получится, наименование выглядит так:
"Чукотский 4-й пер #54000001000"!
А регион выглядит так "54000000000" (разница в 1).
Почему АРМ ФСС выдает этот код хз, но нужно сделать как она.
Смысл понятен, буду пробовать.
Данный код дает "код региона + индекс", то есть в моем примере дает 54000000000630024
а нужно 54000001000153700, причем 540000010001537 (без нулей в конце) - это КодУлицы спр.STREET, проверено.
А в спр.STREET искать по наименованию легко не получится, наименование выглядит так:
"Чукотский 4-й пер #54000001000"!
А регион выглядит так "54000000000" (разница в 1).
Почему АРМ ФСС выдает этот код хз, но нужно сделать как она.
Смысл понятен, буду пробовать.
(11) Korben Dallas, рассмотрите такой вариант : АдресСписком = глРазложить(выбСотр.АдресПрописка);
Индекс = АдресСписком.ПолучитьЗначение(2);
Регион = АдресСписком.ПолучитьЗначение(3);
СпрРегионы = СоздатьОбъект("Справочник.KLADR");
СпрРегионы.НайтиПоНаименованию(Регион);
КодРегиона = Лев(СпрРегионы.Код,2);
Район = АдресСписком.ПолучитьЗначение(4);
Город = Строка(СокрЛП(АдресСписком.ПолучитьЗначение(5)));
НП = АдресСписком.ПолучитьЗначение(6);
Улица = АдресСписком.ПолучитьЗначение(7);
СпрУлица = СоздатьОбъект("Справочник.STREET");
Если СпрУлица.НайтиПоНаименованию(Улица)=1 Тогда
Сообщить("КодУлицы="+Строка(СпрУлица.КодУлицы)+"Город="+Строка(СпрУлица.Город)+" Нас пункт="+Строка(СпрУлица.НасПункт)+" улица="+Строка(СпрУлица.Наименование));
КонецЕсли;
Сообщить("КодРегиона="+Строка(КодРегиона));
Индекс = АдресСписком.ПолучитьЗначение(2);
Регион = АдресСписком.ПолучитьЗначение(3);
СпрРегионы = СоздатьОбъект("Справочник.KLADR");
СпрРегионы.НайтиПоНаименованию(Регион);
КодРегиона = Лев(СпрРегионы.Код,2);
Район = АдресСписком.ПолучитьЗначение(4);
Город = Строка(СокрЛП(АдресСписком.ПолучитьЗначение(5)));
НП = АдресСписком.ПолучитьЗначение(6);
Улица = АдресСписком.ПолучитьЗначение(7);
СпрУлица = СоздатьОбъект("Справочник.STREET");
Если СпрУлица.НайтиПоНаименованию(Улица)=1 Тогда
Сообщить("КодУлицы="+Строка(СпрУлица.КодУлицы)+"Город="+Строка(СпрУлица.Город)+" Нас пункт="+Строка(СпрУлица.НасПункт)+" улица="+Строка(СпрУлица.Наименование));
КонецЕсли;
Сообщить("КодРегиона="+Строка(КодРегиона));
Для 8.1 и выше через РС АдресныйКлассификатор. Адрес = Представление из РС КонтактнаяИнформация.
Функция ПолучитьКодРегиона(Адрес)
АдресСписком = глРазложить(Адрес);
Регион = АдресСписком[1].Значение;
КодРегиона = "";
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
| АдресныйКлассификатор.Сокращение
|ИЗ
| РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.Прямой);
Пока Выборка.Следующий() Цикл
СокращениеПолное = Выборка.Сокращение;
Сокращение = " " + СокрЛП(Выборка.Сокращение);
ДлинаСокращения = СтрДлина(Сокращение);
Если Прав(Регион, ДлинаСокращения) = Сокращение Тогда
Регион = Лев(Регион, СтрДлина(Регион) - ДлинаСокращения);
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Наименование", "%" + СокрЛП(Регион) + "%");
Запрос.УстановитьПараметр("Сокращение", СокращениеПолное);
Запрос.Текст = "ВЫБРАТЬ
| АдресныйКлассификатор.КодРегионаВКоде
|ИЗ
| РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор
|ГДЕ
| АдресныйКлассификатор.Наименование ПОДОБНО &Наименование
| И АдресныйКлассификатор.Сокращение = &Сокращение";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.Прямой);
Если Выборка.Следующий() Тогда
КодРегиона = Выборка.КодРегионаВКоде;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат КодРегиона;
КонецФункции
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот