gifts2017

KLADR: Ввод адреса по классификатору адресов КЛАДР (ExtDb для 8.3) управляемые формы

Опубликовал Андрей Максимов (гыук320) в раздел Печать - Классификаторы

За основу была взята публикация http://infostart.ru/public/189714/
Всё новое - это хорошо забытое старое! Представляю оригинальную версию обработки для ввода адреса из КЛАДР в конфигурациях 8.3 (управляемые формы) без использования типового регистра сведений «Адресный классификатор». Как многим известно, в замечательной программе «1С: Бухгалтерия 7.7» ввод адресов производится из внешних DBF-файлов, свободно скачиваемых с сайта ФНС или диска ИТС в каталог ExtDb рабочей базы. С помощью данной обработки вы сможете легко подключить и обновлять внешний КЛАДР для неограниченного количества своих баз меньше чем за одну минуту.

За основу была взята публикация http://infostart.ru/public/189714/ , т. к. автор в свое время писал

9. Chastiser 25.03.2014 08:51

(8) Спасибо. На управляемых формах делать пока нет надобности. Тут показан только сам подход, а оформление каждый сам доработает под себя при желании.
 
Решил сделать на управляемых формах.
Из небольших доработок:
1) весь подбор осуществляется в одной форме;
2) плюс автоматический фильтр по первым символам при подборе во всех строках классификатора;
3) по умолчанию при открытии регион Тульская область, город Тула.


Скачать файлы

Наименование Файл Версия Размер
Кладр 28
.epf 16,50Kb
29.05.15
28
.epf 1 16,50Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Арсений Прялкин (CeHbKA) 11.06.15 15:10
Не работает обработка - ругается на отсутствующие функции "НомерПоВиду" и "НомерДомаВИнтервале"
2. Андрей Максимов (гыук320) 16.06.15 11:16
(1) CeHbKA, Спасибо за комментарий. Обработка относительно старая и забыл что кусок вынес в общий модуль (а перед публикацией проверял как раз на базе где он есть):


// Функция возвращает представление адреса собранного из полей значений Поле1..Поле9
Функция ПолучитьПредставлениеАдреса(Запись) Экспорт
	ТекПредставление = "";
	Если СокрЛП(Запись.Поле1) <> "" Тогда
		ТекПредставление = ТекПредставление + ", " + СокрЛП(Запись.Поле1);
	КонецЕсли;
	Если СокрЛП(Запись.Поле2) <> "" Тогда
		ТекПредставление = ТекПредставление + ", " + СокрЛП(Запись.Поле2);
	КонецЕсли;
	Если СокрЛП(Запись.Поле3) <> "" Тогда
		ТекПредставление = ТекПредставление + ", " + СокрЛП(Запись.Поле3);
	КонецЕсли;
	Если СокрЛП(Запись.Поле4) <> "" Тогда
		ТекПредставление = ТекПредставление + ", " + СокрЛП(Запись.Поле4);
	КонецЕсли;
	Если СокрЛП(Запись.Поле5) <> "" Тогда
		ТекПредставление = ТекПредставление + ", " + СокрЛП(Запись.Поле5);
	КонецЕсли;
	Если СокрЛП(Запись.Поле6) <> "" Тогда
		ТекПредставление = ТекПредставление + ", " + СокрЛП(Запись.Поле6);
	КонецЕсли;
	Если СокрЛП(Запись.Поле7) <> "" Тогда
		ТекПредставление = ТекПредставление + ", д. " + СокрЛП(Запись.Поле7);
	КонецЕсли;
	Если СокрЛП(Запись.Поле8) <> "" Тогда
		ТекПредставление = ТекПредставление + ", кор. " + СокрЛП(Запись.Поле8);
	КонецЕсли;
	Если СокрЛП(Запись.Поле9) <> "" Тогда
		ТекПредставление = ТекПредставление + ", кв. " + СокрЛП(Запись.Поле9);
	КонецЕсли;
	Если СтрДлина(ТекПредставление) > 2 Тогда
		ТекПредставление = Сред(ТекПредставление, 3);
	КонецЕсли;
	Возврат ТекПредставление;
КонецФункции

// Функция возвращает строковое представление адреса (в формате через запятую), включая незаполненные поля
Функция ПолучитьПолныйАдрес(Запись) Экспорт
	//Результат = "," + 
	//СокрЛП(Запись.Поле1) + ", " +
	//СокрЛП(Запись.Поле2) + ", " +
	//СокрЛП(Запись.Поле3) + ", " +
	//СокрЛП(Запись.Поле4) + ", " +
	//СокрЛП(Запись.Поле5) + ", " +
	//СокрЛП(Запись.Поле6) + ", " +
	//СокрЛП(Запись.Поле7) + ", " +
	//СокрЛП(Запись.Поле8) + ", " +
	//СокрЛП(Запись.Поле9);
	//Если ПустаяСтрока(СтрЗаменить(Результат,",","")) Тогда Результат="" КонецЕсли;
	//Возврат Результат;
КонецФункции

Функция ВидПоНомеру(Ном) Экспорт
	//Возврат ?(Ном=0, "Регион", ?(Ном=1, "Район", ?(Ном=2, "Город", ?(Ном=3, "НасПункт", ?(Ном=4, "Улица", "Дом")))));
КонецФункции

Функция НомерПоВиду(Вид) Экспорт
	Возврат ?(Вид="Регион", 0, ?(Вид="Район", 1, ?(Вид="Город", 2, ?(Вид="НасПункт", 3, ?(Вид="Улица", 4, 5)))));
КонецФункции

// Служебная функция, предназначенная для получения описания типов строки, заданной длины.
// 
// Параметры:
//  ДлинаСтроки - число, длина строки.
//
// Возвращаемое значение:
//  Объект "ОписаниеТипов" для строки указанной длины.
//
Функция ПолучитьОписаниеТиповСтроки(ДлинаСтроки) Экспорт
	//Массив = Новый Массив; 
	//Массив.Добавить(Тип("Строка"));
	//КвалификаторСтроки = Новый КвалификаторыСтроки(ДлинаСтроки, ДопустимаяДлина.Переменная);
	//Возврат Новый ОписаниеТипов(Массив, , КвалификаторСтроки);
КонецФункции


// Функция определяет входимость числа в заданный диапазон
//  При этом диапазон задается как это описано в комментарии к функции ЧислоВИнтервале
//
// Параметры: 
//    Номер              - (число, строка) номер дома с корпусом
//    Интервал           - (строка), интервал чисел (домов)
//    ТочноеСоответствие - (булево) номер дома должен точно соответствовать номеру в интервале
//                         или допускается наличие дробей и произвольных букв после номера дома
//
// Возвращаемое значение:
//    Истина - если заданное число входит в диапазон,
//    Ложь   - если не входит
//
Функция ВходитВИнтервал(Знач Номер, Интервал, ТочноеСоответствие) 
	
	
КонецФункции

// Функция определяет входимость:
//  1. Номера дома (представленного в виде строки)
//     где Номер дома, это строка вида:
//     <СтрокаДом> пример: 58А, 32/1, 50А/8
//
//  2. Номера дома и номера корпуса (строения), в виде строки:
//     <СтрокаДом>к<СтрокаКорпус>,   пример: 32к1   это дом 32 корпус 1, 
//     <СтрокаДом>/<СтрокаКорпус>,   пример: 32/1   это дом 32 корпус 1, 
//     <СтрокаДом>стр<СтрокаКорпус>, пример: 32стр1 это дом 32 корпус 1, 
//
//  3. Числа (номера дома) в заданный интервал чисел
//     При этом интервал задается строкой вида:
//     <Диапазон>[,<Диапазон>]
//     где Диапазон, это строка вида:
//     [Ч/Н]<Число>[-<Число>]
//     Префикс Ч или Н диапазона обозначает четность и нечетность входящих в него чисел
//     Пример: в интервал Ч12-14,Н1-5,20-29 входят числа 1,3,5,12,14 и все с 20 по 29
//
// Параметры: 
//    Номер              - (число, строка) номер дома с корпусом
//    Интервал           - (строка), интервал чисел (домов)
//    ТочноеСоответствие - (булево) номер дома должен точно соответствовать номеру в интервале
//                         или допускается наличие дробей и произвольных букв после номера дома
//
//  Истина - если заданное число входит в диапазон,
//  Ложь   - если не входит
//
Функция НомерДомаВИнтервале(Номер, Знач Интервал, ТочноеСоответствие = Ложь) Экспорт
	
	Пока НЕ ПустаяСтрока(Интервал) Цикл
		
		Позиция = Найти(Интервал, ",");
		Если Позиция = 0 Тогда
			Возврат ВходитВИнтервал(Номер, Интервал, ТочноеСоответствие);
		Иначе
			Если ВходитВИнтервал(Номер, СокрЛП(Лев(Интервал, Позиция - 1)), ТочноеСоответствие) Тогда
				Возврат Истина;
			Иначе
				Интервал = Сред(Интервал, Позиция + 1);
			КонецЕсли;
		КонецЕсли;
		
	КонецЦикла;
	
	Возврат Ложь;
	
КонецФункции


...Показать Скрыть
3. Никола Тесла (alext88) 29.12.15 13:55
почему-то индекс не определяется