Главная » Файлы » Программируем в 1С » 1С и Другие системы |
Скачивать материалы с сайта, могут только зарегистрированные пользователи.
Для регистрации заполните два поля ниже!
Через минуту Вы получите "Гостевой доступ"
2010 Февраль 13, 17:47 | |
Данная статья носит скорее теоретический характер, чем практический. Технология перевода кода 77 на 80. К сожалению, разработчики не пошли по пути обратной совместимости (хотя и могли бы). Поэтому этим путем пойдем мы! ;-) 1С позволяет только сконвертировать конфигурацию 77 на 80, при этом переносятся данные базы, формы, макеты, прикладные объекты, но не конвертируется код модулей, потому что он несовместим. 1С могла бы поддерживать старый и новый код, чтобы можно было постепенно переписывать важные участки на 80, оставляя старые и непринципиальные на 77. Но, увы. К счастью, в беседе с Анатолием Федьковым мне пришла спасительная для кодеров 77 идея, которой я и делюсь с вами. Она заключается в эмуляции кода 77 встроенными средствами 80. К счастью, 1С в основном оперирует с объектами, поэтому существует очень простой способ перехода с 77 на 80, о котором мало кто задумывался. Этот способ поможет вам без дополнительного кодирования сделать 80% конвертации кода. Эмуляция объектов Нужно заменить все создаваемые объекты 77 объектами-эмуляторами, эмулирующими работу 77. В таком случае изменения в конфигурацию минимальны. Такие объекты-эмуляторы имеют методы и свойства, полностью идентичные свойствам объектов 77. К сожалению, в 80 нельзя поставить триггер на изменение свойства объекта, поэтому в некоторых случаях (когда установка свойства влечет побочный эффект), нужно будет поработать руками. Но таких случаев мало. Суть в том, что объекты 77 заменяются соответствующими обработками. К счастью, функция «СоздатьОбъект» в 80 не занята, поэтому можно поставить на нее перехватчики, который будет вместо объекта создавать соответствующий ему объект-эмулятор: Функция СоздатьОбъект(ТипОбъекта) Экспорт Возможно, удобнее эмулировать объекты 77 не обработками, а формами, но это помешает нам воспользоваться преимуществами трехзвенной архитектуры, зато у форм есть ОбработчикИзмененияДанных, реагирующий на изменение данных формы и скорее всего можно динамически управлять составом форм. Этот вопрос нужно исследовать. Возможно, более удобно эмулировать объекты 77 через ОЛЕ-объект, который будет содержать нужную обработку-эмулятор, написанную на языке 77, и дополнительно отлавливать изменение и чтение свойств, а также динамически изменять состав свойств объектов. Но пока в нашем распоряжении только обработки. Эмуляторы прикладных объектов Лучше конечно, создавать объект-эмулятор для каждого типа
прикладного объекта, чем внедрять весь функционал 77 в каждый вид
прикладного объекта 80. К сожалению, обработка не умеет обрабатывать событие, когда обращаются к свойству, которого у него нет. Поэтому надежнее заменить все обращения к реквизитам объекта 77 через, но в принципе, можно обойтись и без этого, если при вызове метода 77 ТекущийОбъект и других подобных ему, свойства объекта считывать в память и доступны на чтении. В таком случае объект-эмулятор должен содержать всевозможные свойства всех объектов. О другом способе эмуляции читайте в разделе «Умная точка». Умная точка Некоторые недостатки эмуляторов можно разрешить, если грамотно
обработать исходный код 77 с помощью регулярных выражений. Как вы
знаете, в 80 можно выгрузить все модули в файлы, обработать их, а затем
загрузить обратно. Итак, «умная точка». Суть в том, чтобы найти все обращения к свойствам объекта через точку и заменить их на вызов метода ПолучитьАтрибут/УстановитьАтрибут, который должен установить свойство. Выражение замены для чтения свойства: Выражение замены для установки свойства: В таком случае доступ к свойствам эмулируемого объекта будет осуществляться только через вызовы методов ПолучитьАтрибут/УстановитьАтрибут, что позволит гибко управлять чтением свойств объектов. Если с регулярными выражениями у вас не очень складывается, можно нанять студента, который сам обработает эти точки (можно обработать еще в базе 77), чтобы потом было легче переходить. Объем работ можно оценить, запустив глобальный поиск символа «.» по конфигурации и платить студенту чисто за количество строк. Работа-то механическая. О развитии способа Представляете, труд миллиона леммингов, переводящих конфы-самописки из 77 в 80 оказался рабским, потому что можно было пойти другим путем. К счастью, эта информация пригодится еще другим, переходящим с 77 на 80, программистам. Со временем, когда конфигурация, переведенная подобным способом с 77 на 80, заработает, можно по частям переводить ее с объектов-эмуляторов на объекты 80, уже по ходу работы. Контексты Стоит обратить внимание, что при выводе секции отчета (а также вычислении функции Шаблон) доступны все переменные, видимые в контексте выполнения. Для 80 их нужно загонять в параметры, лучше всего в структуру. Формы В формах 77 можно было содержать вычислимые поля для надписей и ячеек таблиц значения. Периодические реквизиты справочников Для простоты периодические реквизиты можно хранить в одном регистре
сведений с периодичностью до даты и структурой измерений Справочник
(ссылка на справочник), Реквизит (идентификатор или значение
перечисления (лучше)) и ресурсом Значение произвольного типа. Константы Самый простой способ – создать по одному регистру сведений на каждую константу с заданной периодичностью. //Исходный код: Ограничения Еще один хитрый метод Константа = Новый Структура(); Все, никакого изменения кода. Исходный код констант работает. | |
Просмотров: 2146 | Загрузок: 0 | |
Выразить благодарность - Поделиться с друзьями!
Всего комментариев: 0 | |