Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Хитрости быстрого перевода конфигураций на 8.2          
Vofka Подменю пользователя
сообщение 28.02.11, 9:16
Сообщение #1

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Последовательность действий по адаптации конфигураций к работе без режима совместимости 8.1 довольно проста. Она описывается в книге М.Г.Радченко «1С:Предприятие 8.2 Коротко о главном». Большинство их не должно вызвать затруднений даже у простого пользователя, не говоря уж об администраторах баз данных.

Однако наряду с тривиальными действиями типа проставления нужных галочек в свойствах объектов, предъявляются требования к программному коду:
В модулях не должно быть функций ПроверитьЗаполнение().
Обработка заполнения должна учитывать вызовы с иными значениями параметра, нежели ссылки на объект-основание.
Есть особенность использования ключевых слов РАЗЛИЧНЫЕ вместе с УПОРЯДОЧИТЬ ПО в текстах запросов.



Как и многие из партнеров 1С, сначала мы использовали 8.2 для целей внутреннего учета.

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



1. Решить проблему с функцией ПроверитьЗаполнение() достаточно просто. Для этого нужно выбрать Правка - Глобальная замена, в поле «Искать» поставить строку «Функция ПроверитьЗаполнение()», в поле «Заменить» - «Функция ПроверитьЗаполнение_Старая()», или что-то на свое усмотрение. После чего синтаксический контроль будет пройден без ошибок (разумеется, если разработчик напечатал именно так, без лишних пробелов между словами).

2. С процедурой ОбработкаЗаполнения(Основание) можно было бы сделать точно также, однако тогда перестанет отрабатывать имеющийся в конфигурации код. Поэтому решение такое: в поле «Искать» -«Процедура ОбработкаЗаполнения(Основание)»; в поле «Заменить» - «Процедура ОбработкаЗаполнения(Основание) Попытка м = Основание.Метаданные(); Исключение Возврат; КонецПопытки;». Вставка прерывает выполнение обработчика, если значение параметра не имеет метода Метаданные().

3. И наконец, самое сложное - с запросами. Задача в том, чтобы добавить выражения, по которым упорядочивается результат, в секцию «Выбрать». Делать это, разумеется, все равно нужно будет вручную. Но сложность заключается уже в том, чтобы найти такие запросы, потому что просмотр всех модулей конфигурации займет у специалиста немало времени. Таким образом, было бы удобно знать заранее, в запросах каких модулей встречаются одновременно слова «РАЗЛИЧНЫЕ» и «УПОРЯДОЧИТЬ». Для этого, я написал обработку - анализатор программных модулей. Работает примерно также как и тот что выложен на сайте 1С, но немного хитрее, отсекая лишние сработки. Скажу сразу, на сто процентов решить проблему не получится, потому что запрос может составляться динамически из нескольких текстовых блоков. В настоящее время, с момента выхода версии 8.1, от этого отказываются в пользу временных таблиц и приемов оптимизации кода, позволяющих открывать текст в конструкторе. Однако такие блоки кода все еще встречаются, и исключать их неправильную работу нельзя. Анализатор может работать в двух режимах:

1) Искать сочетание внутри одного блока текста (хотя он может быть разделен вставками, не содержащими «;». Например "выбрать различные ссылка из Документ."+имя+" упорядочить по номер")

2) Искать сочетание внутри всех текстовых блоков одного модуля, не взирая на границы.

Имеет 2 параметра:

- Путь (к папке с файлами модулей)

- ИскатьНеОпределяяГраницыБлоков (см. режимы работы).

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

Спасибо за внимание.

//Листинг:

&НаКлиенте

Процедура Проверить(Команда)

            НайденныеФайлы = НайтиФайлы(Объект.Путь, "*.txt");

            н = 0;

            к = НайденныеФайлы.Количество();

            Для каждого ф из НайденныеФайлы Цикл            

                        Т = новый ТекстовыйДокумент;

                        Т.Прочитать(ф.ПолноеИмя);

                        Текст = т.ПолучитьТекст();

                        Текст = СтрЗаменить(Текст,"Различные","различные");

                        Текст = СтрЗаменить(Текст,"РАЗЛИЧНЫЕ","различные");          

                        Текст = СтрЗаменить(Текст,"Упорядочить","упорядочить");

                        Текст = СтрЗаменить(Текст,"УПОРЯДОЧИТЬ","упорядочить");

                        Состояние("Прогресс "+Формат(н/к*100,"ЧДЦ=0")+"%. Текущий файл: "+ ф.имя+" ");

                        Если Анализ(Текст) Тогда

                                   Сообщить( ф.имя);                

                        КонецЕсли;                                        

                        н = н+1;          

            КонецЦикла;

            Сообщить("Анализатор текстов программных модулей  предназначен для адаптации запросов к 8.2 (с) Андреев Н.О. ООО ""Аллегро Информационные Технологии"". Все права зарезервированы.");

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



&НаКлиенте

Функция Анализ(знач Т)

                        режим = 0;

                        КавычкаЗакрыта = истина;

                        к = СтрЧислоСтрок(т);

                        Для н = 1 по к Цикл

                                   строка = СтрПолучитьСтроку(т,н);

                                   Поз = Найти(строка,"//"); // Не учитываем комментарии

                                   Если поз<>0 Тогда

                                               строка = лев(строка,поз-1);

                                   КонецЕсли;



                                   ПервоеВхождениеКавычки = 0;

                                   ОтфильтрованаяСтрока = "";

                                   Пока Истина Цикл

                                               Поз = Найти(строка,"""");     // Интересны только блоки текста (запросы), причем

                                               Если Не поз = 0 Тогда                      //если запрос формируется динамически, надо учитывать только текст внутри кавычек

                                                           Если НЕ КавычкаЗакрыта Тогда

                                                                       ОтфильтрованаяСтрока = ОтфильтрованаяСтрока + ЛЕВ(Строка,поз-1);                                                  

                                                           КонецЕсли;

                                                           КавычкаЗакрыта = НЕ КавычкаЗакрыта;

                                                           строка = Прав(строка,СтрДлина(Строка)-поз);

                                                           Поз1 = Найти(строка,";");

                                                           Поз2 = Найти(строка,"""");

                                                           Если НЕ Объект.ИскатьНеОпределяяГраницыБлоков И (Не поз1 = 0) И КавычкаЗакрыта //Найдена точка с запятой

                                                                       И (Поз2 = 0 ИЛИ (Поз1<Поз2)) // она находится вне блока текста

                                                                       Тогда

                                                                       режим = 0; //Этот блок закончился

                                                           КонецЕсли;                                                                

                                               Иначе

                                                           Прервать;

                                               КонецЕсли;                

                                   КонецЦикла;



                                   Если НЕ КавычкаЗакрыта Тогда

                                               ОтфильтрованаяСтрока = ОтфильтрованаяСтрока + Строка;

                                   КонецЕсли;



                                   строка = ОтфильтрованаяСтрока;



                                   Если Режим = 0 Тогда //Пока ничего не нашли

                                               Поз = Найти(строка,"различные");

                                               Если Не поз = 0 Тогда

                                                           режим = 1;

                                               КонецЕсли;                            

                                   КонецЕсли;

                                   Если Режим = 1 Тогда //Нашли "различные", ищем "упорядочить" в том же блоке текста                                    

                                               Поз = Найти(строка,"упорядочить");

                                               Если Не поз = 0 Тогда //нашли в том же запросе второй признак

                                                           Возврат истина;

                                               КонецЕсли;                                                                                                              

                                   КонецЕсли;

                                   ОбработкаПрерыванияПользователя();

                        КонецЦикла;

                        Возврат ложь;

КонецФункции


&НаКлиенте

Процедура ПутьНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

            Режим = РежимДиалогаВыбораФайла.ВыборКаталога;

            ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);

            ДиалогОткрытияФайла.Заголовок = "Выберите каталог";

            Если ДиалогОткрытияФайла.Выбрать() Тогда

                        Объект.путь = ДиалогОткрытияФайла.Каталог;

            КонецЕсли;

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


Автор: Андреев Никита Олегович

Спасибо сказали: Atanasov, irinali, kserg2012, mister-x,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 17:43
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!