Уборка мусора в DBF-файлах
Идеология использования DBF/CDX-файлов построена таким образом, что при удалении объекта базы производится только пометка объекта как удаленного, физически же запись об этом объекте остается в базе в качестве "мусора". Если не предпринимать никаких специальных мер, то этот мусор копится, база пухнет, драгоценный сетевой трафик забивается зря. В принципе "уборку мусора" можно производить в конфигураторе через выгрузку-загрузку данных, но это не очень удобно, поскольку, как я уже упоминал выше, выполнение данной процедуры может требовать значительных временных затрат: Альтернативный путь - использовать для этих целей внешние утилиты, предназначенные для работы с DBF/CDX-файлами (например утилитка DBU.EXE из Clipper'а) тоже не очень хорош, т.к. обычно они не умеют работать с маской файлов (*.dbf), а "подсовывать" им по одному файлу из сотни - удовольствие ниже среднего.
В тоже время встроенный язык программ "1С:Предприятия" поддерживает соответствующий DBF-примитив (метод объекта Xbase Сжать()), поэтому я в свое время и написал на 1С небольшую конфигурацию, предназначенную исключительно для этих целей и пользуюсь ей регулярно до сих пор (раз в неделю). Кроме "чистки" базы в ней также попутно предусмотрена возможность использования стандартного внешнего архиватора WinZip/WinRAR для архивирования базы, собственно сама конфигурация в архиве Cleaner.rar, небольшое описание приведено в этом же архиве в файле Read.me.
Есть кто живой ?
Как известно, в состав сетевых версий программы 1С:Предприятие входит встроенная утилитка - монитор пользователей (пункт главного меню программы "Помощь", далее пункт меню "О программе" и кнопка "Монитор"), назначение ее очевидно - отображать кто в данный момент находится в системе, причем реализована она как внешнее приложение (..\1cv75\bin\usrmon.exe). В свое время, на ранних релизах версии 7.5 я столкнулся с крайне неудовлетворительной работой данной утилиты - либо безумно долго запускалась, либо вообще убивала систему. Но ведь вещь то нужная и я решил построить что-то аналогичное средствами 1С.
Идея проста - я завел новый справочник "Сеансы", у которого текстовое поле код - это имя пользователя, а наименование - текстовое представление времени входа в систему.
Далее, при входе каждого нового пользователя в программу создается новый элемент данного справочника, при выходе - соответстветствующий элемент уничтожается. Теперь для того чтобы узнать кто работает в программе, нам достаточно просто выбрать все элементы данного справочника и отобразить их в удобном виде. Подробный код, реализующий данный механизм можно найти во все той же демонстрационной конфигурациии - adm.rar.
Опять же, при таком подходе можно пойти дальше - добавить дополнительные поля в данный справочник и хранить в них все что заблагорассудится. К примеру, год назад у меня были проблемы с сетью, почти ежедневно кто-то из пользователей аварийно отваливался, нужно было как-то автоматически отслеживать кто именно. Я добавил к данному справочнику поле, в которое один раз в 15 минут для каждого пользователя записывалось текущее время (делалось это в глобальном модуле через процедуру ОбработкаОжидания(), т.е. если пользователь умирал, то запись соответственно не производилась). Перед каждой записью из элемента справочника считывалось предыдущее значение времени и если разница между ним и текущим значением времени превышала 18 минут (15 мин. + некий запас), то констатировался факт "смерти" пользователя с сохранением некролога в LOG файл. Это в свое время помогло съэкономить мне массу сил и нервов - не пришлось допрашивать с пристрастием бедных пользователей "А корректно ли вы сегодня закончили работу ?" и сверять результаты допроса с содержимым LOG-файла - подсчитывать для каждого пользователя число входов/выходов в/из систему/системы:
Как поняли, прием :
Часто бывает крайне полезно иметь под рукой средства интерактивного общения по сети, например, попросить всех "выйти вон" на 5 мин. для переиндексации базы, или пользователь просит меня открыть ему доступ для авансового резервирования товара (выписать счет на товар, который уже пришел, но еще не оприходован), в конце концов просто послать кого-нибудь куда подальше : Штатные средства, предназначенные для этих целей (WinPopUp и пр.) не всегда удобны - они должны быть установлены и запущены у всех клиентов - в общем морока.
Общеизвестно, что в типовых конфигурациях Торговли, по-моему начиная с Редакции 6, появился справочник "Блокнот", предназначенный именно для этих целей. Но моя реализация мне нравится больше, к тому же на момент ее написания - не только 6, но и Редакции 5 еще в помине не было. Ну а насколько я объективен - судить вам. Суть в следующем - есть справочник "Сообщения" со следующими полями : "Наименование" - адресат сообщения, "Запись" - собственно текст сообщения, "Прочитано" - флаг 1/0 (дошло до адресата или нет), "Кто" - отправитель сообщения и "ДВ" - дата и время отправки. Для каждого активного пользователя системы (опять же нам здесь пригодился справочник "Сеансы") каждые 30 секунд перебираются элементы справочника "Сообщения", в случае совпадения имени пользователя и значения поля "Адресат" и нулевого значения флага "Прочитано", выводится сообщение "Вам письмо!" и открывается соответствующая форма с текстом сообщения. По закрытии данной формы, что предполагает прочтение адресатом сообщения, флаг "Прочитано" автоматически устанавливается в 1. При выходе пользователя из системы все прочитанные им сообщения автоматически удаляются. Каждый "обычный" пользователь может послать сообщение только одному из пользователей, активных в данный момент. И только администратор (для себя любимого возможность) может послать сообщение для всех пользователей сразу. Такая организация кажется мне наиболее оптимальной исходя из соотношения сервисные возможности / загрузка трафика. Реализация приведена все в той же конфигурации - adm.rar.
Кому-то можно, кому-то нет :
Достаточно часто встречаются вопросы, а как производить авторизацию пользователей с одинаковым набором прав - скажем есть 5 менеджеров и желательно сделать так, чтобы доступ у каждого из них был только к своим документам. Это делается достаточно просто - при помощи предопределенных процедур глобального модуля ПриУдалении() и ПриОтменеПроведения(), все это совершенно очивидно из кода демонстрационной конфигурации adm.rar, поэтому задерживаться на этом не буду. Еще один момент - мне кажется довольно удобным, когда каждому пользователю соответствует свой цифровой префикс (точнее его часть) в нумерации документов (конечно же при условии, что пользователей не очень много). Механизм реализации этого можно посмотреть там же :
Ссылки на полезный софт (всякие всякости)
Поскольку все наши данные хранятся в формате DBF/CDX, очень часто бывает полезно, а порой и просто необходимо средство для просмотра / редактирования данных на уровне файлов. Таких утилит существует множество, единственный недостаток - не все из них умеют сами разбираться с перекодировкой ANSI-OEM (да еще и с кириллицей), в этом смысле самая на мой взгляд удобная - это DBFView от фирмы "Гендальф", скачать ее можно совершенно бесплатно здесь: http://www.gendalf.ru/DOWNLOAD/wDBFview.zip
Теперь остановимся подробнее на собственно средствах системного сетевого администрирования. Их сейчас появилось очень много, поэтому здесь я упомяну только те, с которыми я сам постоянно работаю и которые мне нравятся. Начну пожалуй со своей любимой программы Hyena от фирмы "Adkins Resource Inc." http://www.asdkins-resource.com/. Пожалуй проще перечислить чего она не умеет, чем наоборот : С ее помощью вы сможете получить полный доступ к локальным дискам клиентов, просматривать журналы событий на компьютерах сети, запускать и останавливать service'ы на клиентах, изменять их права, ну в общем почти все что может придти в голову. В общем настоятельно ее рекомендую. Да, стоит упомянуть, что как и положено, работает она только с Windows NT 4 / 2000, т.ч. любителям Windows 9X можно не беспокоиться. Достойны также пристального внимания продукты, предназначенные для целей сетевого администрирования фирмы "Aelita Software" http://aelita.net/. Их целый ряд, на мой взгляд наиболее полезны MultiReg - средство для удаленного редактирования системного реестра клиента, EventAdmin и Journal - база данных для накопления и последующего анализа системных журналов событий на клиентских машинах, ну и пожалуй еще ERDisk - утилита для создания копий загрузчиков и системных файлов сетевых клиентов (в случае "Blue Screen of Death" - это первое и, пожалуй единственное средство). Все эти продукты также поддерживают только Windows NT.
В последнее время появился целый ряд программ для полного удаленного доступа к сетевым компьютерам. Собственно Norton pcAnywere создан давно и достаточно хорошо известен, но он не является лучшим продуктом этого класса. Я экспериментировал с двумя аналогичными программами - это WinOp (отдельное большое спасибо BigHarry) фирмы "Danware A/S" http://www.danware.com/ и Remoute Administrator нашего соотечественника Дмитрия Зноско http://www.famatech.com/, функциональные возможности у них примерно одинаковые, но первая мне нравится больше, мне показалась, что она более разумно обходится с сетевым трафиком, т.ч. я работаю с ней. Что же она умеет, а почти все - поддерживает все сетевые протоколы от Microsoft, включая MSDN и модемный Dial-Up (чуствуете какие перспективы открываются для ленивых админов!). Программа состоит из двух компонент - host (устанавливается на клиентов) и guest (ставится на компьютер администратора). Причем клиентская часть под WinNT может устанавливаться как service в stealth-режиме, абсолютно прозрачно для клиента. При запуске guest'а и подключении к клиенту вы видите на своем мониторе его экран, ваши клава и мышь работают как клиентские, т.е. доступ действительно полный ! Более того, вы можете погасить экран клиента, заблокировать его клаву и мышь и даже удаленно перезагрузить его компьютер : Есть еще такие вещи как chat, файловый обмен и пр. В общем штука чрезвычайно полезная. Работает быстро и надежно (и кстати поддерживает Windows 9X/3.1). Единственное хочу предостеречь от злоупотреблений - трафик то не резиновый, т.е. пользоваться ей нужно только тогда, когда это действительно необходимо.
Итак подытожим - используя все эти средства у сисадмина появляются реальные возможности для проведения своего рабочего времени целиком у родного компьютера, беготня по клиентам канула в лету :
Ну и напоследок хочу привести несколько полезных ссылок на различные FAQ'и по Windows NT :
http://www.ntfaq.com/ - это классика, FAQ от John Savill (кстати там есть и локальный вариант, т.е. можно скачать файл (html/hlp/txt) и штудировать его в off-line), здесь можно найти ответы на абсолютно любые вопросы;
http://www.pvv.spb.ru/ - очень приятный и полезный для любого компьютерщика русский FAQ по Windows 9X/NT/2000 от Владислава Пестова, настоятельно рекомендую;
http://windowsnt.miningo.com/mlibrary.htm - это просто огромный каталог всего (ресурсы, публикации, ссылки на сайты и т.д.), что связано с WinNT.