Подключение одного классификатора адресов для типовых без загрузки в каждую базу
Подключить один кладр на все базы — элементарно.
- Описание
- Подробнее
Описание
При вводе адреса надо зайти на закладку Классификаторы и выбрать 2003 г.
В релизах после 495 надо установить галку «Показывать только значимые адреса» дабы не задваивались города в списке выбора. Так же желательно открыть в конфигураторе обработку ВводАдреса, найти строки и изменить значение
Если ПустоеЗначение(ФорматКлассификатора) = 1 Тогда
ФорматКлассификатора = 2;//яИзменил, было 1
КонецЕсли;
Если ПустоеЗначение(ПоказыватьТолькоЗначимые) = 1 Тогда
ПоказыватьТолькоЗначимые = 1;//яИзменил, было 0
КонецЕсли;
В противном случае в каждой новой базе при выборе 2003 г. взводится флаг изменения формата и при открытии региона и проч. в первый раз будет предложено переиндексировать классификатор, а это пустая трата времени.
Всё… Наслаждайтесь. И не надо грузить в каждую базу по 100 мб кладра, и с обновлениями проблем нет.
Поражает, что одинэсчики уже давно заложили и реализовали функционал подключения Кладра через эту константу, но почему-то не дают им воспользоваться, т.е. не включают константу в конфигурации. Изобрели, понимаешь, велосипед, но ездить на нём не дают, да и сами не ездят :))) И почему студенты из 1С до сих пор этого не сделали?! :)))
Ну, что ж, сделаем это за них…
Для ЗиК и Налогоплательщик всё несколько сложнее… Ибо одинэсчики решили грузить Кладр в справочники, а не считывать с диска. В результате объем базы возрастает несоизмеримо с самими данными, вводимыми в базу. И мы вынуждены ждать пока переиндексируестя справочник street да kladr после сбоя, да и при архивации эта справочная инфа ни к чему :)))
Далее предложу переделать механизм работы с Кладром как в бухии.
Если кто готов к внесению незначительных изменений в МД и поддержке последующих обновлений, пожалуйста, прочтите нижеследующее. Переделка займет не более 15 мин., а при обновлениях и того меньше.
Итак, после добавления константы делаем:
1. Копипастим обработку ВводАдреса и ИмпортАдресныхКлассификаторов из Бухии в ЗиК. Они появятся в ЗиКе под именем ВводАдреса1 и ИмпортАдресныхКлассификаторов1.
Открываем обработку ВводАдреса1, ищем поиском строку «Справочник(«STREET»)» и строки
ИначеЕсли Метаданные.Обработка(«ВыборИзКлассификатораАдресов»).Выбран() = 1 Тогда
ОткрытьФорму(«Обработка.ВыборИзКлассификатораАдресов», Параметры);
переносим в начало условия Если… (там всего 2 вхождения).
2. Из Бухии обработку ВыборИзКлассификатораАдресов сохраняем как внешний отчет (это связано с наличием картинок на форме. При простом копипасте картинки не сохраняются). В ЗиКе создаем новую обработку, обзываем её ВыборИзКлассификатораАдресов и заменяем на сохранённый внешний отчет.
3.Добавляем в начало ГМ
//яИзменил взял из Бухии
Перем глСписокУлиц Экспорт;
Перем глВладелецСпискаУлиц Экспорт;
//яИзменил
4.Копируем из ГМ бухии процедуру глВводАдреса и вставляем её над (перед)аналогичной процедурой в ЗиК и обзываем её глВводАдреса1.
Да вот он, этот кусок кода:
//******************************************************************************
//яИзменил{ взял из бухии
//
// глВводАдреса1(Адрес, ФорматАдреса = 0)
//
// Параметры:
// Адрес (строка), адрес который необходимо отредактировать.
// ФорматАдреса (число) 1 - адрес может только вводится в формате МНС,
// 0 - адрес может вводится в формате МНС и произвольном формат.
// иначе - адрес может вводится только в произвольном формат.
//
// Возвращаемое значение:
// Нет
//
// Описание:
// Процедура открывает форму ввода (редактирования адреса).
Процедура глВводАдреса1(Адрес, ФорматАдреса = 0) Экспорт
Если ТипЗначенияСтр(Адрес) <> "Строка" Тогда
Адрес = "";
КонецЕсли;
Если ФорматАдреса = 0 Тогда
ОткрытьФормуМодально("Обработка.ВводАдреса1", Адрес);
Иначе
Параметры = СоздатьОбъект("СписокЗначений");
Параметры.Установить("Адрес", Адрес);
Параметры.Установить("Формат адреса", ФорматАдреса);
ОткрытьФормуМодально("Обработка.ВводАдреса1", Параметры);
Если ТипЗначенияСтр(Параметры) = "СписокЗначений" Тогда
Если Адрес <> Параметры.Получить("Адрес") Тогда
Адрес = Параметры.Получить("Адрес");
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры // глВводАдреса1()
//яИзменил
Родную функцию ЗиК глВводАдреса также заменяем на вот эту немного измененную:
//******************************************************************************
// глВводАдреса(Форма,Реквизит)
//
// Параметры:
// Форма - контекст формы в которой отражается адрес
// Реквизит - реквизит формы (либо переменная), строка в формате "9 запятых"
//
// Возвращаемое значение
// строка - адрес
//
// Описание:
// Предназначена для ввода адреса
// Вызывается по кнопке формы
//
Функция глВводАдреса(Форма,Реквизит) Экспорт
АдресИзБД=1;
Если Метаданные.Константа("КаталогКлассификаторов").Выбран() = 1 Тогда
пКаталог = СокрЛП(Константа.ПолучитьАтрибут("КаталогКлассификаторов"));
Если ПустоеЗначение(пКаталог)=0 Тогда
АдресИзБД=0;
Если ФС.СуществуетФайл(пКаталог)=0 Тогда
Если ФС.СуществуетФайл(пКаталог+"\")=0 Тогда //для 98
АдресИзБД=1;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Попытка
ВидФормы = Форма.Вид();
Исключение
ВидФормы = ""; // из обработки Настройка - реквизитов нет, есть только переменные
КонецПопытки;
Параметры = СоздатьОбъект("СписокЗначений");
Если ВидФормы = "" Тогда
Параметры.ДобавитьЗначение(Реквизит);
Иначе
Параметры.ДобавитьЗначение(Форма.ПолучитьАтрибут(Реквизит));
КонецЕсли;
Если ВидФормы = "Сотрудники" тогда
// НЕ использование слоя произвольного формата
Параметры.ДобавитьЗначение(0);
Иначе
// использование слоя произвольного формата
Параметры.ДобавитьЗначение(1);
КонецЕсли;
Если Реквизит="АдресВСтранеПроживания" Тогда
ОткрытьФормуМодально("Обработка.ВводАдресаПроживания",Параметры)
Иначе
Если АдресИзБД=0 Тогда
Попытка
Адрес=Форма.ПолучитьАтрибут(Реквизит);
Исключение
Адрес=Реквизит;//из обработки передается переменная
КонецПопытки;
Если Реквизит="АдресВСтранеПроживания" Тогда
ОткрытьФормуМодально("Обработка.ВводАдресаПроживания",Параметры);
Иначе
глВводАдреса1(Адрес);
Попытка
Форма.УстановитьАтрибут(Реквизит,Адрес);
Исключение
Возврат Адрес;
КонецПопытки;
Возврат "";
КонецЕсли;
Иначе
ОткрытьФормуМодально("Обработка.ВводАдреса",Параметры)
КонецЕсли;
КонецЕсли;
Если ВидФормы = "" Тогда
Если Параметры <> "Отмена" тогда
Возврат Параметры
Иначе
Возврат Реквизит
КонецЕсли;
ИначеЕсли Параметры <> "Отмена" тогда
Если СокрЛП(Форма.ПолучитьАтрибут(Реквизит))<>СокрЛП(Параметры) Тогда
Форма.УстановитьАтрибут(Реквизит,Параметры);
КонецЕсли;
Возврат Параметры
КонецЕсли;
Возврат ""
КонецФункции // глВводАдреса
//яИзменил}