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

27.01.12

База данных - Инструменты администратора БД

Подключить один кладр на все базы - элементарно.
Невероятно, но факт, для большинства типовых, таких как ТиС, Бух, УСН, ПУБ, ПБОЮЛ, Комплексная, Бюджетная подключить один Кладр на все базы элементарно. Достаточно добавить в конфигураторе константу КаталогКлассификаторов (тип строка, длина, например, 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(Адрес);
    Попытка
     Форма.УстановитьАтрибут(Реквизит,Адрес);
    Исключение
     Возврат Адрес;
    КонецПопытки;
    Возврат "";
   КонецЕсли;
  Иначе
   ОткрытьФормуМодально("Обработка.ВводАдреса",Параметры)
  КонецЕсли;
 КонецЕсли;

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

Теперь, если в константе указать путь для Кладра - Кладр будет считываться с диска, если же константу очистить, можно будет грузить Кладр в справочник как и было раньше (ну, это для тех неверующих, кто хочет откатиться к прежнему варианту).

Вот собссно и всё...

При обновлениях нужно будет выполнить пункт 3 и 4.
Я думаю это займет не более 2-х минут.

ЗЫ: Можно (или даже нужно) удалить файл справочника street из базы. У меня в ред. 273 он называтся SC551.dbf и SC551.cdx - у вас может называться по-другому, хотя, маловероятно. Откройте *.dd файл на просмотр и поиском по "street" найдите строки:

#==TABLE no 10 : Справочник STREET
# Name |Descr |Type[A/S/U]|DBTableName|ReUsable
T=SC551 |Справочник STREET |A |SC551 |1

SC551 - это и есть имя файла, который нужно удалить.
Затем, следует запустить программу монопольно.

Спасибо за внимание. Всем Удачи!

ЗЫ: Актуальный на сегодня КЛАДР берём здесь: http://www.gnivc.ru/inf_provision/classifiers_reference/kladr/

См. также

Инструменты администратора БД Системный администратор Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Простецкий скрипт переименования файлов в папке в нижний регистр, будет полезен программистам и системным администраторам имеющим навыки програмирования в 1С. Можно легко настроить под себя, спасает мне периодически час времени, может, кому еще будет полезен.

1 стартмани

18.02.2022    4034    0    igor7777    6    

2

Инструменты администратора БД Программист Пользователь Оперативный учет 7.7 1С:Торговля и склад 7.7 Управленческий учет Абонемент ($m)

Боремся с бардаком. Работы в прошлых датах запрещены. Непроведенные документы (по разным причинам) - автоматом переносятся в начало текущего дня при запуске любого первого сеанса 1С в текущем дне. Задержка старта 1С - практически незначима. Не требует настройки, не требует допрограммирования (исключая один оператор вставки в процедуру старта системы). Можно обработку выполнять вручную с любой периодичностью.

2 стартмани

25.05.2020    5885    2    CheBurator    3    

2

Журнал регистрации Инструменты администратора БД Системный администратор Программист Платформа 1С v7.7 Конфигурации 1cv7 Бесплатно (free)

Рассмотрим систему на базе Elasticsearch, Logstash и Kibana (ELK Stack) для анализа логов 1С Предприятие 7.7 с целью визуализации и анализа событий 1С.

22.01.2019    11571    phsin    20    

28

Инструменты администратора БД Системный администратор Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Скрипт позволяет выполнить объединение конфигураций и реструктуризацию из командной строки. Объединение выполняется штатными средствами конфигуратора 1С 7.7, взаимодействие с которым происходит путем посылки нажатий клавиш. Пригодится, если есть необходимость обновить или постоянно обновлять множество ИБ.

1 стартмани

22.04.2017    15866    4    devlabnn    2    

6

Инструменты администратора БД Бухгалтер Бухгалтерский учет 7.7 1С:Бухгалтерия 7.7 Украина Бухгалтерский учет Абонемент ($m)

Перепроведение по счету для конфигурации Бухгалтерский учет для Украины, 1С: Предприятие 7.7

1 стартмани

23.09.2016    3856    1    Genyak    1    

0

Инструменты администратора БД Системный администратор Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Периодически сталкивался со следующими проблемами при печати в 1С: 7.7 работающей под терминалом: 1) После замены принтера на клиентской машине 1С пытается печатать на старый принтер. 2) Отсутствует предварительный просмотр при печати. 3) Не работает печать без предварительного просмотра (пакетная печать документов). 4) В некоторых формах печатает, в некоторых нет.

1 стартмани

09.06.2016    28111    19    tux    3    

1

Инструменты администратора БД Системный администратор Программист Платформа 1С v7.7 Платформа 1С v8.3 Бесплатно (free)

Часто бывает необходимо отслеживать состояние часто повторяющихся регламентных заданий. Например, синхронизация данных с IP-телефонией, которая может производиться каждую минуту, синхронизация с сайтами, синхронизация данных с различными системами. Использовать для этих целей логирование 1С чрезвычайно неэффективно и не удобно. В таких случаях удобно использовать подход, применяемый в Unix-системах: писать логи в обычные текстовые файлы, а потом делать их обработку через эффективно работающие Unix-команды: grep, tail, cat, less и т.п.

18.05.2016    37250    rudjuk    21    

34
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. dmsob 19.02.07 21:36 Сейчас в теме
что-то не понял в чём фишка? в названии константы?
2. Хряк 144 19.02.07 23:03 Сейчас в теме
Фишка в том, что 1эсчики реализовали функционал подключения кладра через эту константу, но почему-то не дают им воспользоваться, т.е. не включают константу в конфигурации. Ну, совсем непонятно почему?
Ёпрст; +1 Ответить
3. andrey995 20.02.07 10:17 Сейчас в теме
да, поразительно, респект Автору
4. dmsob 21.02.07 07:55 Сейчас в теме
Круто!! а то у меня около 20 баз и везде по 100 мегов КЛАДР-а!!! Спасибо!
5. O-Planet 6443 21.02.07 23:19 Сейчас в теме
+ 1 Надо проверить, конечно, но хочется верить аффтору на слово. Может, потому, что кладры задолбали в натуре...
6. slavapil 132 22.02.07 09:50 Сейчас в теме
Есть внешний отчет "Ввод адреса по классификатору КЛАДР"
http://infostart.ru/projects/779/?ref=1552
, и ничего в коде править не надо.
Заменили "ВводАдреса", и ВСЁ ;)
+1 за иголку в стоге сена :)
7. andrey995 04.03.07 23:55 Сейчас в теме
для всех сомневающихся - пользуюсь доработкой несколько дней - никаких глюков не замечено ;)
8. victuan 4266 05.03.07 05:05 Сейчас в теме
Насчет константы. Если баз много, а классификатор один (в одном каталоге), то можно ли им пользоваться одновременно из нескольких баз? Ведь 1С может открывать внешние dbf-файлы только в эксклюзивном режиме, и если КЛАДР открыт в одной базе, то из других к нему уже не обратиться!
9. Хряк 144 07.03.07 12:28 Сейчас в теме
victuan, не пугай народ. Обращайся к одному кладру со скольких хочешь программ 1с одновременно. До сих пор жалоб на блокировки не поступало.
10. victuan 4266 09.03.07 06:03 Сейчас в теме
Это потому что никто не пытался в одно время редактировать адрес в разных базах. А такое вполне возможно по сети, если пользователей много. Проверь сам, если мне не веришь.
11. likan 16.01.09 12:30 Сейчас в теме
Даже если ктото и редактирует адрес - так тока в карточке клиента и ДБФ открыты тока на чтение шоб выцепить инфо по городам/районам/улицам...
12. ShoGUN 31.01.09 00:20 Сейчас в теме
victuan, это же ерунда. Ну выдастся ошибка 1 раз в 100 случаев. Почему кстати она не выдается, если из одной базы, но из разных сеансов редактировать адреса? По идее в этом случае тоже должна быть блокировка.
13. OSlike 03.04.09 00:41 Сейчас в теме
14. andru_dv 29.09.11 13:47 Сейчас в теме
Спасибо! Хорошая идея.
А я раньше грузил классификатор а одну базу, а затем
копировал папку Extdb в другие базы, чтобы каждый раз не ждать пока он грузиться снова и снова.
Плюсую!
15. tango 546 27.01.12 21:27 Сейчас в теме
плюса просто за идею. кладр достал реально
16. tomas303 01.03.13 16:43 Сейчас в теме
А есть ли такая же возможность с 8.2 Бух и Зуп сделать по КЛАДРУ, у меня порядка 80 баз , уже устал грузить туда кладры???
17. Chastiser 45 06.06.13 10:34 Сейчас в теме
Оставьте свое сообщение