Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Волшебство программирования на 1С:Предприятие 7.7 Выпуск 20


Информационный Канал Subscribe.Ru

Налоговые рассылки на Subscribe.Ru
Как не платить лишние налоги?
Уважаемые подписчики, представляем Вашему вниманию рассылку "Как не платить лишние налоги?". Ее авторы, налоговые юристы компании "ТаксХелп", в ситуационной форме рассказывают, как разрешить тот или иной конфликт налоговых органов с налогопательщиками в пользу последних. Все ситауции проверены судебно-арбитражной практикой. Рассылка предназначена для юристов, бухгалтеров, финдиректоров и всех, кто интересуется налогообложением. Подписаться Вы можете прямо сейчас (если вы в он-лайне).

Волшебство программирования на 1С:Предприятие

Здравствуйте. Сегодня мы рассмотрим очень актуальную проблему в мире 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://subscribe.ru/archive/comp.soft.prog.magic1c

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

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

stasmit@mail.ru


 



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное