Итак, сегодня разговор пойдет о том, как программно зарегистрировать новую базу данных в списке баз 1С 8.х, а также как зарегистрировать уже существующую базу данных в том же списке.
О том зачем это нужно, я скажу коротко: чтобы автоматизировать этот процесс. А уж как применять эту автоматизацию, где и главное зачем, объяснять не буду, ибо получится это довольно долгое и пространное объяснение, а моя цель в этой статье объяснить именно сам метод. Да и если вы читаете эту статью, то значит у вас, скорее всего, уже есть ответ на этот вопрос.
Так вот, если мы хотим добавить программно новую базу данных, то для этого существует специальный параметр запуска createinfobase
Пример командной строки:
ПолныйПутьДо1С\1cv8.exe createinfobase File=C:\newBase\ /AddInList NewDB |
где
File - это путь к новой базе. Каталога может не существовать, программа создаст его сама. Если каталог существовал раньше, то он должен быть пустым, иначе база не создастся. Также хочу заметить, что у вас могут возникнуть проблемы с запуском 1С с указанием в качестве путей каталогов с пробелами, поэтому лучше не искушать судьбу и придумывать названия каталогов попроще. Впрочем, такие проблемы у меня были, когда я пытался запускать 1С с параметрами из командной строки. Когда это делалось программно из самой 1С, то все работало без проблем с любыми каталогами.
/AddinList - ключ, который сообщает системе имя, под которым зарегистрируется база данных в 1С, т.е. то, что вы будете видеть в списке БД 1С при запуске. В данном случае имя у нас NewDB
Код регистрации новой БД в 1С будет выглядить примерно следующим образом:
ПолныйПутьДо1С = "C:\Program Files\1cv81\bin\"; СтрокаЗапуска = ПолныйПутьДо1С + "1cv8.exe createinfobase File=C:\newBase\ /AddInList NewDB"; ЗапуститьПриложение(СтрокаЗапуска); |
В общем-то, все достаточно просто. Проблема возникает тогда, когда нужно зарегистрировать уже существующую базу данных. Т.е. вы с ней давно уже работаете, а в списке баз 1С упоминания об этой базе нет. Если идти по предложенному выше сценарию, то мы упираемся в то, что все данные в каталоге д.б. удалены перед созданием новой базы. Понятное дело, что удалять свою базу мы не хотим, а не будем удалять старую, новая не зарегистрируется.
Тогда приходит на ум второй вариант:
1С 8-ой серии (я называю именно серия, т.к. версию ИМХО нужно называть конкретно 8.0 или 8.1 или 8.2), в отличие от версии 7.7 хранит список зарегистрированных баз в файле. Подробнее об этом можно прочитать здесь Так вот, почему бы не отредактировать этот файл, содержащий списки БД вручную, и не добавить туда информацию о нашей новой базе самостоятельно. Давайте посмотрим на структуру этого файла:
[OldDB] Connect=File="F:\1C\1Cv8\OldDB"; ID=1cd97bfa-4e57-4a23-9ee1-073a0a28e01c OrderInList=16384 Folder=/ OrderInTree=16384 [Enterprise] Connect=File="F:\1C\1Cv8\1cv8.db\Enterprise"; ID=647840fa-65e0-44e8-ad40-12476f178b92 OrderInList=20480 Folder=/ OrderInTree=32768 |
Здесь мы видим описание двух баз OldDB и Enterprise. Главными параметрами являются первые две строчки описания каждой из этих баз. Это Connect и ID. Если с Connect все более менее понятно - это путь до нашей базы данных, то вот с ID загвоздка. Система генерирует его автоматически, по каким критериям - непонятно. Факт, что без него система ни в какую не будет показывать в списке ссылку на нашу базу данных, и даже если попытаться имитировать этот номер, результат будет тот же.
После недолгих раздумий пришло в голову объединить два этих варианта в один. Т.е. мы сначала создаем новую заведомо ненужную, пустую базу данных с названием ЗаготовкаБазыДанных и каталогом, что-то вроде c:\temp\tempBD. Ждем пока 1С зарегистрирует ее, а дальше лезем в список БД, находим там секцию с названием [ЗаготовкаБазыДанных], и меняем название базы данных на нужное нам, а также путь в параметре Connect. ID система поставила уже сама ;) Все!
Вот как примерно это может выглядеть в коде 1С:
ПолныйПутьДо1С = "C:\Program Files\1cv81\bin\"; СтрокаЗапуска = ПолныйПутьДо1С + "1cv8.exe createinfobase File=C:\tempBD\ /AddInList ЗаготовкаБазыДанных"; ЗапуститьПриложение(СтрокаЗапуска); Предупреждение("Идет создание временной базы. Подождите пожалуйста", 10);// дадим 10 секунд 1С, чтобы список БД успел записаться СписокБаз = Новый ЧтениеТекста; НовыйСписокБаз = Новый ТекстовыйДокумент; СписокБаз.Открыть(ПутьКСпискуБаз); Стр = СписокБаз.ПрочитатьСтроку(); номерстроки = 1; Пока Стр <> Неопределено Цикл // строки читаются до символа перевода строки Если Найти(Стр, "[ЗаготовкаБазыДанных]")>0 Тогда Стр="[NewDB]"; КонецЕсли; Если Найти(Стр, "c:\TempBD\")> 0 Тогда Стр="Connect=File=""C:\newBase\"";"; КонецЕсли; НовыйСписокБаз.ДобавитьСтроку(Стр); Стр = СписокБаз.ПрочитатьСтроку(); номерстроки = номерстроки + 1; КонецЦикла; НовыйСписокБаз.Записать(ПутьКСпискуБаз,КодировкаТекста.UTF8); |
Работает метод достаточно уверенно, но я хочу дать совет, если уж вы создали ссылку в списке баз данных 1С на свою базу, не поленитесь и скопируйте ID код в ту базу данных, из которой вы планируете в будущем выполнять манипуляции с программным запуском 1С, чтобы в следующий раз не создавать пустых баз, а сразу указывать правильный ID.
На сегодня все! :)
Комментариев нет:
Отправить комментарий