Информационные системы
Архив выпусков рассылки

1С:Предприятие

Учебник
Рассылка
Курс лекций
Статьи
Программы
Ссылки

Информационные технологии

Инф. системы
Технология .Net
Модель города
Книги и статьи

ЭРА

Интересное

Психология
Философия
Фантастика
Помощь студенту
Гостевая книга
Ссылки

Форум

mista.ru / Рассылка / Выпуск 20
Волшебство программирования на 1С:Предприятие 7.7 и 8.0
Выпуск 20 / 25.12.2002

Здравствуйте. Сегодня мы рассмотрим очень актуальную проблему в мире 1С:Предприятие. Практически каждый разработчик когда-нибудь сталкивался с тем, что невозможно сохранить конфигурацию, когда в базе работает хотя бы один пользователь. При этом появляется сообщение "Ошибка блокировки метаданных. Возможно, метаданные используются другой задачей." Такое сообщение возникает даже при изменении одного символа в программном модуле конфигурации! Какая несправедливость!

Если с программой работает 3 или 5 человек, то это еще терпимо. Наверное, их работу можно прервать без особых последствий для предприятия. С другой стороны, если с программой работает 10, 20 или 30 пользователей, то прерывать работу предприятия крайне нежелательно. Это влечет за собой недовольство сотрудников, очереди из клиентов, а также может привести к прямым денежным потерям.

При плохо налаженном тестировании ошибки и недоработки в программе обнаруживаются довольно часто, причем большинство из них является довольно простыми, не связанными со структурой базы данных, например ошибка в условии в программном модуле или в ячейке отчета. Для исправления таких ошибок просто обидно прерывать работу всего предприятия. Пока фирма "1С" не осознает важность этой проблемы для средних и больших предприятий, она никогда не сможет захватить значительную долю этого рынка.

В данном выпуске я расскажу, как использовать штатные средства 1С для частичного решения этой проблемы. Очень часто незначительные ошибки встречаются в отчетах и обработках. В 1С заложена возможность использования внешних отчетов, хранящихся отдельно от конфигурации в ert-файлах. Такой отчет (обработка) может быть запущен из конфигурации с помощью команды ОткрытьФорму. При этом он будет выполняться в контексте конфигурации, т.е. ему будут доступны глобальные переменные, а так же любые объекты конфигурации: справочники, документы и т.д. При запуске внешнего отчета ему можно передать любые параметры. Используя механизм внешних отчетов можно организовать обновление конфигурации без прерывания работы пользователей. К сожалению, не все ошибки могут быть исправлены таким образом, но около 30% ошибок связано именно с отчетами и обработками.

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

Процедура ПриОткрытии()

ПутьВнешнегоОтчета = "";
ИмяФайлаВнешнегоОтчета = "";

РасположениеФайла(ПутьВнешнегоОтчета,ИмяФайлаВнешнегоОтчета);
Если ПустоеЗначение(ИмяФайлаВнешнегоОтчета)=1 Тогда //это внутренний отчет

ПутьВнешнегоОтчета = КаталогИБ() + "ExtForms\";
ИмяФайлаВнешнегоОтчета = "Отчет_ДоходыРасходы.ert"; //обратите внимание!
ПолныйПуть = ПутьВнешнегоОтчета + ИмяФайлаВнешнегоОтчета;
Если ФС.СуществуетФайл(ПолныйПуть)=1 Тогда

Конт = Форма.Параметр;
ОткрытьФорму("Отчет",Конт,ПолныйПуть);
СтатусВозврата(0); Возврат;

КонецЕсли;

КонецЕсли;

КонецПроцедуры

Теперь, если в отчете обнаруживается ошибка или требуется внести небольшие изменения в модуль, экранную форму или печатную форму отчета, то нужно сохранить отчет как внешний под определенным именем и он автоматически будет вызываться при запуске данного отчета. При этом никто ничего не заметит, все будут продолжать работать в обычном режиме. Именно то, что нам нужно! Такая временная заплатка вполне работоспособна до тех пор, пока не появится возможность обновить конфигурацию в штатном порядке, т.е. используя команду меню "Загрузить измененную конфигурацию" или "Объединение конфигураций". Например, поздно вечером или рано утром, а может быть в обед.

Во внешний отчет можно передать несколько параметров, используя объект "СписокЗначений", например,

сз = СоздатьОбъект("СписокЗначений");
сз.Установить("НачДата",ДатаНачала);
сз.Установить("КонДата",ДатаОкончания);
сз.Установить("Документ",ВыбДоговор);
сз.Установить("Валюта",Рубли);
сз.Установить("РежимОтчета",1);

ОткрытьФорму("Отчет",сз,ПолныйПуть);

в процедуре ПриОткрытии внешнего отчета параметры можно прочитать следующим образом:

Процедура ПриОткрытии()

Если ПустоеЗначение(Форма.Параметр)=0 Тогда
.......Если ТипЗначенияСтр(Форма.Параметр)="СписокЗначений" Тогда

сз = Форма.Параметр;
НачДата = сз.Получить("НачДата");
КонДата = сз.Получить("КонДата");
Документ = сз.Получить("Документ");
и т.д.

........КонецЕсли;
КонецЕсли;

КонецПроцедуры


Есть и другой подход, который поможет в некоторых случаях. Многие знают, что 1С имеет директиву "#ЗагрузитьИзФайла". К сожалению данной директивой невозможно хоть как-нибудь управлять, например, загружать модуль из файла по условию, так как эта директива должна располагаться в самом начале модуля, еще до объявления переменных. Чтобы организовать динамическое обновление конфигурации без прерывания работы пользователей, необходимо все программные модули хранить в текстовых файлах, что приведет к ужасным неудобствам в работе программиста. Данную директиву я рекомендую использовать на этапе опытной эксплуатации для критических модулей, в которых часто обнаруживаются ошибки и недоработки, а также для глобального модуля.

В следующем выпуске рассылки мы рассмотрим несколько вариантов, как ставить заплатки на модули в справочниках, документах и процедуры глобального модуля. Это позволит устранять 80% ошибок без прерывания работы пользователей, буквально "на лету". Если у вас есть какие-нибудь идеи, приглашаю поучаствовать в решении данной проблемы. Наиболее интересные решения будут опубликованы в следующем выпуске.

Официальный сайт рассылки www.mista.ru
Архив выпусков рассылки находится здесь
http://www.mista.ru/subscribe

Учебник по 1С - http://www.mista.ru/tutor_1c
Курс лекций по 1С - http://www.mista.ru/kurs1c
Статьи про 1С - http://www.mista.ru/articles1c

С уважением,
Волшебник Станислав

stasmit@mail.ru


<< Предыдущий выпуск | Список выпусков | Следующий выпуск >>
 

© Станислав Митичкин
www.mista.ru
, 1997-2003
1C:TOP-100
Волшебный форум