Смекни!
smekni.com

Маленькие хитрости (стр. 1 из 2)

Владимир Козлов

Введение

Очень часто в различных электронных конференциях по программам семейства "1С:Предприятие" попадаются вопросы, связанные с администрированием баз данных. Желание поделиться опытом, накопленным почти за три года работы и обкатанными приемами в данной области с одной стороны и природная лень - с другой (в смысле надоело раз от разу отвечать на одни и те же вопросы) и вызвало желание как-то систематизировать все это в одном - общедоступном месте. Все нижеизложенное касается программ сетевой файл-серверной версии 7.5 (на 7.7 и SQL я только вот-вот перейду), т.ч. в случае использования более старших версий (как и SQL версий) возможно потребуется некая адаптация кода : Кроме этого подразумевается, что читатель хотя бы поверхностно знаком с компьютерной техникой, сетями, c основами MS Windows и основами работы с программой "1С:Предприятие". Приводимый в прилагаемых конфигурациях код не "привязан" к какой-то отдельной компоненте программы (Оперативный учет, Бухгалтерия, Расчет), а потому может быть использован в любых конфигурациях.

Общие сведения (v.7.5)

Итак, вы распаковали увесистую желто-красную коробочку с логотипом 1С :, что же дальше? Как и какую вязать сеть, что для этого нужно и прочие технические вопросы мы здесь рассматривать не будем - это отдельная тема - предположим, что сеть уже есть : Также не будем останавливаться на процедуре инсталляции программы 1С, как правило здесь вопросов не возникает. Единственное, что хочется отметить - я бы не советовал производить "административную" установку программы (сугубо личное мнение, наверняка у меня тут же найдутся оппоненты). Проще установить программу локально каждому клиенту - мне кажется, что такой режим более "человечен" по отношению к сетевому трафику. Хочу сразу же предостеречь - для работы в сети каталог базы данных лучше разместить на специально отведенном для этих целей компьютере - сервере. По возможности не следует нагружать его еще чем-либо (типа MS Office), т.е. сделать "выделенным", также следует помнить, что тактико-технические характеристики данного аппарата напрямую влияют на комфортность вашей работы, поэтому жаться здесь не стоит. Что выбрать в качестве операционной системы для вашего сетевого файл-сервера базы данных? Однозначный ответ - ни в коем случае не Microsoft Windows 9X ! Дело в том, что у этих операционных систем существует ограничение на число одновременно открываемых файлов (1К: 1024) - в результате с таким "сервером" в сети смогут работать лишь несколько пользователей (конкретное количество зависит от числа файлов в конфигурации вашей базы). Лично я предпочитаю пользоваться системой Microsoft NT 4.0. Если вы уверены, что число клиентов вашей сети не превысит 10, то можно установить на сервер NT Workstation (большее число соединений ей просто не поддерживается), в противном случае не обойтись без NT Server. В качестве альтернативы для серверной системы можно использовать и Nowell Netware, но я с ней к сожалению (или быть может к счастью) не знаком, поэтому ничего посоветовать не могу : Также уже начали появляться первые восторженные отзывы об использовании долгожданной Windows 2000 (NT 5) в связке с 1С, но мне кажется не стоит торопить события, 17 февраля уже не за горами, поживем - увидим.

Для начала приведу ключи запуска программы из командной строки (как не странно, много раз с удивлением убеждался, что не всем они известны) :

1cv7.exe MODE [ /M | /D<Path> | /U<Path> | /N<Name> | /P<Pass> ],

где MODE - режим запуска, может принимать только одно из трех значений :

config - режим конфигуратора;

debug - режим отладчика;

enterprise - нормальный (рабочий) режим.

следующие ключи опциональны :

/M - запуск программы в монопольном режиме;

/D - каталог базы данных;

/U - рабочий каталог пользователя (каталог из списка пользователей игнорируется);

/N - имя пользователя;

/P - пароль пользователя;

Например при выполнении такой команды : 1cv7 enterprise /DD:&bsol;Dbase /NИванов /P123,

произойдет запуск программы без вывода диалогов о выборе базы и режима работы, а также без запроса имени и пароля пользователя.

Также хочу здесь остановиться еще на одном нюансе. В режиме кофигуратора в пункте меню "Файл" есть две команды : "Выгрузить данные" и "Загрузить данные" (не путать с командами "Сохранить/Восстановить" - это просто архивирование). Исходно они предназначены для переноса информационных баз между файл-серверной и клиент-серверной (SQL) версиями. Но у них есть одна приятная особеннось - в процессе выгрузки - загрузки производится верификация корректности исходных данных на уровне информационных объектов (т.е. констант, справочников, документов и пр.). Поэтому если в базе содержатся ошибки, появившиеся в процессе работы из-за сбоев оборудования или программы, при выполнении данной процедуры база с большой долей вероятности будет корректно восстановлена. Так что в процессе работы полезно периодически производить сие действие для уверенности в корректности данных (хотя данная процедура занимает порядка нескольких десятков минут - в зависимости от железа и объемов базы) - я обязательно выполняю ее раз в месяц. Кроме этого желательно почаще переиндексировать базу (особенно если есть документы, проведенные "задним числом") - напрочь сносим *.CDX и открываем базу в монопольном режиме, у меня это делается автоматически каждую ночь.

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

@ECHO OFF

NET TIME &bsol;Server /SET /Y

(здесь Server - сетевое имя сервера базы)

Подальше положишь - поближе возьмешь :

Регулярно выполнять резервное архивирование нужно обязательно, чтобы не было потом обидно за безвозвратно утерянные данные. Чем это делать - это вопрос скорее вкуса. Существует например специально "заточенная" под 1С программа "Хранитель" от ростовской фирмы "Гендальф" http://www.gendalf.ru/, которая умеет делать массу полезных вещей, но мне она кажется слишком перегруженной для таких простых целей, я пользуюсь старым добрым RAR'ом. Архивировать следует только файлы базы *.dbf и сами метаданные (1cv7.dd/md), ну еще LOG-файл и ваши оригинальные файлы (если они есть). Сначала приведу содержимое нескольких командных файлов (расширение *.cmd работает только под Win NT, если используется Win'9X, то расширение должно быть *.bat):

ARCH.CMD

REM используемые каталоги (должны существовать)

REM D:&bsol;1C&bsol;DB - рабочая база

REM C:&bsol;Temp&bsol;DB - временная копия базы

REM C:&bsol;BACKUP - архив базы

REM &bsol;Adm&bsol;Storage - резервный архив базы (на другом компьютере сети)

@echo off

; чистим временный каталог

Del С:&bsol;Temp&bsol;DB&bsol;*.*

; копируем в него архивируемые файлы рабочей базы (*.md, *.dd, *.log, *dbf)

Copy D:&bsol;1С&bsol;DB&bsol;1cv7* С:&bsol;Temp&bsol;DB

Copy D:&bsol;1C&bsol;DB&bsol;*.dbf C:&bsol;Temp&bsol;DB

; сохраняем предыдущую версию архива под новым именем

copy C:&bsol;BACKUP&bsol;db.rar C:&bsol;BACKUP&bsol;db0.rar

; создаем новый архив

rar.exe u - r - m1 - dh - std C:&bsol;BACKUP&bsol;db.rar С:&bsol;Temp&bsol;DB&bsol;*.*

if errorlevel 0 goto rpl

echo P_A_C_K_I_N_G___E_R_R_O_R__!

goto end

:rpl

; сохраняем копию архива в надежном месте

net use Z: &bsol;Adm&bsol;Storage

copy C:&bsol;BACKUP&bsol;*.rar Z:

net use Z: /delete

:end

Выполнять сию процедуру можно не прерывая производственного процесса (никого из базы выгонять не надо), именно для этого мы архивируем не саму базу, а ее временную копию.

На этом все, осталось всего навсего запустить системную службу Sсhedule: Explorer-ControlPanel-Services-Schedule-Startup-Automatic (поддерживается только под Win NT, для Win'9X нужны специальные внешние утилиты) и набрать из командной строки что-нибудь аналогичное :

At 13:00 /Every:M, T, W, Th, F C:&bsol;COMMAND&bsol;arch.cmd

At 18:00 /Every:M, T, W, Th, F C:&bsol;COMMAND&bsol;arch.cmd

At 07:00 /Every:M, T, W, Th, F C:&bsol;COMMAND&bsol;shutdown /l /r /y /c

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

Теперь о третьей строке в команде AT - в плане автоматизиции рутинных действий я пошел еще дальше, как я уже упоминал у меня каждую ночь производится реиндексация базы, для этого используется такой командный файл :

REINDEX.CMD

@echo off

; каталог базы

set db=D:&bsol;1С&bsol;DB

; каталог программы

set pr="C:&bsol;Program Files&bsol;1cv75&bsol;bin&bsol;1cv7"

; принудительно сносим индексы

del %db%&bsol;*.cdx /Q

; запускаем программу монопольно под "фиктивным" пользователем

%pr% enterprise /D%db% /M /NЧистяков /Pstart

Этот командный файл вставляется в папку автозагрузки на сервере, утилита SHUTDOWN.EXE (из Windows NT Resource Kit - это набор дополнительных сервисных утилит) производит перезагрузку сервера, для того чтобы по загрузке не нажимать магическую комбинацию из трех пальцев (Ctrl-Alt-Del) и не вводить пароль, а загрузить сервер автоматически, нужно подправить системный реестр NT (запустить из командной строки regedit.exe) :

[HKEY_LOCAL_MACHINE&bsol;SOFTWARE&bsol;Microsoft&bsol;Windows NT&bsol;CurrentVersion&bsol;Winlogon]

"DefaultUserName"="YourProfileName"

"DefaultDomainName"="Comp"

"AutoAdminLogon"="1"

"DefaultPassword"="YourPass"

где YourProfileName - имя профиля администратора на сервере (по умолчанию Administrator), Comp - сетевое имя сервера, YourPass - пароль аминистратора на сервере (обязательно должен быть не пустым).

Итак подъитожим - в заданное нами время происходит автоматическая перезагрузка сервера с переиндексацией базы, для того чтобы программа по окончании переиндексации сама завершилась необходимо в глобальном модуле конфигурации предусмотреть некие нестандартные действия по обработке входа в программу исскуственного "фиктивного" пользователя (Чистяков - без пароля) - они приведены в демонстрационной конфигурации (архив Adm.rar).

В принципе никто не запрещает пойти еще дальше - и наряду с переиндексацией базы по ночам выполнять любые желаемые действия, например групповое перепроведение документов для восстановления границы последовательности или формирование "тяжеловесных" отчетов, с последующим сохранением их результатов в *.mxl файлах, рассылки прайсов по факсу или e-mail'у и т.д. Все ограничивается только вашей фантазией.