Как из базы 1с вынести одну или несколько фирм в отдельную базу
Необходимо удалить одну из организаций из информационной базы Бухгалтерия предприятия, редакция 3.0? Разделить одну, общую базу, где ведется учет по нескольким организациям? Данная статья может быть полезна!
Как всегда, Новый Год приносит всем, кто связан с бухгалтерией, сюрпризы. И не все они приятные.
Учет по 3 - м юридическим лицам ведется в одной базе бухгалтерия предприятия ред. 3.0. Учет, как говорится, "без особенностей", лица как лица. Конфигурация - почти типовая. Документов не очень много, база на сервере приложений, быстродействие всех устраивает. 5 гигабайт за 2 года, менее 100 тыс. документов (правда крупненьких) - сущие пустяки. А обновлять одну базу вместо трех - намного приятнее. И вот от руководства в начале декабря поступает команда: Разделить, т.е. для каждого юридического лица должна быть отдельная база. И обязательно - никаких следов присутствия ранее других организаций в каждой из баз. Обсуждению, естественно, такие приказы не подлежат.
Пришлось экспериментировать. Первый вариант - шальная идея использовать конвертацию данных. Шальная идея кончилась, "в лоб" и быстро решить вопрос не удалось. Описание танцев с бубном на граблях заслуживает отдельной статьи, которую когда - нибудь, возможно, и напишу. Основные причины бросить это занятие - быстродействие выгрузки. Кроме того, необходимо было перенести не только справочники и документы, но много "Мусора" типа пачек ПФР, налоговой отчетности, регистров сведений с настройками и т.п.
Следующая идея оказалась более продуктивной. С рабочей базы были сняты 3 копии, и в каждой из них начался процесс "выпиливания" 2-х лишних в этой базе юридических лиц. Опять - таки "сейчас сделаем" с использованием функции НайтиПоСсылкам() тоже вело в тупик. Во первых, искать надо рекурсивно, во - вторых, не все найденное можно удалять сразу, не разбираясь, в - третьих, не всегда можно дождаться результатов. В результате экспериментов была найдена следующая методика удаления данных по организации:
- Разбираемся (руками!) с планами обмена. Предварительно надо довести все обмены до состояния, что все данные приняты и выгружены.
- Тестирование и исправление базы - обязательный этап. Обязательно с параметром при наличии ссылок на несуществующие объекты - создавать ссылки. "Битые" ссылки, которые непременно есть в базе - не дадут удалить что - ни будь в режиме контроля ссылочной целостности. На пропуске этого этапа мне "удалось" потерять пару лишних дней - берегитесь!
- Выгружаем в файловый режим, если возможно. Мне это удалось - ускорение всех последующих манипуляций как минимум в полтора раза.
- Перепроводим базу, сверяем с первоисточником. При наличии "косяков" показываем их бухгалтеру, и как минимум, заручаемся его поддержкой. Этот пункт по желанию.
- Удаляем даты запрета изменения данных. Тоже можно "наступить". Внимательно смотрим, чтобы у текущего пользователя были полные права на удаление объектов - проще всего проверить, открыв стандартную обработку "Удаление помеченных объектов" .
- Запускаем обработку "ОчисткаРегистровОтБитыхСсылок". Код подсмотрен здесь - http://kb.mista.ru/article.php?id=21, я просто засунул данный код в управляемую форму. Смысл проводимой процедуры - при работе стандартных процедур обмена, в регистрах, отвечающих за учет НДС со временем накапливаются записи, регистратор которых - счет фактура, уже удалена, а одно из измерений либо реквизитов = организация. Тестирование ИБ в конфигураторе с параметром при наличии ссылок на несуществующие объекты - создавать ссылки помогает не всегда. В моем случае таких записей было около 10 в 7 регистрах. Пока они есть - удалить организацию не получится.
- Запускаем обработку "ПоискИУдаление". Выбираем организацию которая удаляется (Организация удаляем) и которая остается (Организация оставляем). Нажимаем кнопку "Заменить договор". В результате в поле основной договор каждого контрагента прописывается договор Организации оставляем (если такая есть), или в договоре меняется организация (если такой нет). Конечно, это не совсем правильно с точки зрения документооборота, однако в данном конкретном случае необходимо было сохранить хоть один договор по каждому контрагенту. Чистка справочника Контрагенты в рамки поставленной задачи не входила.
- Нажимаем кнопку "Найти и удалить по организации". Данная процедура обходит по метаданым все справочники, документы, и независимые регистры сведений, где есть ссылки на справочник Организации, а затем помечает объекты на удаление а записи - удаляет. Поиск не учитывает табличных частей, соответственно - выполняется быстро. При пометке удаления пришлось "Обмануть" примерно таким образом:
- поскольку проверки бизнес - логики не давали пометить на удаление часть объектов без предварительного удаления подчиненных. Это в первую очередь такие устойчивые консолидации документов, как ведомость по выплате зарплаты и РКО, пачки ПФР, счет - фактуры и корректировочные фактуры, документы комиссионеров и т.п.
- Если необходимо удалить несколько организаций, повторяем шаги с " Запускаем обработку "ПоискИУдаление" для каждой следующей.
- Нажимаем кнопку "Открыть удаление объектов" и попадаем в стандартную обработку "Удаление помеченных объектов". Автоматическое удаление всех отмеченных - удалить. Ждем. В моем случае это самая длительная операция, на win 7 x64 - i5 3.1 Ghz - SSD Intel - 8 Gb RAM удаление около 35 тыс. объектов занимает около 3 часов.
- Следующее действие - Поиск по ссылкам. Выполняется из обработки " ПоискИУдаление" кнопка поиск по ссылкам. Результат - дерево связей объектов на закладке. Поиск рекурсивный, с использованием функции НайтиПоСсылкам ( МассивСсылок ), но поскольку к данному моменту ссылок в базе осталось не так много, поиск происходит быстро. Часть флажков при необходимости снимаем, т.е. разбираемся вручную. Потом нажимаем кнопку "Удаление по ссылкам", ждем. Последовательность, описанную в данном абзаце, повторяем по каждой удаляемой организации.
- Снова н ажимаем кнопку "Открыть удаление объектов" на нашей обработке и попадаем в стандартную обработку "Удаление помеченных объектов". Автоматическое удаление всех отмеченных - удалить. Ждем. На этот раз не долго. Руками разбираемся с не удаленными объектами - у меня это было несколько ГТД, пара фактур, с десяток пачек ПФР перенесенных еще из БП 2.0.
- Удаление успешно завершилось, переходим к следующему этапу - перепроведение документов, сверка с "непиленой" базой, поиск ошибок. У меня все кончилось благополучно, т.к. до "Распила" база регулярно перепроводилась, и почти все операции отражались документами в соответствии с рекомендациями ИТС.
- Конфигуратор - Тестирование исправление - ставим галку "Сжатие таблиц информационной базы". Ждем, когда все ранее удаленные записи физически удалятся.
- Всё!
P.S. Описанная методика не претендует на оригинальность, и не является единственно возможной. Возможно она будет кому - то полезной, сейчас как раз "сенокосная пора". Буду рад конструктивной критике - 1С.8 не занимался почти 2 года, что - то забыл - остальное устарело.
Перед любыми экспериментами необходимо создать резервную копию, и обязательно убедиться в ее работоспособности!
Данная обработка позволяет удалить организацию и все связанные с ней данные – документы, элементы справочников, записи регистров сведений. Обработка полезна для выделения организации в отдельную базу. Доработано для ЗУП 3.1, УТ 11.4, возможно других
Данная обработка позволяет удалить организацию и все связанные с ней данные – документы, элементы справочников, записи регистров сведений. Возможно удаление данных по нескольким организациям. Обработка не удаляет данные из базы непосредственно, а лишь помечает данные удаляемой организации на удаление. После этого необходимо воспользоваться стандартной процедурой удаления помеченных объектов для проверки корректности и удаления данных.
Доступны 3 режима удаления данных организаций:
- По выбранной организации
- По всем организациям, кроме выбранной
- По всем организациям, помеченным на удаление в справочнике Организации.
Эта обработка полезна в случае, если вы вели несколько организаций в одной базе, но решили выделить одну из организаций в отдельную базу или создать отдельную базу на каждую организацию.
Как выделить организацию в отдельную базу.
- Создаёте копию информационной базы
- Отключите дату запрета редактирования,если она установлена
- В копии базы запускаете эту обработку, выбираете организацию и жмёте кнопку «Удалить все организации кроме выбранной»
- Удаляете помеченные объекты и получаете базу с одной организацией.
- В оригинальной базе опять выбираем эту организацию и используем команду этой обработки «Удалить выбранную организацию».
- После удаления помеченных объектов в оригинальной базе, данные организации будут присутствовать только в отдельной базе.
Обработка находит и помечает на удаление 99% всех данных, связанных с организацией. Но всё же остаётся 1% данных, которые лишь косвенно связанны с организацией, но тем не менее мешаю удалению организации. Возможно, некорректные данные. Все эти данные легко находятся и подчищаются стандартной функцией удаления помеченных объектов.
Перед запуском обработки следует отключить дату запрета редактирования.
Обработка не привязана жёстко к определенной конфигурации и может работать с любой конфигурацией. Если у вас возникла проблема с использованием данной обработки или вопрос, напишите мне и я оперативно отвечу, адаптирую обработку к вашей базе, исправлю ошибки.
Основательно переработал и оптимизировал алгоритм поиска взаимосвязанных ссылок, препятствующих удалению организации.
Добавил анализ планов обмена.
Исправлены выявленные ошибки.
Добавлена возможность помечать на удаление связанных документов
Я тестировал обработку на конфигурации Бухгалтерия предприятия 3.0.85.28, 3.0.71.77, ЗУП 3.1.16.77, УТ 11.4.2.126
Если у вас база типовая или доработанная, но без добавления новых регистров сведений, документов и справочников, можно воспользоваться планом обмена по РИБ.
Разделение методом РИБ
1) Все происходит штатными средствами, не нужно никаких дополнительных обработок;
2) Даже если у вас были свои документы, которые делали проводки, то оборотно-сальдовая ведомость сойдется 100%, но при этом документов может и не быть ;
3) Справочник ОС переносится только по нужным организациям.
1) Если Вы ожидаете в результате, что получите идеальную базу только с нужными справочниками и документами,то увы:
1.1) может попадаться в самых неожиданных местах, например в справочнике ОС код ОКОФ;
1.2) Переносятся почти вся справочная информация, часто излишняя, я ожидал, что будет только используемые справочники, но это не так;
1.3) Работу с файлами и сами вложенные файлы надо проверять отдельно;
1.4) После разделения базы не забудьте отвязать от РИБ.
Администрирование -> Синхронизация данных-> Настройки синхронизации данных и далее "Настроить синхронизацию данных" и там выбрать Распределенная информационная база с фильтром по организации.
Разделение методом удаления организаций
Я рекомендую всё же просто скопировать базы и в них по удалять ненужные организации моей обработкой.
При этом для удаления стандартными средствами через поиск ссылок- это не реально долгий процесс для более менее больших баз, поэтому я выбрал логику попроще:
1) Отбираем все документы, которые имеют реквизит "Организация" и 1 шагом устанавливаем пометку на удаление, 2 Удаляем документы непосредственно без контроля ссылочной целостности;
2) Отбираем все справочники, которые имеют реквизит "Организация" и удаляем непосредственно без контроля ссылочной целостности;
3) Удаляем организации без контроля ссылочной целостности - на этом этапе приходится удалять все даты запрета изменения данных, иначе Организацию удалить не получается, ругается на регистр сведений "Страховые взносы".
Обработка позволяет сделать отбор по видам документов.
Тестировалось на Аренда и управление недвижимостью для "1С:Бухгалтерия 8", редакция 3.0 (3.0.52.39/3.3.3.96) и
Зарплата и управление персоналом, редакция 3.1 (3.1.3.253) Платформа: 1С:Предприятие 8.3 (8.3.10.2580).
Есть база с 5-ью организациями.
Задача - создать отдельную базу с данными исключительно одной из тех 5-ти организаций.
Пока пробовал только обработки от КД.
(8) ведущий секции "Мобильный мир" - не вижу связи с текущим разделом и раздачей "советов" здесь - соответственно и в принципе.
Негатив при себе не учили в детстве держать?)))))))))))
закрывай тему, ДенисЧ - если наделили таковыми мощами, конечно.
почти всем - спасибо))))))))
(24)Он наверное оптимистично думает что в КД очень просто везде поставить фильтры по организации. Оптимист.
(24) Понятия не имею. Для меня вообще странно когда "доброхоты" не пробовавшие есть суп правой рукой через левое ухо, лезут потными ручонками "рулить" чем-либо.
(29)Но все таки.Одна кнопка и на справочники и на доки и на регистры накладывает условие?. Сударь, вы читали любой фильтр в менеджере планаобмена При отправке подчиненному?
Для БП 2.0 была готовая обработка с использованием плана обмена по организации, в 3.0 наверное аналогично
"вы читали любой фильтр в менеджере планаобмена"
Я не говорил, что задача автора решается одной кнопкой.
А вот отбор по реквизиту(например, Организация) ставится одной кнопкой для всех метаданных, где он присутствует.
(44) если пойдешь таким путем, выключи итоги, удаляться будет гораздо быстрее. За 1,5 суток может вполне удалиться. Только не пометкой на удаления конечно.
(0) уменя есть обработка по полному удалению организации из БД. Удаляем остальные 4 и оставляем одну. Как вариант ИМХО.
(57) Зря тут отписался про отправку - на инфостарте за "скачать" твою поделку 2$m требуют. Дорж тебя удавит если увидит
(43) Я говорю, какая хрен разница, 90% лишних, 99, 2 или сколько? Как это меняет ситуацию и как это влияет на рекомендацию?
проделал щас через РИБ с отбором по организации.
вроде - на первый взгляд - все ок, уже даже отвзяал на радостях Приемник.
полез поглядеть РегОтчетность в полученной базе - а там пусто. 0_о
(65) Ты главное не вздумай делать традиционно. Только хардкор, только удаление аппендицита через гланды :))
Фиг знает - в плане обмена запрет автрегистрации выставлен для данных рег. отчетности. Итог - РИБ + выгрзагрxml.
Механизм РИБ — механизм распределенных информационных баз - это когда у вас есть главная база и подчиненная(ые). Главная база может быть только одна, подчиненных может быть много. Каждая подчиненная база может иметь свои подчиненные базы, для которых она будет главной.
Вот посмотрим на картинку из первой ссылки по запросу в Яндексе:
РИБ используется для обмена данными. Причем не только теми данными, с которыми работает пользователь, но и данными изменения конфигурации. То есть РИБ позволяет передавать изменения конфигурации. Но изменить конфигурацию можно только в главной базе!
Визуализируем:
У нас большая компания и много филиалов. Есть доработанная УНФ, которую мы гордо называем УБФ(Управление Большой Фирмой). Но мы решили, что хватит терпеть то, что все филиалы имеют доступ к документам всех филиалов и каждому филиалу решили сделать отдельную базу, которую синхронизировать с нашей основной базой для передачи данных. Что ж, можно. Сделали.
И внезапно мы решили изменить картинку, которая появляется при входе в базу, захотели поместить туда логотип нашей фирмы, а почему бы и нет?
Как запилить картинку во все базы всех филиалов? Ну при текущем варианте, что у всех филиалов отдельная база, только руками. Руками специалистов, которые умеют заходить в конфигуратор и знают что нужно там нажать.
А вот если бы мы сделали подчиненные базы для филиалов, то есть использовали РИБ, то и данными бы обменивались, как при обычной синхронизации, и картинка бы сама добавилась во все "базы-дочки". Однако, в конфигуратор зайти бы все-таки пришлось, но только чтобы нажать кнопочку "Обновить конфигурацию базы данных", вот картинка:
Как создать подчиненную базу, на пальцах:
я буду использовать Управление торговлей, редакция 11 (11.4.13.275), но способ, в целом, одинаковый во всех типовых конфигурациях.
1) Сначала проделаем шаги, как при настройке обычной синхронизации:
2) . поставим галочку, нажмем.
4) тут ознакомимся с описанием. Я выберу обычную настройку, но если бы мы следовали примеру выше, то нужно было бы выбрать "с фильтром" и там одним кликом выбрать нужный филиал.
6) Указываем префикс - он будет подставляться к номерам документов, чтобы можно было отличить документы дочки и основной базы.
7) в общем случае, тут ничего не надо нажимать, кроме "Записать и закрыть".
8) А вот теперь создаем нашу новую подчиненную базу:
9) указываем место, куда ее покладем.
10) Зайдем в нашу новую подчиненную базу и закончим настройки синхронизации(синхронизация уже создалась, так как использовали РИБ, но нужно указать каталог для обмена выбрав "Настройки подключения")
(обратите внимание на верхний левый угол окна программы, там название базы, он отличается от предыдущих, так как это "дочка")
Кстати, в новой базе все пользователи будут выключены, пароли сброшены, нужно включить руками:
В общем-то ВСЕ.
Подчиненная база создана!
Теперь, когда наши программисты что-нибудь улучшат, эти улучшения прилетят в подчиненные базы сами.
Вот что-то изменили в основной базе:
нам нужно перенести изменения в базы-дочки.
Для этого запускаем главную базу в режиме 1С:Предприятие, то есть в пользовательском интерфейсе, заходим в настройки синхронизации, жмем выделенную кнопку:
После того, как синхронизация закончится, заходим в базу дочку и так же жмем "Синхронизировать", база загрузит данные и напишет:
После нажатия на Далее база закроется и начнет устанавливать обновления.
Когда обновы установятся, база начнет запускаться и сообщит нам следующее:
Это означает, что не обновлена конфигурация базы данных. Та самая маленькая кнопка в конфигураторе и это именно та причина, почему придется ОДИН раз зайти в конфигуратор. Что ж, зайдем в конфигуратор базы-дочки и нажмем эту кнопку, заодно вообще посмотрим что-да-как там, мы ж там еще не были.
Откроем конфигурацию и вот что увидим
Нажмем на "Обновить конфигурацию базы данных".
Увидим список изменений, которые прилетели с обновлениями:
И вот эти обновления появились в подчиненной базе.
Теперь необходимо запустить базу в пользовательском режиме, чтобы выполнились обработчики обновления.
Несколько правил:
1) Все узлы, кроме одного, должны иметь по одному главному узлу и один узел не будет иметь главного узла - это корневой узел.
2) Конфигурация может быть изменена только в узле, не имеющем главного узла (то есть в корневом).
3) Изменения конфигурации будут передаваться от главного к подчиненным узлам.
4) Разрешение коллизий так же будет производиться исходя из отношений "главный - подчиненный" - если изменения сделаны одновременно и в главном и в подчиненном узлах, то приняты будут изменения главного узла.
5) Сделать подчиненный узел в распределенной базе можно разными способами, но создание начального образа является рекомендуемым.
А теперь то, ради чего все писалось.
Как подчиненную базу сделать обычной(нормальной, отдельной, как хотите).
Я опишу только тот способ, которым пользуюсь. Это моя шпаргалка. Но он не единственный.
1) Заходим в свойства ярлыка запуска окна 1С:Предприятие:
2) В поле "Объект" дописываем:
DESIGNER /F"Путь до базы" /N"Имя Пользователя в базе" /P"Пароль пользователя" /ResetMasterNode
В итоге у меня получится:
"C:\Program Files\1cv8\common\1cestart.exe" DESIGNER /F"C:\Users\79119\Desktop\РИБ" /N"" /P"" /ResetMasterNode
Читайте также: