Каталог решений - Подключение одного классификатора адресов для типовых без загрузки в каждую базу

Подключение одного классификатора адресов для типовых без загрузки в каждую базу

Подключение одного классификатора адресов для типовых без загрузки в каждую базу

В наличии

Подключить один кладр на все базы — элементарно.

Категория:

Описание

Невероятно, но факт, для большинства типовых, таких как ТиС, Бух, УСН, ПУБ, ПБОЮЛ, Комплексная, Бюджетная подключить один Кладр на все базы элементарно. Достаточно добавить в конфигураторе константу КаталогКлассификаторов (тип строка, длина, например, 80), в программе указать в ней путь до Кладра, например, D:\Kladr.

При вводе адреса надо зайти на закладку Классификаторы и выбрать 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(Адрес);
    Попытка
     Форма.УстановитьАтрибут(Реквизит,Адрес);
    Исключение
     Возврат Адрес;
    КонецПопытки;
    Возврат "";
   КонецЕсли;
  Иначе
   ОткрытьФормуМодально("Обработка.ВводАдреса",Параметры)
  КонецЕсли;
 КонецЕсли;

 Если ВидФормы = "" Тогда
  Если Параметры <> "Отмена" тогда
   Возврат Параметры
  Иначе
   Возврат Реквизит
  КонецЕсли;
 ИначеЕсли Параметры <> "Отмена" тогда
  Если СокрЛП(Форма.ПолучитьАтрибут(Реквизит))<>СокрЛП(Параметры) Тогда
   Форма.УстановитьАтрибут(Реквизит,Параметры);
  КонецЕсли;
  Возврат Параметры
 КонецЕсли;
 Возврат ""
КонецФункции // глВводАдреса
//яИзменил}
has been added to your cart:
Оформление заказа