Добрый день!Пару недель назад почитал форумы и подготовил универсальную обработку на встроенном языке 1С анализирующую исходный код любых отчетов и обработок «1С: Предприятие 8». Вызван анализ исходного кода был появлением продаж на моей домашней страничке. Попытки написать в ручную документации для нескольких тысяч файлов успеха не имели.
Шаг первый:

— Создать таблицы для анализа исходного кода одного модуля (для отладки шаблона):

— Создать макет для вывода функционала исходного кода одного модуля в документацию:

— Создать процедуры для анализа исходного кода одного модуля:
&НаКлиенте Процедура ЗаполнитьКодМодуля() ИмяФайлаПриИзменении(""); Текст=Новый ТекстовыйДокумент; Текст.Прочитать(ИмяФайла); КодМодуля.Очистить(); Для н=1 по Текст.КоличествоСтрок() Цикл Стр=Текст.ПолучитьСтроку(н); СтрКодаМодуля=КодМодуля.Добавить(); СтрКодаМодуля.Стр=Стр; СтрКодаМодуля.НомерСтроки=н; КонецЦикла; КонецПроцедуры &НаКлиенте Процедура ЗаполнитьОператоры() Перем СтрОператора; Операторы.Очистить(); Для каждого СтрКодаМодуля из КодМодуля Цикл Если СтрЧислоВхождений(СтрКодаМодуля.Стр,"Процедура")<>0 Тогда Попытка СтрОператора.НомерСтрокиОкончания=СтрКодаМодуля.НомерСтроки-4; Исключение КонецПопытки; СтрОператора=Операторы.Добавить(); М=СтрРазделить(СтрКодаМодуля.Стр,"("); М1=СтрРазделить(М.Получить(0)," "); СтрОператора.Оператор=М1.Получить(1); СтрОператора.НомерСтрокиНачала=СтрКодаМодуля.НомерСтроки; КонецЕсли; Если СтрЧислоВхождений(СтрКодаМодуля.Стр,"Функция")<>0 Тогда Попытка СтрОператора.НомерСтрокиОкончания=СтрКодаМодуля.НомерСтроки-4; Ис��лючение КонецПопытки; СтрОператора=Операторы.Добавить(); М=СтрРазделить(СтрКодаМодуля.Стр,"("); М1=СтрРазделить(М.Получить(0)," "); СтрОператора.Оператор=М1.Получить(1); СтрОператора.НомерСтрокиНачала=СтрКодаМодуля.НомерСтроки; КонецЕсли; КонецЦикла; СтрОператора.НомерСтрокиОкончания=КодМодуля.Количество()-2; КонецПроцедуры &НаКлиенте Процедура ЗаполнитьТаблицыОператоров() Для каждого СтрОператора из Операторы Цикл Для н=СтрОператора.НомерСтрокиНачала по СтрОператора.НомерСтрокиОкончания Цикл СтрКодаМодуля=КодМодуля.Получить(н); СтрКодаОператора=СтрОператора.КодОператора.Добавить(); СтрКодаОператора.Стр=СтрКодаМодуля.Стр; СтрКодаОператора.НомерСтроки=СтрКодаМодуля.НомерСтроки; Если СтрЧислоВхождений(СтрКодаМодуля.Стр,"Справочник")<>0 Тогда Если СтрЧислоВхождений(СтрКодаМодуля.Стр,"Найти")<>0 Тогда М=СтрРазделить(СтрКодаМодуля.Стр,"."); Для ном=0 по М.Количество()-1 Цикл Если ном+1<М.Количество() Тогда Если Лев(М.Получить(ном+1),5)="Найти" Тогда Масс=СтрОператора.ИспользуемыеТаблицы.НайтиСтроки(Новый Структура("Таблица",М.Получить(ном))); Если Масс.Количество()=0 Тогда ТаблицаИспользуемаяОператором=СтрОператора.ИспользуемыеТаблицы.Добавить(); ТаблицаИспользуемаяОператором.Таблица=М.Получить(ном); ТаблицаИспользуемаяОператором.НомерСтроки=СтрКодаМодуля.НомерСтроки; ТаблицаИспользуемаяОператором.Синоним="Справочник "+М.Получить(ном); М1=СтрРазделить(СтрКодаМодуля.Стр,"="); Если СтрЧислоВхождений(М1.Получить(0),".")=0 Тогда ТаблицаИспользуемаяОператором.Переменная=СокрЛП(М1.Получить(0)); КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; М1=СтрРазделить(СтрКодаМодуля.Стр,"()"); Если М1.Количество()<=5 Тогда Если СтрЧислоВхождений(СтрКодаМодуля.Стр,"Сокр")=0 Тогда Если СтрЧислоВхождений(СтрКодаМодуля.Стр,"НайтиПоКоду")<>0 Тогда Если СтрЧислоВхождений(М1.Получить(1),"НайтиПоКоду")<>0 Тогда Масс=ТаблицаИспользуемаяОператором.УсловияПоТаблицам.НайтиСтроки(Новый Структура("Условие","Код="+М1.Получить(2))); Если Масс.Количество()=0 Тогда УсловияПоТаблицеОператора=ТаблицаИспользуемаяОператором.УсловияПоТаблицам.Добавить(); УсловияПоТаблицеОператора.Условие="Код="+М1.Получить(2); УсловияПоТаблицеОператора.НомерСтроки=СтрКодаМодуля.НомерСтроки; КонецЕсли; Иначе Масс=ТаблицаИспользуемаяОператором.УсловияПоТаблицам.НайтиСтроки(Новый Структура("Условие","Код="+М1.Получить(1))); Если Масс.Количество()=0 Тогда УсловияПоТаблицеОператора=ТаблицаИспользуемаяОператором.УсловияПоТаблицам.Добавить(); УсловияПоТаблицеОператора.Условие="Код="+М1.Получить(1); УсловияПоТаблицеОператора.НомерСтроки=СтрКодаМодуля.НомерСтроки; КонецЕсли; КонецЕсли; Иначе Масс=ТаблицаИспользуемаяОператором.УсловияПоТаблицам.НайтиСтроки(Новый Структура("Условие","Наименование="+М1.Получить(1))); Если Масс.Количество()=0 Тогда УсловияПоТаблицеОператора=ТаблицаИспользуемаяОператором.УсловияПоТаблицам.Добавить(); УсловияПоТаблицеОператора.Условие="Наименование="+М1.Получить(1); УсловияПоТаблицеОператора.НомерСтроки=СтрКодаМодуля.НомерСтроки; КонецЕсли; КонецЕсли; Иначе Если СтрЧислоВхождений(СтрКодаМодуля.Стр,"НайтиПоКоду")<>0 Тогда Масс=ТаблицаИспользуемаяОператором.УсловияПоТаблицам.НайтиСтроки(Новый Структура("Условие","Код="+М1.Получить(2))); Если Масс.Количество()=0 Тогда УсловияПоТаблицеОператора=ТаблицаИспользуемаяОператором.УсловияПоТаблицам.Добавить(); УсловияПоТаблицеОператора.Условие="Код="+М1.Получить(2); УсловияПоТаблицеОператора.НомерСтроки=СтрКодаМодуля.НомерСтроки; КонецЕсли; Иначе Масс=ТаблицаИспользуемаяОператором.УсловияПоТаблицам.НайтиСтроки(Новый Структура("Условие","Наименование="+М1.Получить(2))); Если Масс.Количество()=0 Тогда УсловияПоТаблицеОператора=ТаблицаИспользуемаяОператором.УсловияПоТаблицам.Добавить(); УсловияПоТаблицеОператора.Условие="Наименование="+М1.Получить(2); УсловияПоТаблицеОператора.НомерСтроки=СтрКодаМодуля.НомерСтроки; КонецЕсли; КонецЕсли; КонецЕсли; Иначе Если СтрЧислоВхождений(СтрКодаМодуля.Стр,"НайтиПоКоду")<>0 Тогда Масс=ТаблицаИспользуемаяОператором.УсловияПоТаблицам.НайтиСтроки(Новый Структура("Условие","Код="+М1.Получить(М1.Количество()-3))); Если Масс.Количество()=0 Тогда УсловияПоТаблицеОператора=ТаблицаИспользуемаяОператором.УсловияПоТаблицам.Добавить(); УсловияПоТаблицеОператора.Условие="Код="+М1.Получить(М1.Количество()-3); УсловияПоТаблицеОператора.НомерСтроки=СтрКодаМодуля.НомерСтроки; КонецЕсли; Иначе Масс=ТаблицаИспользуемаяОператором.УсловияПоТаблицам.НайтиСтроки(Новый Структура("Условие","Наименование="+М1.Получить(М1.Количество()-3))); Если Масс.Количество()=0 Тогда УсловияПоТаблицеОператора=ТаблицаИспользуемаяОператором.УсловияПоТаблицам.Добавить(); УсловияПоТаблицеОператора.Условие="Наименование="+М1.Получить(М1.Количество()-3); УсловияПоТаблицеОператора.НомерСтроки=СтрКодаМодуля.НомерСтроки; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; Если СтрЧислоВхождений(СтрКодаМодуля.Стр,"|")<>0 Тогда М=СтрРазделить(СтрКодаМодуля.Стр,"."); Если СтрЧислоВхождений(М.Получить(М.Количество()-1)," КАК ")<>0 Тогда Масс=СтрОператора.ИспользуемыеТаблицы.НайтиСтроки(Новый Структура("Таблица",Сред(М.Получить(М.Количество()-1),1,СтрДлина(М.Получить(М.Количество()-1))-Найти(М.Получить(М.Количество()-1)," КАК ")-4))); Если Масс.Количество()=0 Тогда ТаблицаИспользуемаяОператором=СтрОператора.ИспользуемыеТаблицы.Добавить(); ТаблицаИспользуемаяОператором.Таблица=Сред(М.Получить(М.Количество()-1),1,СтрДлина(М.Получить(М.Количество()-1))-Найти(М.Получить(М.Количество()-1)," КАК ")-4); ТаблицаИспользуемаяОператором.НомерСтроки=Стр��одаМодуля.НомерСтроки; ТаблицаИспользуемаяОператором.Синоним="Справочник "+Сред(М.Получить(М.Количество()-1),1,СтрДлина(М.Получить(М.Количество()-1))-Найти(М.Получить(М.Количество()-1)," КАК ")-4); М1=СтрРазделить(М.Получить(М.Количество()-1)," КАК "); ТаблицаИспользуемаяОператором.Переменная=М1.Получить(М1.Количество()-1); КонецЕсли; Иначе Масс=СтрОператора.ИспользуемыеТаблицы.НайтиСтроки(Новый Структура("Таблица",М.Получить(М.Количество()-1))); Если Масс.Количество()=0 Тогда ТаблицаИспользуемаяОператором=СтрОператора.ИспользуемыеТаблицы.Добавить(); ТаблицаИспользуемаяОператором.Таблица=М.Получить(М.Количество()-1); ТаблицаИспользуемаяОператором.НомерСтроки=СтрКодаМодуля.НомерСтроки; ТаблицаИспользуемаяОператором.Синоним="Справочник "+М.Получить(М.Количество()-1); М1=СтрРазделить(СтрКодаМодуля.Стр,"="); Если СтрЧислоВхождений(М1.Получить(0),".")=0 Тогда ТаблицаИспользуемаяОператором.Переменная=СокрЛП(М1.Получить(0)); КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; Если СтрЧислоВхождений(СтрКодаМодуля.Стр,"Object")<>0 Тогда М=СтрРазделить(СтрКодаМодуля.Стр,Символ(34)); М1=СтрРазделить(М.Получить(1),"."); Масс=СтрОператора.ИспользуемыеТаблицы.НайтиСтроки(Новый Структура("Таблица",М1.Получить(1))); Если Масс.Количество()=0 Тогда ТаблицаИспользуемаяОператором=СтрОператора.ИспользуемыеТаблицы.Добавить(); ТаблицаИспользуемаяОператором.Таблица=М1.Получить(1); ТаблицаИспользуемаяОператором.НомерСтроки=СтрКодаМодуля.НомерСтроки; ТаблицаИспользуемаяОператором.Синоним="Справочник в подключаемой базе "+М1.Получить(1); М2=СтрРазделить(СтрКодаМодуля.Стр,"="); Если СтрЧислоВхождений(М2.Получить(0),".")=0 Тогда ТаблицаИспользуемаяОператором.Переменная=СокрЛП(М2.Получить(0)); КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; Если СтрЧислоВхождений(СтрКодаМодуля.Стр,"Документы.")<>0 Тогда Если СтрЧислоВхождений(СтрКодаМодуля.Стр,"Найти")<>0 Тогда М=СтрРазделить(СтрКодаМодуля.Стр,"."); Масс=СтрОператора.ИспользуемыеТаблицы.НайтиСтроки(Новый Структура("Таблица",М.Получить(1))); Если Масс.Количество()=0 Тогда ТаблицаИспользуемаяОператором=СтрОператора.ИспользуемыеТаблицы.Добавить(); ТаблицаИспользуемаяОператором.Таблица=М.Получить(1); ТаблицаИспользуемаяОператором.НомерСтроки=СтрКодаМодуля.НомерСтроки; ТаблицаИспользуемаяОператором.Синоним="Документ "+М.Получить(1); М1=СтрРазделить(СтрКодаМодуля.Стр,"="); Если СтрЧислоВхождений(М1.Получить(0),".")=0 Тогда ТаблицаИспользуемаяОператором.Переменная=СокрЛП(М1.Получить(0)); КонецЕсли; КонецЕсли; М1=СтрРазделить(СтрКодаМодуля.Стр,"()"); М2=СтрРазделить(М1.Получить(1),","); Масс=ТаблицаИспользуемаяОператором.УсловияПоТаблицам.НайтиСтроки(Новый Структура("Условие","Номер="+М2.Получить(0))); Если Масс.Количество()=0 Тогда УсловияПоТаблицеОператора=ТаблицаИспользуемаяОператором.УсловияПоТаблицам.Добавить(); УсловияПоТаблицеОператора.Условие="Номер="+М2.Получить(0); УсловияПоТаблицеОператора.НомерСтроки=СтрКодаМодуля.НомерСтроки; КонецЕсли; Масс=ТаблицаИспользуемаяОператором.УсловияПоТаблицам.НайтиСтроки(Новый Структура("Условие","Дата="+М2.Получить(1))); Если Масс.Количество()=0 Тогда УсловияПоТаблицеОператора=ТаблицаИспользуемаяОператором.УсловияПоТаблицам.Добавить(); УсловияПоТаблицеОператора.Условие="Дата="+М2.Получить(1); УсловияПоТаблицеОператора.НомерСтроки=СтрКодаМодуля.НомерСтроки; КонецЕсли; КонецЕсли; Если СтрЧислоВхождений(СтрКодаМодуля.Стр,"|")<>0 Тогда М=СтрРазделить(СтрКодаМодуля.Стр,"."); Если СтрЧислоВхождений(М.Получить(М.Количество()-1)," КАК ")<>0 Тогда Масс=СтрОператора.ИспользуемыеТаблицы.НайтиСтроки(Новый Структура("Таблица",Сред(М.Получить(М.Количество()-1),1,СтрДлина(М.Получить(М.Количество()-1))-Найти(М.Получить(М.Количество()-1)," КАК ")-4))); Если Масс.Количество()=0 Тогда ТаблицаИспользуемаяОператором=СтрОператора.ИспользуемыеТаблицы.Добавить(); ТаблицаИспользуемаяОператором.Таблица=Сред(М.Получить(М.Количество()-1),1,СтрДлина(М.Получить(М.Количество()-1))-Найти(М.Получить(М.Количество()-1)," КАК ")-4); ТаблицаИспользуемаяОператором.НомерСтроки=СтрКодаМодуля.НомерСтроки; ТаблицаИспользуемаяОператором.Синоним="Документ "+Сред(М.Получить(М.Количество()-1),1,СтрДлина(М.Получить(М.Количество()-1))-Найти(М.Получить(М.Количество()-1)," КАК ")-4); М1=СтрРазделить(СтрКодаМодуля.Стр,"="); Если СтрЧислоВхождений(М1.Получить(0),".")=0 Тогда ТаблицаИспользуемаяОператором.Переменная=СокрЛП(М1.Получить(0)); КонецЕсли; КонецЕсли; Иначе Масс=СтрОператора.ИспользуемыеТаблицы.НайтиСтроки(Новый Структура("Таблица",М.Получить(М.Количество()-1))); Если Масс.Количество()=0 Тогда ТаблицаИспользуемаяОператором=СтрОператора.ИспользуемыеТаблицы.Добавить(); ТаблицаИспользуемаяОператором.Таблица=М.Получить(М.Количество()-1); ТаблицаИспользуемаяОператором.НомерСтроки=СтрКодаМодуля.НомерСтроки; ТаблицаИспользуемаяОператором.Синоним="Документ "+М.Получить(М.Количество()-1); М1=СтрРазделить(СтрКодаМодуля.Стр,"="); Если СтрЧислоВхождений(М1.Получить(0),".")=0 Тогда ТаблицаИспользуемаяОператором.Переменная=СокрЛП(М1.Получить(0)); КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; Если СтрЧислоВхождений(СтрКодаМодуля.Стр,"Object")<>0 Тогда М=СтрРазделить(СтрКодаМодуля.Стр,Символ(34)); М1=СтрРазделить(М.Получить(1),"."); Масс=СтрОператора.ИспользуемыеТаблицы.НайтиСтроки(Новый Структура("Таблица",М1.Получить(1))); Если Масс.Количество()=0 Тогда ТаблицаИспользуемаяОператором=СтрОператора.ИспользуемыеТаблицы.Добавить(); ТаблицаИспользуемаяОператором.Таблица=М1.Получить(1); ТаблицаИспользуемаяОператором.НомерСтроки=СтрКодаМодуля.НомерСтроки; ТаблицаИспользуемаяОператором.Синоним="Документ в подключаемой базе "+М1.Получить(1); М2=СтрРазделить(СтрКодаМодуля.Стр,"="); Если СтрЧислоВхождений(М2.Получить(0),".")=0 Тогда ТаблицаИспользуемаяОператором.Переменная=СокрЛП(М2.Получить(0)); КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; Если СтрЧислоВхождений(СтрКодаМодуля.Стр,"Регистр")<>0 Тогда Если СтрЧислоВхождений(СтрКодаМодуля.Стр,"СоздатьМенеджер")<>0 Тогда М=СтрРазделить(СтрКодаМодуля.Стр,"."); Масс=СтрОператора.ИспользуемыеТаблицы.НайтиСтроки(Новый Структура("Таблица",М.Получить(1))); Если Масс.Количество()=0 Тогда ТаблицаИспользуемаяОператором=СтрОператора.ИспользуемыеТаблицы.Добавить(); ТаблицаИспользуемаяОператором.Таблица=М.Получить(1); ТаблицаИспользуемаяОператором.НомерСтроки=СтрКодаМодуля.НомерСтроки; ТаблицаИспользуемаяОператором.Синоним="Регистр "+М.Получить(1); М1=��трРазделить(СтрКодаМодуля.Стр,"="); Если СтрЧислоВхождений(М1.Получить(0),".")=0 Тогда ТаблицаИспользуемаяОператором.Переменная=СокрЛП(М1.Получить(0)); КонецЕсли; КонецЕсли; КонецЕсли; Если СтрЧислоВхождений(СтрКодаМодуля.Стр,"|")<>0 Тогда М=СтрРазделить(СтрКодаМодуля.Стр,"."); Если СтрЧислоВхождений(М.Получить(М.Количество()-1)," КАК ")<>0 Тогда Масс=СтрОператора.ИспользуемыеТаблицы.НайтиСтроки(Новый Структура("Таблица",Сред(М.Получить(М.Количество()-1),1,СтрДлина(М.Получить(М.Количество()-1))-Найти(М.Получить(М.Количество()-1)," КАК ")-4))); Если Масс.Количество()=0 Тогда ТаблицаИспользуемаяОператором=СтрОператора.ИспользуемыеТаблицы.Добавить(); ТаблицаИспользуемаяОператором.Таблица=Сред(М.Получить(М.Количество()-1),1,СтрДлина(М.Получить(М.Количество()-1))-Найти(М.Получить(М.Количество()-1)," КАК ")-4); ТаблицаИспользуемаяОператором.НомерСтроки=СтрКодаМодуля.НомерСтроки; ТаблицаИспользуемаяОператором.Синоним="Регистр "+Сред(М.Получить(М.Количество()-1),1,СтрДлина(М.Получить(М.Количество()-1))-Найти(М.Получить(М.Количество()-1)," КАК ")-4); М1=СтрРазделить(СтрКодаМодуля.Стр,"="); Если СтрЧислоВхождений(М1.Получить(0),".")=0 Тогда ТаблицаИспользуемаяОператором.Переменная=СокрЛП(М1.Получить(0)); КонецЕсли; КонецЕсли; Иначе Масс=СтрОператора.ИспользуемыеТаблицы.НайтиСтроки(Новый Структура("Таблица",М.Получить(М.Количество()-1))); Если Масс.Количество()=0 Тогда ТаблицаИспользуемаяОператором=СтрОператора.ИспользуемыеТаблицы.Добавить(); ТаблицаИспользуемаяОператором.Таблица=М.Получить(М.Количество()-1); ТаблицаИспользуемаяОператором.НомерСтроки=СтрКодаМодуля.НомерСтроки; ТаблицаИспользуемаяОператором.Синоним="Регистр "+М.Получить(М.Количество()-1); М1=СтрРазделить(СтрКодаМодуля.Стр,"="); Если СтрЧислоВхождений(М1.Получить(0),".")=0 Тогда ТаблицаИспользуемаяОператором.Переменная=СокрЛП(М1.Получить(0)); КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; Если СтрЧислоВхождений(СтрКодаМодуля.Стр,"Object")<>0 Тогда М=СтрРазделить(СтрКодаМодуля.Стр,Символ(34)); М1=СтрРазделить(М.Получить(1),"."); Масс=СтрОператора.ИспользуемыеТаблицы.НайтиСтроки(Новый Структура("Таблица",М1.Получить(1))); Если Масс.Количество()=0 Тогда ТаблицаИспользуемаяОператором=СтрОператора.ИспользуемыеТаблицы.Добавить(); ТаблицаИспользуемаяОператором.Таблица=М1.Получить(1); ТаблицаИспользуемаяОператором.НомерСтроки=СтрКодаМодуля.НомерСтроки; ТаблицаИспользуемаяОператором.Синоним="Регистр в подключаемой базе "+М1.Получить(1); М2=СтрРазделить(СтрКодаМодуля.Стр,"="); Если СтрЧислоВхождений(М2.Получить(0),".")=0 Тогда ТаблицаИспользуемаяОператором.Переменная=СокрЛП(М2.Получить(0)); КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; КонецПроцедуры &НаКлиенте Процедура ЗаполнитьПоляТаблицОператоров() Для каждого СтрОператора из Операторы Цикл Для каждого ТаблицаИспользуемаяОператором из СтрОператора.ИспользуемыеТаблицы Цикл Если СокрЛП(ТаблицаИспользуемаяОператором.Переменная)<>"" Тогда Для н=СтрОператора.НомерСтрокиНачала по СтрОператора.НомерСтрокиОкончания Цикл СтрКодаМодуля=КодМодуля.Получить(н); Если СтрЧислоВхождений(СтрКодаМодуля.Стр,СокрЛП(ТаблицаИспользуемаяОператором.Переменная)+".")<>0 Тогда М=СтрРазделить(СтрКодаМодуля.Стр,"."); М1=СтрРазделить(М.Получить(1),"="); Если СтрЧислоВхождений(М1.Получить(0),"(")=0 Тогда Если СтрЧислоВхождений(М1.Получить(0),Символ(34))=0 Тогда Если СтрЧислоВхождений(М1.Получить(0),"ССЫЛКА")=0 Тогда Если СтрЧислоВхождений(М1.Получить(0),")")=0 Тогда Если СтрЧислоВхождений(М1.Получить(0),СокрЛП(ТаблицаИспользуемаяОператором.Переменная))=0 Тогда Масс=ТаблицаИспользуемаяОператором.Поля.НайтиСтроки(Новый Структура("Поле",СтрЗаменить(СтрЗаменить(М1.Получить(0)," Тогда",""),";",""))); Если Масс.Количество()=0 Тогда ПолеТаблицыОператора=ТаблицаИспользуемаяОператором.Поля.Добавить(); ПолеТаблицыОператора.Поле=СтрЗаменить(СтрЗаменить(М1.Получить(0)," Тогда",""),";",""); ПолеТаблицыОператора.НомерСтроки=СтрКодаМодуля.НомерСтроки; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; КонецЦикла; КонецПроцедуры &НаКлиенте Процедура ОбновитьТаблицыОператоров() Для каждого СтрОператора из Операторы Цикл Для каждого ТаблицаИспользуемаяОператором из СтрОператора.ИспользуемыеТаблицы Цикл Если СокрЛП(ТаблицаИспользуемаяОператором.Переменная)<>"" Тогда Для н=СтрОператора.НомерСтрокиНачала по СтрОператора.НомерСтрокиОкончания Цикл СтрКодаМодуля=КодМодуля.Получить(н); Если СтрЧислоВхождений(СтрКодаМодуля.Стр,СокрЛП(ТаблицаИспользуемаяОператором.Переменная)+".Записать")<>0 Тогда ТаблицаИспользуемаяОператором.ЕстьЗапись=Истина; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; КонецЦикла; КонецПроцедуры &НаСервере Процедура ПолучитьФункционалОбработкиНаСервере() ТабличныйДокумент = Новый ТабличныйДокумент; Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет"); ОбластьМакета = Макет.ПолучитьОбласть("Шапка"); ТабличныйДокумент.Вывести(ОбластьМакета); ОбластьМакета = Макет.ПолучитьОбласть("ШапкаТаблицы"); ТабличныйДокумент.Вывести(ОбластьМакета); ТЗ=Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Таблица"); Для каждого СтрОператора из Операторы Цикл Для каждого ТаблицаИспользуемаяОператором из СтрОператора.ИспользуемыеТаблицы Цикл Масс=ТЗ.НайтиСтроки(Новый Структура("Таблица",ТаблицаИспользуемаяОператором.Синоним)); Если Масс.Количество()=0 Тогда СтрТЗ=ТЗ.Добавить(); СтрТЗ.Таблица=ТаблицаИспользуемаяОператором.Синоним; КонецЕсли; КонецЦикла; КонецЦикла; ТЗ.Сортировать("Таблица Возр"); н=0; Для каждого СтрТЗ из ТЗ Цикл н=н+1; ОбластьМакета = Макет.ПолучитьОбласть("СтрокаТаблицы"); ОбластьМакета.Параметры.НомерПП = н; ОбластьМакета.Параметры.Таблица = СтрТЗ.Таблица; ТабличныйДокумент.Вывести(ОбластьМакета); КонецЦикла; ОбластьМакета = Макет.ПолучитьОбласть("ШапкаУсловия"); ТабличныйДокумент.Вывести(ОбластьМакета); ТЗ=Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Условие"); Для каждого СтрОператора из Операторы Цикл Для каждого ТаблицаИспользуемаяОператором из СтрОператора.ИспользуемыеТаблицы Цикл Для каждого УсловияПоТаблицеОператора из ТаблицаИспользуемаяОператором.УсловияПоТаблицам Цикл Масс=ТЗ.НайтиСтроки(Новый Структура("Условие",ТаблицаИспользуемаяОператором.Таблица+"."+УсловияПоТаблицеОператора.Условие)); Если Масс.Количество()=0 Тогда СтрТЗ=ТЗ.Добавить(); СтрТЗ.Условие=ТаблицаИспользуемаяОператором.Таблица+"."+УсловияПоТаблицеОператора.Условие; КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; ТЗ.Сортировать("Условие Возр"); н=0; Для каждого СтрТЗ из ТЗ Цикл н=н+1; ОбластьМакета = Макет.ПолучитьОбласть("СтрокаУсловия"); ОбластьМакета.Параметры.НомерПП = н; ОбластьМакета.Параметры.Условие = СтрТЗ.Условие; ТабличныйДокумент.Вывести(ОбластьМакета); КонецЦикла; ОбластьМакета = Макет.ПолучитьОбласть("ШапкаПоля"); ТабличныйДокумент.Вывести(ОбластьМакета); ТЗ=Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Поле"); Для каждого СтрОператора из Операторы Цикл Для каждого ТаблицаИспользуемаяОператором из СтрОператора.ИспользуемыеТаблицы Цикл Для каждого ПолеТаблицыОператора из ТаблицаИспользуемаяОператором.Поля Цикл Масс=ТЗ.НайтиСтроки(Новый Структура("Поле",ТаблицаИспользуемаяОператором.Таблица+"."+ПолеТаблицыОператора.Поле)); Если Масс.Количество()=0 Тогда СтрТЗ=ТЗ.Добавить(); СтрТЗ.Поле=ТаблицаИспользуемаяОператором.Таблица+"."+ПолеТаблицыОператора.Поле; КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; ТЗ.Сортировать("Поле Возр"); н=0; Для каждого СтрТЗ из ТЗ Цикл н=н+1; ОбластьМакета = Макет.ПолучитьОбласть("СтрокаПоля"); ОбластьМакета.Параметры.НомерПП = н; ОбластьМакета.Параметры.Поле = СтрТЗ.Поле; ТабличныйДокумент.Вывести(ОбластьМакета); КонецЦикла; ОбластьМакета = Макет.ПолучитьОбласть("ШапкаФункционал"); ТабличныйДокумент.Вывести(ОбластьМакета); ТЗ=Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Функционал"); Для каждого СтрОператора из Операторы Цикл Для каждого ТаблицаИспользуемаяОператором из СтрОператора.ИспользуемыеТаблицы Цикл Если ТаблицаИспользуемаяОператором.ЕстьЗапись=Истина Тогда Масс=ТЗ.НайтиСтроки(Новый Структура("Функционал",ТаблицаИспользуемаяОператором.Синоним)); Если Масс.Количество()=0 Тогда СтрТЗ=ТЗ.Добавить(); СтрТЗ.Функционал=ТаблицаИспользуемаяОператором.Синоним; КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; ТЗ.Сортировать("Функционал Возр"); н=0; Для каждого СтрТЗ из ТЗ Цикл н=н+1; ОбластьМакета = Макет.ПолучитьОбласть("СтрокаФункционала"); ОбластьМакета.Параметры.НомерПП = н; ОбластьМакета.Параметры.Функционал = СтрТЗ.Функционал; ТабличныйДокумент.Вывести(ОбластьМакета); КонецЦикла; ТабличныйДокумент.АвтоМасштаб = Истина; Объект.ДокументПечати = ТабличныйДокумент; КонецПроцедуры
Шаг второй:
— Перебор всех файлов отчетов и обработок для распаковки и анализа:
&НаКлиенте Процедура ПолучитьСписокОбработок(База,ИмяПапки,СоздаватьКаталог) НайденныеФайлы = НайтиФайлы(ИмяПапки+"\"+База, "*.*",Истина); Для н=0 по НайденныеФайлы.Количество()-1 Цикл ТекФайл=НайденныеФайлы.Получить(н); Если ТекФайл.ЭтоКаталог()=Истина Тогда Если Прав(ТекФайл.Путь,5+СтрДлина(База))="8.3\"+База+"\" Тогда НайденныеФайлы1 = НайтиФайлы(ИмяПапкиСОбработками+"\"+База+"\"+ТекФайл.Имя, "*.epf",Ложь); Если НайденныеФайлы1.Количество()<>0 Тогда СтрПапок=Папки.Добавить(); СтрПапок.База=База; СтрПапок.Тип=НомерРаздела; СтрПапок.ИмяПапки=ТекФайл.Имя; Для н1=0 по НайденныеФайлы1.Количество()-1 Цикл ТекФайл1=НайденныеФайлы1.Получить(н1); Если ТекФайл1.ЭтоКаталог()=Ложь Тогда Если Сред(ТекФайл1.ИмяБезРасширения,СтрДлина(ТекФайл1.ИмяБезРасширения)-2)<>"(1)" Тогда СтрФайлов=СтрПапок.Файлы.Добавить(); СтрФайлов.ИмяФайла=ТекФайл1.ИмяБезРасширения; НайденныеФайлы4 = НайтиФайлы(ИмяПапкиССкриншотами+"\8.3\"+База+"\"+ТекФайл.Имя+"\"+ТекФайл1.ИмяБезРасширения, "*.*",Ложь); Если НайденныеФайлы4.Количество()=0 Тогда Если СоздаватьКаталог=Истина Тогда СоздатьКаталог(ИмяПапкиССкриншотами+"\8.3\"+База+"\"+ТекФайл.Имя+"\"+ТекФайл1.ИмяБезРасширения); КонецЕсли; КонецЕсли; НайденныеФайлы2 = НайтиФайлы(ИмяПапкиСМодулями+"\8.3\"+База+"\"+ТекФайл.Имя+"\"+ТекФайл1.ИмяБезРасширения, "*.*",Ложь); Если НайденныеФайлы2.Количество()=0 Тогда Если СоздаватьКаталог=Истина Тогда СоздатьКаталог(ИмяПапкиСМодулями+"\8.3\"+База+"\"+ТекФайл.Имя+"\"+ТекФайл1.ИмяБезРасширения); ИмяПапкиСКодамиМодулей=ИмяПапкиСМодулями+"\8.3\"+База+"\"+ТекФайл.Имя+"\"+ТекФайл1.ИмяБезРасширения; ИмяОбработки=ИмяПапкиСОбработками+"\"+База+"\"+ТекФайл.Имя+"\"+ТекФайл1.Имя; КомандаСистемы("UnpackV8.exe -parse "+Символ(34)+ИмяОбработки+Символ(34)+" "+Символ(34)+ИмяПапкиСКодамиМодулей+Символ(34)); КонецЕсли; КонецЕсли; НайденныеФайлы2 = НайтиФайлы(ИмяПапкиСМодулями+"\8.3\"+База+"\"+ТекФайл.Имя+"\"+ТекФайл1.ИмяБезРасширения, "*.0",Ложь); Если НайденныеФайлы2.Количество()<>0 Тогда Для н2=0 по НайденныеФайлы2.Количество()-1 Цикл ТекФайл2=НайденныеФайлы2.Получить(н2); Если ТекФайл2.ЭтоКаталог()=Истина Тогда НайденныеФайлы3 = НайтиФайлы(ИмяПапкиСМодулями+"\8.3\"+База+"\"+ТекФайл.Имя+"\"+ТекФайл1.ИмяБезРасширения+"\"+ТекФайл2.Имя, "*.*",Ложь); Если НайденныеФайлы3.Количество()<>0 Тогда Для н3=0 по НайденныеФайлы3.Количество()-1 Цикл ТекФайл3=НайденныеФайлы3.Получить(н3); Если ТекФайл3.ЭтоКаталог()=Ложь Тогда СтрМодулей=СтрФайлов.Модули.Добавить(); СтрМодулей.ИмяМодуля=ТекФайл3.ПолноеИмя; КонецЕсли; КонецЦикла; КонецЕсли; Иначе СтрМодулей=СтрФайлов.Модули.Добавить(); СтрМодулей.ИмяМодуля=ТекФайл2.ПолноеИмя; КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры &НаКлиенте Процедура ПолучитьСписокОтчетов(База,ИмяПапки,СоздаватьКаталог) НайденныеФайлы = НайтиФайлы(ИмяПапки+"\"+База, "*.*",Истина); Для н=0 по НайденныеФайлы.Количество()-1 Цикл ТекФайл=НайденныеФайлы.Получить(н); Если ТекФайл.ЭтоКаталог()=Истина Тогда Если Прав(ТекФайл.Путь,5+СтрДлина(База))="8.3\"+База+"\" Тогда НайденныеФайлы1 = НайтиФайлы(ИмяПапкиСОбработками+"\"+База+"\"+ТекФайл.Имя, "*.erf",Ложь); Если НайденныеФайлы1.Количество()<>0 Тогда СтрПапок=Папки.Добавить(); СтрПапок.База=База; СтрПапок.Тип=НомерРаздела; СтрПапок.ИмяПапки=ТекФайл.Имя; Для н1=0 по НайденныеФайлы1.Количество()-1 Цикл ТекФайл1=НайденныеФайлы1.Получить(н1); Если ТекФайл1.ЭтоКаталог()=Ложь Тогда Если Сред(ТекФайл1.ИмяБезРасширения,СтрДлина(ТекФайл1.ИмяБезРасширения)-2)<>"(1)" Тогда СтрФайлов=СтрПапок.Файлы.Добавить(); СтрФайлов.ИмяФайла=ТекФайл1.ИмяБезРасширения; НайденныеФайлы4 = НайтиФайлы(ИмяПапкиССкриншотами+"\8.3\"+База+"\"+ТекФайл.Имя+"\"+ТекФайл1.ИмяБезРасширения, "*.*",Ложь); Если НайденныеФайлы4.Количество()=0 Тогда Если СоздаватьКаталог=Истина Тогда СоздатьКаталог(ИмяПапкиССкриншотами+"\8.3\"+База+"\"+ТекФайл.Имя+"\"+ТекФайл1.ИмяБезРасширения); КонецЕсли; КонецЕсли; НайденныеФайлы2 = НайтиФайлы(ИмяПапкиСМодулями+"\8.3\"+База+"\"+ТекФайл.Имя+"\"+ТекФайл1.ИмяБезРасширения, "*.*",Ложь); Если НайденныеФайлы2.Количество()=0 Тогда Если СоздаватьКаталог=Истина Тогда СоздатьКаталог(ИмяПапкиСМодулями+"\8.3\"+База+"\"+ТекФайл.Имя+"\"+ТекФайл1.ИмяБезРасширения); ИмяПапкиСКодамиМодулей=ИмяПапкиСМодулями+"\8.3\"+База+"\"+ТекФайл.Имя+"\"+ТекФайл1.ИмяБезРасширения; ИмяОбработки=ИмяПапкиСОбработками+"\"+База+"\"+ТекФайл.Имя+"\"+ТекФайл1.Имя; КомандаСистемы("UnpackV8.exe -parse "+Символ(34)+ИмяОбработки+Символ(34)+" "+Символ(34)+ИмяПапкиСКодамиМодулей+Символ(34)); КонецЕсли; КонецЕсли; НайденныеФайлы2 = НайтиФайлы(ИмяПапкиСМодулями+"\8.3\"+База+"\"+ТекФайл.Имя+"\"+ТекФайл1.ИмяБезРасширения, "*.0",Ложь); Если НайденныеФайлы2.Количество()<>0 Тогда Для н2=0 по НайденныеФайлы2.Количество()-1 Цикл ТекФайл2=НайденныеФайлы2.Получить(н2); Если ТекФайл2.ЭтоКаталог()=Ложь Тогда СтрМодулей=СтрФайлов.Модули.Добавить(); СтрМодулей.ИмяМодуля=ТекФайл2.ПолноеИмя; КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры
— Запись документаций в СУБД:
&НаКлиенте Процедура СохранитьФункционалИзФайлов(База,Тип,ИмяПапки,ИмяФайла,НомерФайла) КоличествоТаблиц=0; КоличествоУсловий=0; КоличествоИзменений=0; Для каждого СтрОператора из Операторы Цикл Если СтрОператора.ИспользуемыеТаблицы.Количество()<>0 Тогда КоличествоТаблиц=СтрОператора.ИспользуемыеТаблицы.Количество(); Для каждого ТаблицаИспользуемаяОператором из СтрОператора.ИспользуемыеТаблицы Цикл Если ТаблицаИспользуемаяОператором.ЕстьЗапись=Истина Тогда КоличествоИзменений=КоличествоИзменений+1; КонецЕсли; Если ТаблицаИспользуемаяОператором.УсловияПоТаблицам.Количество()<>0 Тогда КоличествоУсловий=ТаблицаИспользуемаяОператором.УсловияПоТаблицам.Количество(); КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; Если КоличествоТаблиц<>0 Тогда Текст=Новый ТекстовыйДокумент; Если ЭтоОбработки=Истина Тогда Текст.Прочитать(ИмяПапкиСЗапросами+"\8.3\"+База+"\Обработки"+Строка(НомерФайла)+".sql",КодировкаТекста.UTF8); Иначе Текст.Прочитать(ИмяПапкиСЗапросами+"\8.3\"+База+"\Отчеты"+Строка(НомерФайла)+".sql",КодировкаТекста.UTF8); КонецЕсли; СтрТекста="INSERT INTO u8051_4.apps (`idr`,`name`,`text`,`img`,`url`,`data`,`status`,`idu`,`pop`,`price`) VALUES ("+Тип+",'"+ИмяФайла+"','"; СтрТекста=СтрТекста+"<h1>Модуль выполняет выборку и обработку данных ("+ИмяПапки+")<br></h1>"; СтрТекста=СтрТекста+"<h1>из таблиц в базе <a href=http://icanmakeit.ru/index.php?pg=magazin&d="+Тип+">"+СтрЗаменить(База,"\О"," (Дополнительные о")+")</a>.<br></h1>"; СтрТекста=СтрТекста+"<br>"; СтрТекста=СтрТекста+"<h4>Таблицы используемые в выборке:<br></h4>"; ТЗ.Очистить(); Для каждого СтрОператора из Операторы Цикл Для каждого ТаблицаИспользуемаяОператором из СтрОператора.ИспользуемыеТаблицы Цикл Масс=ТЗ.НайтиСтроки(Новый Структура("Реквизит",ТаблицаИспользуемаяОператором.Синоним)); Если Масс.Количество()=0 Тогда СтрТЗ=ТЗ.Добавить(); СтрТЗ.Реквизит=ТаблицаИспользуемаяОператором.Синоним; КонецЕсли; КонецЦикла; КонецЦикла; ТЗ.Сортировать("Реквизит Возр"); н=0; Для каждого СтрТЗ из ТЗ Цикл н=н+1; СтрТекста=СтрТекста+Строка(н)+" "+СтрТЗ.Реквизит+"<br>"; КонецЦикла; Если КоличествоУсловий<>0 Тогда СтрТекста=СтрТекста+"<br>"; СтрТекста=СтрТекста+"<h4>Условия по таблицам в выборке:<br></h4>"; ТЗ.Очистить(); Для каждого СтрОператора из Операторы Цикл Для каждого ТаблицаИспользуемаяОператором из СтрОператора.ИспользуемыеТаблицы Цикл Для каждого УсловияПоТаблицеОператора из ТаблицаИспользуемаяОператором.УсловияПоТаблицам Цикл Масс=ТЗ.НайтиСтроки(Новый Структура("Реквизит",ТаблицаИспользуемаяОператором.Таблица+"."+УсловияПоТаблицеОператора.Условие)); Если Масс.Количество()=0 Тогда СтрТЗ=ТЗ.Добавить(); СтрТЗ.Реквизит=ТаблицаИспользуемаяОператором.Таблица+"."+УсловияПоТаблицеОператора.Условие; КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; ТЗ.Сортировать("Реквизит Возр"); н=0; Для каждого СтрТЗ из ТЗ Цикл н=н+1; СтрТекста=СтрТекста+Строка(н)+" "+СтрТЗ.Реквизит+"<br>"; КонецЦикла; КонецЕсли; СтрТекста=СтрТекста+"<br>"; СтрТекста=СтрТекста+"<h4>Выбираемые поля выборки:<br></h4>"; ТЗ.Очистить(); Для каждого СтрОператора из Операторы Цикл Для каждого ТаблицаИспользуемаяОператором из СтрОператора.ИспользуемыеТаблицы Цикл Для каждого ПолеТаблицыОператора из ТаблицаИспользуемаяОператором.Поля Цикл Масс=ТЗ.НайтиСтроки(Новый Структура("Реквизит",ТаблицаИспользуемаяОператором.Таблица+"."+ПолеТаблицыОператора.Поле)); Если Масс.Количество()=0 Тогда СтрТЗ=ТЗ.Добавить(); СтрТЗ.Реквизит=ТаблицаИспользуемаяОператором.Таблица+"."+ПолеТаблицыОператора.Поле; КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; ТЗ.Сортировать("Реквизит Возр"); н=0; Для каждого СтрТЗ из ТЗ Цикл н=н+1; СтрТекста=СтрТекста+Строка(н)+" "+СтрТЗ.Реквизит+"<br>"; КонецЦикла; Если КоличествоИзменений<>0 Тогда СтрТекста=СтрТекста+"<br>"; СтрТекста=СтрТекста+"<h4>Обработка перебирает строки выборки и записывает (изменяет) данные в таблицах:<br></h4>"; ТЗ.Очистить(); Для каждого СтрОператора из Операторы Цикл Для каждого ТаблицаИспользуемаяОператором из СтрОператора.ИспользуемыеТаблицы Цикл Если ТаблицаИспользуемаяОператором.ЕстьЗапись=Истина Тогда Масс=ТЗ.НайтиСтроки(Новый Структура("Реквизит",ТаблицаИспользуемаяОператором.Синоним)); Если Масс.Количество()=0 Тогда СтрТЗ=ТЗ.Добавить(); СтрТЗ.Реквизит=ТаблицаИспользуемаяОператором.Синоним; КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; ТЗ.Сортировать("Реквизит Возр"); н=0; Для каждого СтрТЗ из ТЗ Цикл н=н+1; СтрТекста=СтрТекста+Строка(н)+" "+СтрТЗ.Реквизит+"<br>"; КонецЦикла; КонецЕсли; Текст.ДобавитьСтроку(СтрТекста); Если ЭтоОбработки=Истина Тогда Текст.Записать(ИмяПапкиСЗапросами+"\8.3\"+База+"\Обработки"+Строка(НомерФайла)+".sql",КодировкаТекста.UTF8); Иначе Текст.Записать(ИмяПапкиСЗапросами+"\8.3\"+База+"\Отчеты"+Строка(НомерФайла)+".sql",КодировкаТекста.UTF8); КонецЕсли; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура СохранитьФункционалыВФайлПоЗапросу(База) н=1; ном=0; Пока Папки.Количество()<>0 Цикл СтрПапок=Папки.Получить(0); Пока СтрПапок.Файлы.Количество()<>0 Цикл СтрФайлов=СтрПапок.Файлы.Получить(0); ном=ном+1; КодМодуля.Очистить(); Операторы.Очистить(); Для каждого СтрМодулей из СтрФайлов.Модули Цикл ИмяФайла=СтрМодулей.ИмяМодуля; ЗаполнитьКодМодуляИзФайлов(); ЗаполнитьОператорыИзФайлов(); ЗаполнитьТаблицыОператоровИзФайлов(); ЗаполнитьПоляТаблицОператоровИзФайлов(); ОбновитьТаблицыОператоровИзФайлов(); КонецЦикла; Состояние(СтрФайлов.ИмяФайла); СохранитьФункционалИзФайлов(СтрПапок.База,СтрПапок.Тип,СтрПапок.ИмяПапки,СтрФайлов.ИмяФайла,н); СтрПапок.Файлы.Удалить(0); Если ном=10 Тогда н=н+1; Текст=Новый ТекстовыйДокумент; Если ЭтоОбработки=Истина Тогда Текст.Записать(ИмяПапкиСЗапросами+"\8.3\"+База+"\Обработки"+Строка(н)+".sql",КодировкаТекста.UTF8); Иначе Текст.Записать(ИмяПапкиСЗапросами+"\8.3\"+База+"\Отчеты"+Строка(н)+".sql",КодировкаТекста.UTF8); КонецЕсли; Прервать; КонецЕсли; КонецЦикла; Если СтрПапок.Файлы.Количество()=0 Тогда КомандаСистемы("move "+Символ(34)+ИмяПапкиСМодулями+"\8.3\"+База+"\"+СтрПапок.ИмяПапки+Символ(34)+" "+Символ(34)+ИмяПапкиСМодулями+"\8.3\OLD\"+База+"\"+СтрПапок.ИмяПапки+Символ(34)); Папки.Удалить(0); КонецЕсли; Если ном=10 Тогда ном=0; КонецЕсли; КонецЦикла; КонецПроцедуры
Шаг третий:
— Перебор всех файлов отчетов и обработок для создания скриншотов:
&НаСервере Функция ПодключитьВнешнююОбработку(АдресХранилища) Если ЭтоОбработки=Истина Тогда ИмяОбработки = ВнешниеОбработки.Подключить(АдресХранилища); ОбъектОбработки = ВнешниеОбработки.Создать(ИмяОбработки); Иначе ИмяОбработки = ВнешниеОтчеты.Подключить(АдресХранилища); ОбъектОбработки = ВнешниеОтчеты.Создать(ИмяОбработки); КонецЕсли; Возврат Новый Структура("ИмяОбработки,ИмяФайлаОбработки", ИмяОбработки, ОбъектОбработки.ИспользуемоеИмяФайла); КонецФункции &НаКлиенте Процедура СделатьСкриншот(ЛокальноеИмяФайла,База,Папка,ИмяФайла) АдресХранилища = ""; Попытка Результат = ПоместитьФайл(АдресХранилища, ЛокальноеИмяФайла, , Ложь); ДанныеОбработки = ПодключитьВнешнююОбработку(АдресХранилища); Если ЭтоОбработки=Истина Тогда ФормаОбработки=ПолучитьФорму("ВнешняяОбработка."+ ДанныеОбработки.ИмяОбработки +".Форма"); Иначе ФормаОбработки=ПолучитьФорму("ВнешнийОтчет."+ ДанныеОбработки.ИмяОбработки +".Форма"); КонецЕсли; ФормаОбработки.Открыть(); ИмяФайлаКартинки = ИмяПапкиССкриншотами+"\"+База+"\"+Папка+"\"+ИмяФайла+".jpg"; Shell = Новый COMОбъект("WScript.Shell"); Текст = """& {[void][Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms');" + "$size = [Windows.Forms.SystemInformation]::VirtualScreen;" + "$bitmap = new-object Drawing.Bitmap $size.width, $size.height;" + "$graphics = [Drawing.Graphics]::FromImage($bitmap);" + "$graphics.CopyFromScreen($size.location,[Drawing.Point]::Empty, $size.size);" + "$graphics.Dispose();" + "$bitmap.Save('"+ИмяФайлаКартинки+"');" + "$bitmap.Dispose()}"""; WshExec = Shell.Run("PowerShell -Command "+Текст, 0, "True");//0 - не отображать окно, "True" - возобновление работы только после завершения вызванного процесса ФормаОбработки.Закрыть(); Исключение КонецПопытки; КонецПроцедуры &НаКлиенте Процедура ПолучитьСписокОбработок() НайденныеФайлы = НайтиФайлы(ИмяПапкиССкриншотами+"\"+ИмяБазы, "*.*",Истина); Для н=0 по НайденныеФайлы.Количество()-1 Цикл ТекФайл=НайденныеФайлы.Получить(н); Если ТекФайл.ЭтоКаталог()=Истина Тогда Если Прав(ТекФайл.Путь,1+СтрДлина(ИмяБазы))=ИмяБазы+"\" Тогда НайденныеФайлы1 = НайтиФайлы(ИмяПапкиССкриншотами+"\"+ИмяБазы+"\"+ТекФайл.Имя, "*.*",Ложь); Если НайденныеФайлы1.Количество()<>0 Тогда Для н1=0 по НайденныеФайлы1.Количество()-1 Цикл ТекФайл1=НайденныеФайлы1.Получить(н1); НайденныеФайлы2 = НайтиФайлы(ИмяПапкиССкриншотами+"\"+ИмяБазы+"\"+ТекФайл.Имя, ТекФайл1.Имя+".jpg",Ложь); Если НайденныеФайлы2.Количество()=0 Тогда СделатьСкриншот(ИмяПапкиСОбработками+"\"+ИмяБазы+"\"+ТекФайл.Имя+"\"+ТекФайл1.Имя+".epf",ИмяБазы,ТекФайл.Имя,ТекФайл1.ИмяБезРасширения); КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры &НаКлиенте Процедура ПолучитьСписокОтчетов() НайденныеФайлы = НайтиФайлы(ИмяПапкиССкриншотами+"\"+ИмяБазы, "*.*",Истина); Для н=0 по НайденныеФайлы.Количество()-1 Цикл ТекФайл=НайденныеФайлы.Получить(н); Если ТекФайл.ЭтоКаталог()=Истина Тогда Если Прав(ТекФайл.Путь,1+СтрДлина(ИмяБазы))=ИмяБазы+"\" Тогда НайденныеФайлы1 = НайтиФайлы(ИмяПапкиССкриншотами+"\"+ИмяБазы+"\"+ТекФайл.Имя, "*.*",Ложь); Если НайденныеФайлы1.Количество()<>0 Тогда Для н1=0 по НайденныеФайлы1.Количество()-1 Цикл ТекФайл1=НайденныеФайлы1.Получить(н1); НайденныеФайлы2 = НайтиФайлы(ИмяПапкиССкриншотами+"\"+ИмяБазы+"\"+ТекФайл.Имя, ТекФайл1.Имя+".jpg",Ложь); Если НайденныеФайлы2.Количество()=0 Тогда СделатьСкриншот(ИмяПапкиСОбработками+"\"+ИмяБазы+"\"+ТекФайл.Имя+"\"+ТекФайл1.Имя+".erf",ИмяБазы,ТекФайл.Имя,ТекФайл1.ИмяБезРасширения); КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры
