1
0
mirror of https://github.com/bia-technologies/diff3cf.git synced 2024-11-30 08:16:58 +02:00

Начальная инициализация

This commit is contained in:
Knyazkov Alexey 2019-09-27 12:11:39 +03:00
parent df1c2b5759
commit f85c883c4c
61 changed files with 3743 additions and 0 deletions

8
.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
bdd-log.xml
*.ospx
/exec.log
*.orig
/tests.xml

22
LICENSE Normal file
View File

@ -0,0 +1,22 @@
The MIT License (MIT)
Copyright (c) 2016 Andrei Ovsiankin
Copyright (c) 2019 BIA Technologies, LLC
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

43
README.md Normal file
View File

@ -0,0 +1,43 @@
# Утилита для автоматического сравнения переопределенных в расширении модулей измененных в новом релизе поставки основной конфигурации
## Особенности данного решения
- скрипт автоматически сравнивает конфигурации и расширение, выгруженные в формате XML (выгрузка из конфигуратора)
- расширение также должно быть выгружено в формате XML
- помимо стандартных модулей реализована возможность сравнивать обработки заполнения вынесенные из форм документов в обработки
- результат сравнения сохраняется в файл отчет в формате HTML
## Установка
Установка на компьютер стандартна
- склонировать репозиторий или
- распаковать в нужный каталог архив репозитория или
- для Windows запустить [installlocalhost.bat](/installlocalhost.bat)
## Использование
Приложение позволяет сравнивать переопределенные в расширении методы, а также изменение структуры метаданных. Для каждого из этих режимов реализованы соответствующие команды.
Возможные команды:
help - Выводит справку по командам
version - Выводит версию приложения
diff - Выполняет сравнение расширения с основной конфигурацией и новой поставкой
objects - Выполняет анализ изменения объектов из основной конфигурации в новой поставке
diff - Выполняет сравнение расширения с основной конфигурацией и новой поставкой
Параметры:
<КаталогОсновнойКонфигурации> - Каталог основной конфигурации
<КаталогПоставки> - Каталог поставки
<КаталогРасширения> - Каталог расширения
<ФайлРезультат> - Файл-отчет, результат сравнения конфигураций
Перед использованием необходимо выгрузить релиз поставки в формате XML в произвольный каталог
- для сравнения обработок заполнения в свойствах обработки в поле комментарий необходимо указать переопределенный модуль в формате:
"Adopted.Documents\<Имя документа>\<Путь к модулю>\<ИмяМодуля.bsl>"
Например: Adopted.Documents\Отгул\Forms\ФормаДокумента\Ext\Form\Module.bsl
- пример вызова для получения анализа переопределенных методов:
diff3cf diff <каталог основной конфигурации> <каталог с релизом поставки> <каталог с расширением> <файл результат>.html
- пример вызова для получения анализа изменения структуры метаданных:
diff3cf objects <каталог основной конфигурации> <каталог с релизом поставки> <каталог с расширением> <файл результат>.txt

View File

@ -0,0 +1,17 @@
# language: ru
Функционал: Проверка сборки продукта
Как Пользователь
Я хочу автоматически проверять сборку моего продукта
Чтобы гарантировать возможность установку моего продукта у пользователей
Контекст: Отключение отладки в логах
Допустим Я выключаю отладку лога с именем "oscript.lib.commands"
И Я очищаю параметры команды "opm" в контексте
Сценарий: Выполнение команды без параметров
Когда Я добавляю параметр "build ." для команды "opm"
И Я выполняю команду "opm"
Тогда Вывод команды "opm" содержит "Сборка пакета завершена"
И Вывод команды "opm" не содержит "Внешнее исключение"
И Код возврата команды "opm" равен 0

View File

@ -0,0 +1,43 @@
// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd
#Использовать gitrunner
#Использовать tempfiles
#Использовать asserts
Перем БДД;
Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
БДД = КонтекстФреймворкаBDD;
ВсеШаги = Новый Массив;
ВсеШаги.Добавить("ЯСоздаюВременныйКаталогИЗапоминаюЕгоКак");
ВсеШаги.Добавить("ЯПереключаюсьВоВременныйКаталог");
Возврат ВсеШаги;
КонецФункции
// я создаю временный каталог и запоминаю его как "Алиас"
Процедура ЯСоздаюВременныйКаталогИЗапоминаюЕгоКак(Алиас) Экспорт
НовыйВременныйКаталог = ВременныеФайлы.СоздатьКаталог();
СоздатьКаталог(НовыйВременныйКаталог);
БДД.СохранитьВКонтекст(Алиас, НовыйВременныйКаталог);
КонецПроцедуры
// я переключаюсь во временный каталог "АлиасКаталога"
Процедура ЯПереключаюсьВоВременныйКаталог(АлиасКаталога)Экспорт
КаталогСкрипта = БДД.ПолучитьИзКонтекста("КаталогПроекта");
Если НЕ ЗначениеЗаполнено(КаталогСкрипта) Тогда
БДД.СохранитьВКонтекст("КаталогПроекта", ТекущийКаталог());
КонецЕсли;
КаталогРепозиториев = БДД.ПолучитьИзКонтекста(АлиасКаталога);
УстановитьТекущийКаталог(КаталогРепозиториев);
КонецПроцедуры

View File

@ -0,0 +1,30 @@
# language: ru
Функциональность: Выполнение прекоммита
Как разработчик
Я хочу быть уверенным, что diff3cf корректно сравнивает две конфигурации и расширение
Контекст:
Допустим Я очищаю параметры команды "oscript" в контексте
И я включаю отладку лога с именем "oscript.app.diff3cf"
И я создаю временный каталог и запоминаю его как "КаталогРезультат"
И я переключаюсь во временный каталог "КаталогРезультат"
Сценарий: Сравнение основной конфигурации конфигурации поставки и расширения
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os diff <КаталогПроекта>/tests/fixtures/configuration <КаталогПроекта>/tests/fixtures/release <КаталогПроекта>/tests/fixtures/exts/ADDTST report.html"
Тогда Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "Сохранение отчета..."
И Вывод команды "oscript" не содержит "Ошибка"
Сценарий: Справнение с неполным набором параметров (без файла отчета)
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os diff <КаталогПроекта>/tests/fixtures/configuration <КаталогПроекта>/tests/fixtures/release <КаталогПроекта>/tests/fixtures/exts/ADDTST"
Тогда Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "Сохранение отчета..."
И Вывод команды "oscript" содержит "ОШИБКА - Не удалось сохранить результат в"
Сценарий: Сравнение основной конфигурации и конфигурации поставки
Когда Я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os objects <КаталогПроекта>/tests/fixtures/configuration <КаталогПроекта>/tests/fixtures/release report.txt"
Тогда Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "Сохраняем результат сравнения"
И Вывод команды "oscript" не содержит "Ошибка"

View File

@ -0,0 +1,43 @@
# language: ru
Функциональность: Выполнение команды продукта
Как разработчик
Я хочу иметь возможность выполнять команды продукта
Чтобы выполнять коллективную разработку приложения для OneScript
Контекст:
Допустим Я очищаю параметры команды "oscript" в контексте
И я включаю отладку лога с именем "oscript.app.diff3cf"
# И я включаю отладку лога с именем "bdd"
Сценарий: Получение версии продукта
Когда Я выполняю команду "oscript" с параметрами "src/main.os version"
Тогда Я сообщаю вывод команды "oscript"
И Вывод команды "oscript" содержит "1.0.2"
И Вывод команды "oscript" не содержит "diff3cf v"
И Код возврата команды "oscript" равен 0
Сценарий: Получение помощи продукта
Когда Я выполняю команду "oscript" с параметрами "src/main.os help"
Тогда Вывод команды "oscript" содержит
"""
diff3cf v1.0.2
Возможные команды:
help - Выводит справку по командам
version - Выводит версию приложения
diff - Выполняет сравнение расширения с основной конфигурацией и новой поставкой
"""
И Код возврата команды "oscript" равен 0
Сценарий: Вызов исполняемого файла без параметров
Когда Я выполняю команду "oscript" с параметрами "src/main.os"
Тогда Вывод команды "oscript" содержит
"""
diff3cf v1.0.2
Возможные команды:
help - Выводит справку по командам
version - Выводит версию приложения
diff - Выполняет сравнение расширения с основной конфигурацией и новой поставкой
"""
И Код возврата команды "oscript" равен 5

12
installlocalhost.bat Normal file
View File

@ -0,0 +1,12 @@
@echo off
call del "*.ospx"
for /f %%i in ('"oscript -version"') do set result=%%i
if %result%==1.0.19.105 (
call opm build . -mf ./packagedef -out .
) else (
call opm build -m ./packagedef -o .
)
call opm install -f *.ospx

14
packagedef Normal file
View File

@ -0,0 +1,14 @@
ПутьКСценариюПараметров = ОбъединитьПути(ТекущийСценарий().Каталог, "src", "Модули", "ПараметрыПриложения.os");
ПараметрыСистемы_ЛокальнаяВерсия = ЗагрузитьСценарий(ПутьКСценариюПараметров);
ИмяПродукта = НРег(ПараметрыСистемы_ЛокальнаяВерсия.ИмяПродукта());
Описание.Имя(ИмяПродукта)
.ВерсияСреды("1.0.21")
.Версия(ПараметрыСистемы_ЛокальнаяВерсия.ВерсияПродукта())
.ЗависитОт("logos", "1.2.0")
.ЗависитОт("cmdline", "1.0.0")
.ВключитьФайл("src")
.ВключитьФайл("LICENSE")
.ВключитьФайл("README.md")
.ИсполняемыйФайл("src/main.os", ИмяПродукта);

23
src/main.os Normal file
View File

@ -0,0 +1,23 @@
///////////////////////////////////////////////////////////////////////////////
//
// Приложение генерации отчета об измененных объектах, переопределенных в расширении
//
// (с) BIA Technologies, LLC
//
///////////////////////////////////////////////////////////////////////////////
#Использовать "."
///////////////////////////////////////////////////////////////////////////////
Приложение = МенеджерПриложения.Инициализировать(ПараметрыПриложения);
Попытка
Приложение.ЗавершитьРаботуПриложения(Приложение.ЗапуститьВыполнение());
Исключение
Приложение.ЗавершитьРаботуПриложенияСОшибкой(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;

View File

@ -0,0 +1,73 @@
///////////////////////////////////////////////////////////////////////////////
//
// Служебный модуль с реализацией работы <ГенераторОтчета>
//
// (с) BIA Technologies, LLC
//
///////////////////////////////////////////////////////////////////////////////
// Сохраняет результат сравнения
//
// Параметры:
// РезультатСравнения - Структура - Результат сравнения конфигураций и расширения
// ИмяФайлаРезультата - Строка - Полное имя файла, в который будет записан результат сравнения
// Лог - log-manager - Экземпляр класса логирования
// ФорматРезультата - Строка - Необязательный, пока реализован только "HTML" формат
//
Процедура СохранитьРезультат(РезультатСравнения, ИмяФайлаРезультата, Лог, ФорматРезультата = "HTML") Экспорт
Если ФорматРезультата = "HTML" Тогда
Попытка
ГенераторОтчетаHTML.СохранитьРезультат(РезультатСравнения, ИмяФайлаРезультата, Лог);
Исключение
ОбработкаИсключенияЗаписи(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ИмяФайлаРезультата, Лог);
КонецПопытки;
ИначеЕсли ФорматРезультата = "TXT" Тогда
ТекстРезультат = Новый ТекстовыйДокумент();
ТекстРезультат.ДобавитьСтроку(СтрШаблон("Результат сравнения изменений в структуре объектов:
|%1
|%2
|
|", РезультатСравнения.РодительПуть, РезультатСравнения.ПоставкаПуть));
Для каждого ЭлементПроекта Из РезультатСравнения.Типы Цикл
ТекстРезультат.ДобавитьСтроку(ЭлементПроекта);
КонецЦикла;
Если ЗначениеЗаполнено(ИмяФайлаРезультата) Тогда
Попытка
ТекстРезультат.Записать(ИмяФайлаРезультата, КодировкаТекста.UTF8NoBOM);
Исключение
ОбработкаИсключенияЗаписи(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ИмяФайлаРезультата, Лог);
КонецПопытки;
Иначе
Лог.Информация(ТекстРезультат.ПолучитьТекст());
КонецЕсли;
Иначе
Лог.Ошибка("Неверный формат результата");
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаИсключенияЗаписи(ПредставлениеОшибки, ИмяФайлаРезультата, Лог)
ТекстОшибки = СтрШаблон("Не удалось сохранить результат в '%1' по причине:
|%3", ИмяФайлаРезультата, ПредставлениеОшибки);
Лог.Ошибка(ТекстОшибки);
ВызватьИсключение ТекстОшибки;
КонецПроцедуры

View File

@ -0,0 +1,33 @@
///////////////////////////////////////////////////////////////////////////////
//
// Служебный модуль с реализацией работы команды version
//
///////////////////////////////////////////////////////////////////////////////
// настрока команды
//
// Параметры:
// Команда - ОписаниеКоманды - Соответствие ключей командной строки и их значений
// Приложение - Модуль - Модуль менеджера приложения
//
Процедура НастроитьКоманду(Знач Команда, Знач Парсер) Экспорт
КонецПроцедуры // НастроитьКоманду
// Выполняет логику команды
//
// Параметры:
// ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений
// Приложение - Модуль - Модуль менеджера приложения
//
Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач Приложение) Экспорт
Лог = Приложение.ПолучитьЛог();
Сообщить(Приложение.ВерсияПродукта());
Лог.Отладка("Вывод версии приложения");
Возврат Приложение.РезультатыКоманд().Успех;
КонецФункции // ВыполнитьКоманду

View File

@ -0,0 +1,79 @@
///////////////////////////////////////////////////////////////////////////////
//
// Служебный модуль с реализацией работы команды <objects>
//
// (с) BIA Technologies, LLC
//
///////////////////////////////////////////////////////////////////////////////
Перем РодительПуть;
Перем ПоставкаПуть;
Перем ФайлРезультатИмя;
///////////////////////////////////////////////////////////////////////////////
// настрока команды
//
// Параметры:
// Команда - ОписаниеКоманды - Соответствие ключей командной строки и их значений
// Приложение - Модуль - Модуль менеджера приложения
//
Процедура НастроитьКоманду(Знач Команда, Знач Парсер) Экспорт
// Добавление параметров команды
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "КаталогОсновнойКонфигурации", "Каталог основной конфигурации");
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "КаталогПоставки", "Каталог поставки");
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "ФайлРезультат",
"Файл-отчет, результат сравнения конфигураций в формате 'txt'.
|Необязательный, если не указан результат выводится в консоли.");
КонецПроцедуры // НастроитьКоманду
// Выполняет логику команды
//
// Параметры:
// ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений
// Приложение - Модуль - Модуль менеджера приложения
//
Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач Приложение) Экспорт
Лог = Приложение.ПолучитьЛог();
РодительПуть = ПараметрыКоманды["КаталогОсновнойКонфигурации"];
ПоставкаПуть = ПараметрыКоманды["КаталогПоставки"];
ФайлРезультатИмя = ПараметрыКоманды["ФайлРезультат"];
Если Не ПроверитьКаталог(РодительПуть, "Каталог основной конфигурации", Лог)
ИЛИ Не ПроверитьКаталог(ПоставкаПуть, "Каталог поставки", Лог) Тогда
Возврат Приложение.РезультатыКоманд().НеверныеПараметры;
КонецЕсли;
Лог.Информация("Получаем результат сравнения");
РезультатСравнения = АнализаторОбъектов.ВыполнитьСравнениеОбъектов(РодительПуть, ПоставкаПуть, Лог);
Лог.Информация("Сохраняем результат сравнения: %1", ФайлРезультатИмя);
Генератор = Новый ГенераторОтчета;
Генератор.СохранитьРезультат(РезультатСравнения, ФайлРезультатИмя, Лог, "TXT");
// При успешном выполнении возвращает код успеха
Возврат Приложение.РезультатыКоманд().Успех;
КонецФункции // ВыполнитьКоманду
///////////////////////////////////////////////////////////////////////////////
Функция ПроверитьКаталог(КаталогПроверки, НазначениеКаталога, Лог)
ФайлКаталогПроверки = Новый Файл(КаталогПроверки);
Если НЕ ФайлКаталогПроверки.Существует() ИЛИ ФайлКаталогПроверки.ЭтоФайл() Тогда
Лог.Ошибка("%1 '%2' не существует или это файл", НазначениеКаталога, РодительПуть);
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции

View File

@ -0,0 +1,47 @@
///////////////////////////////////////////////////////////////////////////////
//
// Служебный модуль с реализацией работы команды help
//
///////////////////////////////////////////////////////////////////////////////
// настрока команды
//
// Параметры:
// Команда - ОписаниеКоманды - Соответствие ключей командной строки и их значений
// Приложение - Модуль - Модуль менеджера приложения
//
Процедура НастроитьКоманду(Знач Команда, Знач Парсер) Экспорт
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "Команда");
КонецПроцедуры // НастроитьКоманду
// Выполняет логику команды
//
// Параметры:
// ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений
// Приложение - Модуль - Модуль менеджера приложения
//
Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач Приложение) Экспорт
Лог = Приложение.ПолучитьЛог();
КомандаДляСправки = ПараметрыКоманды["Команда"];
Если КомандаДляСправки = Неопределено Тогда
Приложение.ВывестиСправкуПоКомандам();
Лог.Отладка("Вывод справки по командам");
Иначе
Приложение.ВывестиСправкуПоКоманде(КомандаДляСправки);
Лог.Отладка(СтрШаблон("Вывод справки по команде %1", КомандаДляСправки));
КонецЕсли;
Возврат Приложение.РезультатыКоманд().Успех;
КонецФункции // ВыполнитьКоманду

View File

@ -0,0 +1,90 @@
///////////////////////////////////////////////////////////////////////////////
//
// Служебный модуль с реализацией работы команды <diff>
//
// (с) BIA Technologies, LLC
//
///////////////////////////////////////////////////////////////////////////////
Перем РодительПуть;
Перем ПоставкаПуть;
Перем РасширениеПуть;
Перем ФайлРезультатИмя;
///////////////////////////////////////////////////////////////////////////////
// настрока команды
//
// Параметры:
// Команда - ОписаниеКоманды - Соответствие ключей командной строки и их значений
// Приложение - Модуль - Модуль менеджера приложения
//
Процедура НастроитьКоманду(Знач Команда, Знач Парсер) Экспорт
// Добавление параметров команды
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "КаталогОсновнойКонфигурации", "Каталог основной конфигурации");
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "КаталогПоставки", "Каталог поставки");
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "КаталогРасширения", "Каталог расширения");
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "ФайлРезультат", "Файл-отчет, результат сравнения конфигураций");
КонецПроцедуры // НастроитьКоманду
// Выполняет логику команды
//
// Параметры:
// ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений
// Приложение - Модуль - Модуль менеджера приложения
//
Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач Приложение) Экспорт
Лог = Приложение.ПолучитьЛог();
РодительПуть = ПараметрыКоманды["КаталогОсновнойКонфигурации"];
ПоставкаПуть = ПараметрыКоманды["КаталогПоставки"];
РасширениеПуть = ПараметрыКоманды["КаталогРасширения"];
Если Не ПроверитьКаталог(РодительПуть, "Каталог основной конфигурации", Лог)
ИЛИ Не ПроверитьКаталог(ПоставкаПуть, "Каталог поставки", Лог)
ИЛИ Не ПроверитьКаталог(РасширениеПуть, "Каталог расширения", Лог) Тогда
Возврат Приложение.РезультатыКоманд().НеверныеПараметры;
КонецЕсли;
РаздлительПути = ПолучитьРазделительПути();
РасширениеПуть = ?(СтрЗаканчиваетсяНа(РасширениеПуть, РаздлительПути),
РасширениеПуть, РасширениеПуть + РаздлительПути);
ФайлРезультатИмя = ПараметрыКоманды["ФайлРезультат"];
Лог.Информация("Получаем результат сравнения");
РезультатСравнения = РезультатСравненияРасширения.ПолучитьРезультатСравнения(
РодительПуть,
ПоставкаПуть,
РасширениеПуть,
Лог);
Лог.Информация("Сохраняем результат сравнения: %1", ФайлРезультатИмя);
Генератор = Новый ГенераторОтчета;
Генератор.СохранитьРезультат(РезультатСравнения, ФайлРезультатИмя, Лог, "HTML");
// При успешном выполнении возвращает код успеха
Возврат Приложение.РезультатыКоманд().Успех;
КонецФункции // ВыполнитьКоманду
///////////////////////////////////////////////////////////////////////////////
Функция ПроверитьКаталог(КаталогПроверки, НазначениеКаталога, Лог)
ФайлКаталогПроверки = Новый Файл(КаталогПроверки);
Если НЕ ФайлКаталогПроверки.Существует() ИЛИ ФайлКаталогПроверки.ЭтоФайл() Тогда
Лог.Ошибка("%1 '%2' не существует или это файл", НазначениеКаталога, РодительПуть);
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции

View File

@ -0,0 +1,345 @@
///////////////////////////////////////////////////////////////////
//
// Модуль разбора файлов конфигурации
//
// (с) BIA Technologies, LLC
//
///////////////////////////////////////////////////////////////////
Перем РасширениеПуть;
// Функция возвращает префикс расширения
//
// Параметры:
// ИмяФайлаКонфигурации - Строка - Полное имя файла configuration.xml расширения
//
// Возвращаемое значение:
// Строка - префикс расширения
//
Функция ПрочитатьПрефиксРасширения(ИмяФайлаКонфигурации) Экспорт
Результат = "";
ФайлОписания = Новый ТекстовыйДокумент;
ФайлОписания.Прочитать(ИмяФайлаКонфигурации, КодировкаТекста.UTF8NoBOM);
ТекстОписания = ФайлОписания.ПолучитьТекст();
ПаттернПрефикса = "<NamePrefix>([\w\W]*?)<\/NamePrefix>";
Регексп = Новый РегулярноеВыражение(ПаттернПрефикса);
Регексп.Многострочный = Истина;
Регексп.ИгнорироватьРегистр = Истина;
НайденныеСтроки = Регексп.НайтиСовпадения(ТекстОписания);
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
Результат = НайденнаяСтрока.Группы[1].Значение;
КонецЦикла;
Возврат Результат;
КонецФункции
// возвращает массив описаний методов файла bsl
//
// Параметры:
// ФайлМодуля - Файл - Файл BSL, методы которого нужно получить
// Префикс - Строка - Префикс используемого расширения
//
// Возвращаемое значение:
// Массив - массив структур, результат разбора метода на модули
//
Функция ПрочитатьМетодыМодуля(ФайлМодуля, Префикс = "") Экспорт
Результат = Новый Массив();
ФайлОписания = Новый ТекстовыйДокумент;
ФайлОписания.Прочитать(ФайлМодуля.ПолноеИмя, КодировкаТекста.UTF8NoBOM);
ТекстОписания = ФайлОписания.ПолучитьТекст();
ПаттернМетода = "^[\s]*?(Процедура|Функция)[\s]*([\w\W]*?[\(])[\w\W]*?(КонецПроцедуры|КонецФункции)";
Регексп = Новый РегулярноеВыражение(ПаттернМетода);
Регексп.Многострочный = Истина;
Регексп.ИгнорироватьРегистр = Истина;
НайденныеСтроки = Регексп.НайтиСовпадения(ТекстОписания);
Директивы = ПолучитьДирективыМетодов(ФайлМодуля);
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
ТипМетода = НайденнаяСтрока.Группы[1].Значение;
ИмяМетода = СокрЛП(СтрЗаменить(НайденнаяСтрока.Группы[2].Значение, "(", ""));
ДирективаМетода = Директивы[ИмяМетода];
Директива = "";
ИмяМетодаБезПрефикса = ИмяМетода;
ДлинаПередПосле = 5; // длина слов 'Перед' и 'После'
ДлинаВместо = 6; // длина слова 'Вместо'
Если ДирективаМетода <> Неопределено Тогда
ИмяМетодаБезПрефикса = ДирективаМетода.ИмяМетода;
Директива = ДирективаМетода.Директива;
ИначеЕсли Не ПустаяСтрока(Префикс) Тогда
ИмяМетодаБезПрефикса = ?(СтрНачинаетсяС(ИмяМетода, Префикс), Сред(ИмяМетода, СтрДлина(Префикс) + 1), ИмяМетода);
Если СтрЗаканчиваетсяНа(ВРег(ИмяМетодаБезПрефикса), ВРег("Перед"))
ИЛИ СтрЗаканчиваетсяНа(ВРег(ИмяМетодаБезПрефикса), ВРег("После")) Тогда
Директива = Прав(ИмяМетодаБезПрефикса, ДлинаПередПосле);
ИмяМетодаБезПрефикса = Лев(ИмяМетодаБезПрефикса, СтрДлина(ИмяМетодаБезПрефикса) - ДлинаПередПосле);
ИначеЕсли СтрЗаканчиваетсяНа(ВРег(ИмяМетодаБезПрефикса), ВРег("Вместо")) Тогда
Директива = Прав(ИмяМетодаБезПрефикса, ДлинаВместо);
ИмяМетодаБезПрефикса = Лев(ИмяМетодаБезПрефикса, СтрДлина(ИмяМетодаБезПрефикса) - ДлинаВместо);
КонецЕсли;
КонецЕсли;
ТелоМетода = ?(Директива = "", "", "&" + Директива + Символы.ПС) +
СокрЛП(НайденнаяСтрока.Группы[0].Значение);
Результат.Добавить(СтандартнаяСтруктураРезультата(ТипМетода, ИмяМетода, ИмяМетодаБезПрефикса, ТелоМетода));
КонецЦикла;
Возврат Результат;
КонецФункции
Функция СтандартнаяСтруктураРезультата(ТипМетода, ИмяМетода, ИмяМетодаБезПрефикса, ТелоМетода)
Результат = Новый Структура();
Результат.Вставить("ТипМетода", ТипМетода);
Результат.Вставить("ИмяМетода", ИмяМетода);
Результат.Вставить("ИмяМетодаБезПрефикса", ИмяМетодаБезПрефикса);
Результат.Вставить("ТелоМетода", ТелоМетода);
Возврат Результат;
КонецФункции
Функция ПолучитьДирективыМетодов(ФайлМодуля)
Результат = Новый Соответствие;
ФайлОписания = Новый ТекстовыйДокумент;
ФайлОписания.Прочитать(ФайлМодуля.ПолноеИмя, КодировкаТекста.UTF8NoBOM);
ТекстОписания = ФайлОписания.ПолучитьТекст();
ПаттернМетода = "^[\s]*?\&(Перед|Вместо|После)[\s]*\(\""([\w\W]*?)\""\)*\s(?:Процедура|Функция)[\s]*([\w\W]*?)[\(]";
Регексп = Новый РегулярноеВыражение(ПаттернМетода);
Регексп.Многострочный = Истина;
Регексп.ИгнорироватьРегистр = Истина;
НайденныеСтроки = Регексп.НайтиСовпадения(ТекстОписания);
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
Результат.Вставить(
НайденнаяСтрока.Группы[3].Значение,
Новый Структура("Директива, ИмяМетода",
НайденнаяСтрока.Группы[1].Значение,
НайденнаяСтрока.Группы[2].Значение
)
);
КонецЦикла;
Возврат Результат;
КонецФункции
// Возвращает массив структур с описанием переопределенных объектов
//
// Возвращаемое значение:
// Массив - массив структур с описанием предопределенных объектов
//
Функция ПолучитьПереопределенныеОбъекты() Экспорт
Результат = Новый Массив();
Для Каждого ТипОбъектов Из ТипыОбъектов.ОбъектыКонфигурации Цикл
ФайлыОбъектов = ПолучитьФайлыОбъектов(ТипОбъектов);
РезультатОбъекты = Новый Массив();
Для Каждого ФайлОбъекта Из ФайлыОбъектов Цикл
ДобавитьПереопределенныйОбъект(ТипОбъектов, ФайлОбъекта, РезультатОбъекты);
КонецЦикла;
Результат.Добавить(Новый Структура("Тип, Объекты", ТипОбъектов, РезультатОбъекты));
КонецЦикла;
Возврат Результат;
КонецФункции
// Получает методы конфигурации и сопоставляет с методами расширения для переопределенных объектов
//
// Параметры:
// ФайлМодуляРасширения - Файл - Файл модуля расширения
// ФайлМодуля - Структура - Свойства файла модуля, включая его методы, сюда добавляется сопостовление методов
// ОсновнаяКонфигурацияПуть - Строка - Расположение основной конфигурации
// ИмяКонфигурации - Строка - Имя (роль) конфигурации (например: "Родитель" или "Поставка")
//
Процедура ПрочитатьМетодыОсновнойКонфигурации(
ФайлМодуляРасширения,
ФайлМодуля,
ОсновнаяКонфигурацияПуть,
ИмяКонфигурации) Экспорт
ИмяФайлаМодуляКонфигурации = "";
Если ФайлМодуля.Свойство("ИмяПереопределяемого", ИмяФайлаМодуляКонфигурации) Тогда
ИмяФайлаМодуляКонфигурации = ОбъединитьПути(ОсновнаяКонфигурацияПуть, ИмяФайлаМодуляКонфигурации);
Иначе
ИмяФайлаМодуляКонфигурации = ОбъединитьПути(
ОсновнаяКонфигурацияПуть,
Сред(ФайлМодуляРасширения.ПолноеИмя, СтрДлина(РасширениеПуть) + 1)
);
КонецЕсли;
ФайлМодуляКонфигурации = Новый Файл(ИмяФайлаМодуляКонфигурации);
ФайлМодуля.Вставить(ИмяКонфигурации, ФайлМодуляКонфигурации.Существует());
Если ФайлМодуля[ИмяКонфигурации] Тогда
СопоставитьМетодыРасширенияИКонфигурации(ПрочитатьМетодыМодуля(ФайлМодуляКонфигурации), ФайлМодуля, ИмяКонфигурации);
КонецЕсли;
КонецПроцедуры
// Устанавливает значение переменной "РасширениеПуть"
//
Процедура УстановитьПуть(Путь) Экспорт
РасширениеПуть = Путь;
КонецПроцедуры
// Получает файлы объектов расширения
//
// Возвращаемое значение:
// Массив - массив файлов XML
//
Функция ПолучитьФайлыОбъектов(ТипОбъектов) Экспорт
КаталогОбъектов = ОбъединитьПути(РасширениеПуть, ТипОбъектов);
Файлы = НайтиФайлы(КаталогОбъектов, "*.xml");
Возврат Файлы;
КонецФункции
// Получает файлы модулей расширения
//
// Возвращаемое значение:
// Массив - массив файлов BSL
//
Функция ПолучитьФайлыМодулей(ТипОбъектов, ИмяОбъекта) Экспорт
КаталогОбъектов = ОбъединитьПути(РасширениеПуть, ТипОбъектов, ИмяОбъекта);
Файлы = НайтиФайлы(КаталогОбъектов, "*.bsl", Истина);
Возврат Файлы;
КонецФункции
///////////////////////////////////////////////////////////////////
Функция ПрочитатьНаследованиеОбъекта(ФайлОбъекта)
Результат = Новый Структура("Наследование, Значение", Ложь, "");
ФайлОписания = Новый ТекстовыйДокумент;
ФайлОписания.Прочитать(ФайлОбъекта.ПолноеИмя, КодировкаТекста.UTF8NoBOM);
ТекстОписания = ФайлОписания.ПолучитьТекст();
ПаттернНаследование = "(?:<ObjectBelonging>Adopted<\/ObjectBelonging>|<Comment>Adopted.([\w\W]*?)<\/Comment>)";
Регексп = Новый РегулярноеВыражение(ПаттернНаследование);
Регексп.Многострочный = Истина;
Регексп.ИгнорироватьРегистр = Истина;
НайденныеСтроки = Регексп.НайтиСовпадения(ТекстОписания);
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
Результат.Наследование = Истина;
Результат.Значение = НайденнаяСтрока.Группы[1].Значение;
КонецЦикла;
Возврат Результат;
КонецФункции
Процедура СопоставитьМетодыРасширенияИКонфигурации(МетодыМодуляКонфигурации, ФайлМодуля, ИмяКонфигурации)
Для каждого Метод Из МетодыМодуляКонфигурации Цикл // обход найденных методов
Для каждого МетодРасширения Из ФайлМодуля.Методы Цикл // обход существующих переопределенных методов
Если Метод.ИмяМетодаБезПрефикса = МетодРасширения.ИмяМетодаБезПрефикса Тогда
МетодРасширения.Вставить(ИмяКонфигурации, Метод.ТелоМетода);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
// Добавлят в массив объект конфигурации, если он переопределен. Объект может состоять из нескольких файлов.
//
// Параметры:
// ТипОбъектов - Строка - Тип объекта конфиурации (Catalogs, Documents и т.д.)
// ФайлОбъекта - Файл - XML файл объекта конфигурации
// РезультатОбъекты - Массив - в массив добавляются структуры с описанием файлов объекта
//
Процедура ДобавитьПереопределенныйОбъект(ТипОбъектов, ФайлОбъекта, РезультатОбъекты)
Переопределение = ПрочитатьНаследованиеОбъекта(ФайлОбъекта);
Если Переопределение.Наследование Тогда
ДобОбъект = Новый Структура("Тип, Имя", ТипОбъектов, ФайлОбъекта.ИмяБезРасширения);
ФайлыМодулей = ПолучитьФайлыМодулей(ДобОбъект.Тип, ДобОбъект.Имя);
Если ФайлыМодулей.Количество() Тогда
МассивФайлов = Новый Массив;
Для Каждого ФайлМодуля Из ФайлыМодулей Цикл
ФайлСтруктура = Новый Структура("ФайлМодуля", ФайлМодуля);
Если Не ПустаяСтрока(Переопределение.Значение) И ФайлМодуля.Имя = "ObjectModule.bsl" Тогда
ФайлСтруктура.Вставить("ИмяПереопределяемого", Переопределение.Значение);
КонецЕсли;
МассивФайлов.Добавить(ФайлСтруктура);
КонецЦикла;
ДобОбъект.Вставить("Модули", МассивФайлов);
РезультатОбъекты.Добавить(ДобОбъект);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
///////////////////////////////////////////////////////////////////
Процедура ПриСозданииОбъекта(Путь = Неопределено)
УстановитьПуть(Путь);
КонецПроцедуры

View File

@ -0,0 +1,265 @@
///////////////////////////////////////////////////////////////////////////////
//
// Служебный модуль получения результата сравнения объектов основной конфы и поставки
//
// (с) BIA Technologies, LLC
//
///////////////////////////////////////////////////////////////////////////////
// Сравнивает три конфигурации - Родитель, Поставка и Расширение
//
// Параметры:
// РодительПуть - Строка - Каталог конфигурации Родитель
// ПоставкаПуть - Строка - Каталог конфигурации Поставка
// Лог - log-manager - Экземпляр класса логирования
//
// Возвращаемое значение:
// Структура - результат сравнения
//
Функция ВыполнитьСравнениеОбъектов(РодительПуть, ПоставкаПуть, Лог) Экспорт
РезультатОписание = Новый Структура();
РезультатОписание.Вставить("РодительПуть", РодительПуть);
РезультатОписание.Вставить("ПоставкаПуть", ПоставкаПуть);
РезультатОписание.Вставить("Типы", АнализГруппОбъектов(
"AccountingRegisters
|AccumulationRegisters
|CalculationRegisters
|Catalogs
|ChartsOfCalculationTypes
|ChartsOfCharacteristicTypes
|Documents
|InformationRegisters", РезультатОписание));
Возврат РезультатОписание;
КонецФункции
Функция АнализГруппОбъектов(ГруппыОбъектов, Описание)
МассивРезультат = Новый Массив();
МассивГрупп = СтрРазделить(ГруппыОбъектов, Символы.ПС);
Для Каждого ГруппаОбъектов Из МассивГрупп Цикл
АнализОбъектов(СокрЛП(ГруппаОбъектов), МассивРезультат, Описание);
КонецЦикла;
Возврат МассивРезультат;
КонецФункции
Процедура АнализОбъектов(ГруппаОбъектов, МассивРезультат, Описание)
Файлы = ПолучитьФайлыОбъектов(ГруппаОбъектов, Описание);
Для Каждого Файл Из Файлы Цикл
ДанныеОбъектаПроекта = АнализФайлаОМД(Файл, Описание.РодительПуть);
ДанныеОбъектаПоставки = Неопределено;
ИмяФайлаПоставки = ОбъединитьПути(Описание.ПоставкаПуть, ДанныеОбъектаПроекта.ОтносительныйПуть);
ФайлЧтение = Новый Файл(ИмяФайлаПоставки);
Если ФайлЧтение.Существует() Тогда
ДанныеОбъектаПоставки = АнализФайлаОМД(ФайлЧтение, Описание.ПоставкаПуть);
КонецЕсли;
// Сравнение
Для Каждого ПолеПроекта Из ДанныеОбъектаПроекта.Поля Цикл
Если ДанныеОбъектаПоставки <> Неопределено Тогда
// поиск в поставке
ПолеЕсть = ПоискВПоставке(ПолеПроекта, ДанныеОбъектаПоставки.Поля, МассивРезультат, ДанныеОбъектаПроекта);
Если Не ПолеЕсть Тогда
МассивРезультат.Добавить(
ДанныеОбъектаПроекта.ОтносительныйПуть + " : " +
ПолеПроекта.ИмяПоля +
" : Удалено");
КонецЕсли;
Иначе
МассивРезультат.Добавить(
ДанныеОбъектаПроекта.ОтносительныйПуть + " : " +
" : Удалено в поставке");
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Функция ПоискВПоставке(ПолеПроекта, ПоляПоставки, МассивРезультат, ДанныеОбъектаПроекта)
Результат = Ложь;
Для Каждого ПолеПоставки Из ПоляПоставки Цикл
Если ПолеПроекта.ИмяПоля = ПолеПоставки.ИмяПоля Тогда
Если ПолеПроекта.Тип <> ПолеПоставки.Тип Тогда
МассивРезультат.Добавить(
ДанныеОбъектаПроекта.ОтносительныйПуть + " : " +
ПолеПроекта.ИмяПоля +
" : Изменен тип");
КонецЕсли;
Результат = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция АнализФайлаОМД(ФайлОбъекта, ПутьПроекта)
//////////////////////////////////////////
ОписаниеОбъекта = Новый Структура;
ОписаниеОбъекта.Вставить("ПолноеИмя", ФайлОбъекта.ПолноеИмя);
ОписаниеОбъекта.Вставить("ИмяОбъекта", ФайлОбъекта.ИмяБезРасширения);
ОписаниеОбъекта.Вставить("ОтносительныйПуть", ПолучитьОтносительныйПуть(ПутьПроекта, ФайлОбъекта.ПолноеИмя));
//////////////////////////////////////////
ТекстОписания = МенеджерПриложения.ПрочитатьФайл(ФайлОбъекта);
ПаттернОсновной = "<MetaDataObject[\w\W]*?<Name>([\w\W]*?)<\/Name>[\w\W]*?(?:<TabularSection|<\/MetaDataObject>)";
ПаттернТЧ = "<TabularSection[\w\W]*?<Name>([\w\W]*?)<\/Name>[\w\W]*?<\/TabularSection>";
АнализОписанияОбъекта(ТекстОписания, ПаттернОсновной, "", ОписаниеОбъекта);
АнализОписанияОбъекта(ТекстОписания, ПаттернТЧ, "ТабличнаяЧасть.", ОписаниеОбъекта);
Возврат ОписаниеОбъекта;
КонецФункции
Процедура АнализОписанияОбъекта(ТекстОписания, Паттерн, Префикс, ОписаниеОбъекта)
Регексп = МенеджерПриложения.ПолучитьРегексп(Паттерн);
НайденныеСтроки = Регексп.НайтиСовпадения(ТекстОписания);
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
АнализРеквизитов(
НайденнаяСтрока.Группы[0].Значение,
ОписаниеОбъекта,
?(Префикс = "", "", Префикс + НайденнаяСтрока.Группы[1].Значение + "."));
КонецЦикла;
КонецПроцедуры
Процедура АнализРеквизитов(ТекстОписания, ОписаниеОбъекта, ПрефиксПоля = "")
СтрокаВидыПолей = "Dimension;Resource;Attribute";
ВидыПолей = СтрРазделить(СтрокаВидыПолей, ";");
ПаттернПоля = "<%1[\w\W]*?<Name>([\w\W]*?)<\/Name>[\w\W]*?<\/%1>";
ИндексОбъекта = 0;
Если Не ОписаниеОбъекта.Свойство("Поля") Тогда
ОписаниеОбъекта.Вставить("Поля", Новый Массив());
КонецЕсли;
Для Каждого ВидПоля Из ВидыПолей Цикл
Регексп = МенеджерПриложения.ПолучитьРегексп(СтрШаблон(ПаттернПоля, ВидПоля));
НайденныеСтроки = Регексп.НайтиСовпадения(ТекстОписания);
// цикл по измерениям/ресурсам/реквизитам
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
ОписаниеПоля = Новый Структура;
ОписаниеПоля.Вставить("ВидПоля", ВидПоля);
ОписаниеПоля.Вставить("ИмяПоля", ПрефиксПоля + НайденнаяСтрока.Группы[1].Значение);
ОписаниеПоля.Вставить("ТекстОписание", НайденнаяСтрока.Группы[0].Значение);
ОписаниеПоля.Вставить("Тип", АнализТипаПоля(ОписаниеОбъекта, ОписаниеПоля));
ОписаниеОбъекта.Поля.Добавить(ОписаниеПоля);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Функция АнализТипаПоля(ОписаниеОбъекта, ОписаниеПоля)
Результат = 0;
ПаттернТипа =
"<Properties>" +
"[\w\W]*?<Type>([\w\W]*?)<\/Type>" +
"[\w\W]*?<\/Properties>";
ПаттернСоставаТипа =
"(?:<v8:Type>|<v8:TypeSet>)([\w\W]*?)<\/v8:Type";
Регексп = МенеджерПриложения.ПолучитьРегексп(ПаттернТипа);
НайденныеСтроки = Регексп.НайтиСовпадения(ОписаниеПоля.ТекстОписание);
ОписаниеТипа = "";
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
РегекспТипа = МенеджерПриложения.ПолучитьРегексп(ПаттернСоставаТипа);
СтрокиСоставаТипа = РегекспТипа.НайтиСовпадения(НайденнаяСтрока.Группы[1].Значение);
Для Каждого СтрокаСоставаТипа Из СтрокиСоставаТипа Цикл
//////////////////////////////////////////
ОписаниеТипа = ОписаниеТипа +
?(ОписаниеТипа = "", "", Символы.ПС) +
СтрокаСоставаТипа.Группы[1].Значение;
//////////////////////////////////////////
КонецЦикла;
КонецЦикла;
Возврат ОписаниеТипа;
КонецФункции
Функция ПолучитьФайлыОбъектов(ТипОбъектов, Описание)
КаталогОбъектов = ОбъединитьПути(Описание.РодительПуть, ТипОбъектов);
Возврат НайтиФайлы(КаталогОбъектов, "*.xml");
КонецФункции
Функция ПолучитьОтносительныйПуть(РасположениеПроекта, ПолноеИмяФайла)
СоставРП = СтрРазделить(РасположениеПроекта, ПолучитьРазделительПути(), Ложь);
СоставПуть = СтрРазделить(ПолноеИмяФайла, ПолучитьРазделительПути(), Ложь);
Результат = "";
Для Сч = СоставРП.Количество() По СоставПуть.ВГраница() Цикл
Результат = ОбъединитьПути(Результат, СоставПуть[Сч]);
КонецЦикла;
Возврат Результат;
КонецФункции

View File

@ -0,0 +1,390 @@
///////////////////////////////////////////////////////////////////
//
// Модуль генератора отчета в формате HTML
//
// (с) BIA Technologies, LLC
//
///////////////////////////////////////////////////////////////////
Перем РасширениеПуть;
Перем РодительПуть;
Перем ПоставкаПуть;
Перем Лог;
// Сохраняет результат в формате HTML
//
// Параметры:
// РезультатСравнения - Структура - Результат сравнения конфигураций и расширения
// ИмяФайлаРезультата - Строка - Полное имя файла, в который будет записан результат сравнения
// Лог - log-manager - Экземпляр класса логирования
//
Процедура СохранитьРезультат(РезультатСравнения, ИмяФайлаРезультата, ПараметрЛог) Экспорт
РодительПуть = РезультатСравнения.РодительПуть;
ПоставкаПуть = РезультатСравнения.ПоставкаПуть;
РасширениеПуть = РезультатСравнения.РасширениеПуть;
Лог = ПараметрЛог;
СоответствиеШаблонов = Новый Соответствие();
СоответствиеШаблонов.Вставить("Шаблон", ТекстШаблон());
СоответствиеШаблонов.Вставить("Блок", ТекстБлок());
СоответствиеШаблонов.Вставить("Таблица", ТекстТаблица());
НаследованиеБлоков = Новый Соответствие();
НаследованиеБлоков.Вставить("Корень", Новый Структура("Блок, Объекты", "Тип", "Объекты"));
НаследованиеБлоков.Вставить("Тип", Новый Структура("Блок, Объекты", "Объект", "Модули"));
НаследованиеБлоков.Вставить("Объект", Новый Структура("Блок, Объекты", "Модуль", "Методы"));
Лог.Информация("Начало формирования отчета...");
Попытка
ТекстРезультат = ВывестиБлок(РезультатСравнения.Типы, "Корень", СоответствиеШаблонов, НаследованиеБлоков);
Исключение
Лог.Ошибка(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
Лог.Информация("Сохранение отчета...");
ФайлРезультат = Новый ТекстовыйДокумент;
ФайлРезультат.УстановитьТекст(ТекстРезультат);
ФайлРезультат.Записать(ИмяФайлаРезультата, КодировкаТекста.UTF8NoBOM);
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////////////////////////
Функция ВывестиБлок(ВходящиеДанные, ИмяБлока, СоответствиеШаблонов, НаследованиеБлоков)
// ИмяБлока
// - Корень (справочники, документы и т.д.)
// - Тип - объекты одного типа (Спр1, Док1, ...)
// - Объект - модули
// - Модуль
// - Метод
ТекстРезультат = "";
ТекстОтчет = "";
Если СтрНайти("Корень;Тип;Объект", ИмяБлока) Тогда
Для каждого ОбъектСравнения Из ВходящиеДанные Цикл
ТекстОбъекты = ВывестиБлок(ОбъектСравнения[НаследованиеБлоков[ИмяБлока].Объекты],
НаследованиеБлоков[ИмяБлока].Блок, СоответствиеШаблонов, НаследованиеБлоков);
Если Не ПустаяСтрока(ТекстОбъекты) Тогда
ТекстОтчет = ТекстОтчет + СтрШаблон(СоответствиеШаблонов["Блок"],
ПредставлениеОбъекта(ИмяБлока, ОбъектСравнения), ТекстОбъекты);
КонецЕсли;
КонецЦикла;
ТекстРезультат = ?(ИмяБлока = "Корень",
СтрШаблон(СоответствиеШаблонов["Шаблон"], ТекстCSS(), ТекстПодпись(), ТекстОтчет),
ТекстОтчет);
ИначеЕсли ИмяБлока = "Модуль" Тогда
Для каждого Метод Из ВходящиеДанные Цикл
ТелоРодителя = "";
Метод.Свойство("Родитель", ТелоРодителя);
ТелоПоставки = "";
Метод.Свойство("Поставка", ТелоПоставки);
ТелоРасширения = Метод.ТелоМетода;
// Если Не ПустаяСтрока(ТелоРодителя) И Не ПустаяСтрока(ТелоПоставки) Тогда // вставка для отладки
Если ТелоРодителя <> ТелоПоставки Тогда
СравнитьДваТекста(ТелоРодителя, ТелоПоставки);
ТекстОтчет = ТекстОтчет +
СтрШаблон(СоответствиеШаблонов["Блок"], Метод.ТипМетода + " <b>" + Метод.ИмяМетодаБезПрефикса + "</b>",
СтрШаблон(СоответствиеШаблонов["Таблица"], ТелоРодителя, ТелоПоставки, ТелоРасширения));
КонецЕсли;
КонецЦикла;
ТекстРезультат = ТекстОтчет;
КонецЕсли;
Возврат ТекстРезультат;
КонецФункции
Функция ПредставлениеОбъекта(ИмяБлока, ОбъектСравнения)
Если ИмяБлока = "Корень" Тогда
ТекстРезультат = СтрШаблон("<b><span style=""color: DarkSlateGray;"">%1</span></b>", ОбъектСравнения.Тип);
ИначеЕсли ИмяБлока = "Тип" Тогда
ТекстРезультат = СтрШаблон("<span style=""color: SteelBlue;"">%1</span>", ОбъектСравнения.Имя);
ИначеЕсли ИмяБлока = "Объект" Тогда
ТекстРезультат = СтрЗаменить(ОбъектСравнения.ФайлМодуля.ПолноеИмя, РасширениеПуть, "");
Если ОбъектСравнения.Свойство("ИмяПереопределяемого") Тогда
ТекстРезультат = ТекстРезультат + СтрШаблон(
" (<span style=""color: SeaGreen;"">%1</span>)",
ОбъектСравнения.ИмяПереопределяемого);
КонецЕсли;
Иначе
ТекстРезультат = "";
КонецЕсли;
Возврат ТекстРезультат;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
Функция ТекстПодпись()
Возврат "Основная конфигурация: " + РодительПуть + "
|Поставка конфигурации: " + ПоставкаПуть + "
|Расширение: " + РасширениеПуть + "
|Дата формирования: " + ТекущаяДата();
КонецФункции
Функция ТекстШаблон()
Возврат
"<!DOCTYPE HTML>
|<HTML>
| <HEAD>
| <META content=""text/html; charset=utf-8"" http-equiv=Content-Type text html;>
| %1
| </HEAD>
| <BODY>
| <h3><b>Анализ расширения</b></h3>
| <pre>%2</pre>
| <P></P>
| <div class=""treeHTML"">
| %3
| </div>
| <P>&nbsp;</P>
| </BODY>
|</HTML>";
КонецФункции
Функция ТекстCSS()
Возврат "
|<STYLE>
| TABLE {
| BORDER: black 1px solid;
| PADDING: 0px;
| border-collapse: collapse;
| width: 100%;
| table-layout: fixed;
| }
| TH {
| TEXT-ALIGN: center;
| BORDER: black 1px solid;
| font-family: 'Courier New', Courier, monospace;
| }
| TD {
| /* width: 33%; */
| vertical-align: top;
| BORDER: black 1px solid;
| }
| PRE {
| font-family: 'Courier New', Courier, monospace;
| font-size: smaller;
| }
| .treeHTML {
| line-height: normal;
| }
| .treeHTML details {
| display: block;
| }
| .treeHTML div {
| font-size: 3;
| position: relative;
| margin: 0 0 0 .5em;
| padding: 0 0 0 1.2em;
| }
| .treeHTML div:not(:last-child) {
| border-left: 1px solid #ccc;
| }
| .treeHTML div:before {
| position: absolute;
| top: 0;
| left: 0;
| width: 1.1em;
| height: .5em;
| border-bottom: 1px solid #ccc;
| }
| .treeHTML div:last-child:before {
| border-left: 1px solid #ccc;
| }
| .treeHTML DIV.DELPARENT:before {
| content: ""-"";
| position: static;
| content: none;
| width: 0;
| height: 0;
| border-bottom: none;
| }
| .treeHTML DIV.method {
| width: 100%;
| height: 500px;
| font-family: 'Courier New', Courier, monospace;
| font-size: small;
| overflow: auto;
| margin: 0;
| padding: 0;
| white-space: pre;
| }
| .treeHTML DIV.method:before {
| /* position: static; */
| content: none;
| width: 0;
| height: 0;
| border-bottom: none;
| }
| .treeHTML DIV.DELPARENT {
| background: RosyBrown;
| }
| .treeHTML summary {
| font-family: Geneva, Arial, Helvetica, sans-serif;
| top: 0;
| left: 0;
| cursor: pointer;
| }
| .treeHTML details[open] summary {
| outline: none;
| }
|</STYLE>
|";
КонецФункции
Функция ТекстБлок()
Возврат "
| <details>
| <summary>%1</summary>
| <div>
| %2
| </div>
| </details>
|";
КонецФункции
Функция ТекстТаблица()
Возврат "
|<table>
| <tbody>
| <tr>
| <th>Основная конфигурация</th>
| <th>Поставка</th>
| <th>Расширение</th>
| </tr>
| <tr>
| <td>
| <div class=""method"" contenteditable=""true"" readonly=""readonly"">%1</div>
| </td>
| <td>
| <div class=""method"" contenteditable=""true"" readonly=""readonly"">%2</div>
| </td>
| <td>
| <div class=""method"" contenteditable=""true"" readonly=""readonly"">%3</div>
| </td>
| </tr>
| </tbody>
|</table>
|";
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
Функция НайтиСтрокуДалее(СтрокаПоиска, Масс, Знач Старт)
Пока Старт < Масс.Количество() Цикл
Если СокрЛП(СтрокаПоиска) = СокрЛП(Масс[Старт]) Тогда
Возврат Истина;
КонецЕсли;
Старт = Старт + 1;
КонецЦикла;
Возврат Ложь;
КонецФункции
Процедура СравнитьДваТекста(Текст1, Текст2)
Масс1 = СтрРазделить(Текст1, Символы.ПС);
Масс2 = СтрРазделить(Текст2, Символы.ПС);
Сч = 0;
Пока Сч < Макс(Масс1.Количество(), Масс2.Количество()) Цикл
Если Сч > Масс1.ВГраница() Тогда // В родительском массиве кончились строки
Масс2[Сч] = ДобавитьТегСтрокаДобавлена(Масс2[Сч]);
ИначеЕсли Сч > Масс2.ВГраница() Тогда // В массиве наследнике кончились строки
Масс1[Сч] = ДобавитьТегСтрокаУдалена(Масс1[Сч]);
ИначеЕсли СокрЛП(Масс1[Сч]) <> СокрЛП(Масс2[Сч]) Тогда // строки не равны
Если НайтиСтрокуДалее(Масс2[Сч], Масс1, Сч) Тогда // ищем в первом массиве строку второго
Масс2.Вставить(Сч, "");
Масс1[Сч] = ДобавитьТегСтрокаУдалена(Масс1[Сч]);
Иначе
Масс1.Вставить(Сч, "");
Масс2[Сч] = ДобавитьТегСтрокаДобавлена(Масс2[Сч]);
КонецЕсли;
КонецЕсли;
Сч = Сч + 1;
КонецЦикла;
Текст1 = СтрСоединить(Масс1, Символы.ПС);
Текст2 = СтрСоединить(Масс2, Символы.ПС);
КонецПроцедуры
Функция ДобавитьТегСтрокаУдалена(СтрокаТекста)
Возврат СтрШаблон("<span style=""background:LightPink"">%1</span>", СтрокаТекста);
КонецФункции
Функция ДобавитьТегСтрокаДобавлена(СтрокаТекста)
Возврат СтрШаблон("<span style=""background:PaleGreen"">%1</span>", СтрокаТекста);
КонецФункции

View File

@ -0,0 +1,310 @@
///////////////////////////////////////////////////////////////////////////////
//
// Служебный модуль с набором методов работы с командами приложения
//
// В большинстве проектов изменять данный модуль не требуется
//
///////////////////////////////////////////////////////////////////////////////
#Использовать logos
#Использовать cmdline
///////////////////////////////////////////////////////////////////////////////
Перем Лог;
Перем ПарсерКоманд;
Перем ИсполнителиКоманд;
Перем ОбъектНастроек;
///////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЙ ОТКРЫТЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС
///////////////////////////////////////////////////////////////////////////////
// Инициализирует и настраивает приложение
//
// Параметры:
// Настройка - Модуль - Модуль, в котором определены настройки приложения
//
// Возвращаемое значение:
// Модуль - Модуль менеджера приложения
//
Функция Инициализировать(Знач МенеджерНастроек) Экспорт
// Служебные переменные
ПарсерКоманд = Новый ПарсерАргументовКоманднойСтроки();
ИсполнителиКоманд = Новый Соответствие;
ОбъектНастроек = МенеджерНастроек;
// Логирование
Лог = Логирование.ПолучитьЛог(ОбъектНастроек.ИмяЛогаСистемы());
Лог.УстановитьРаскладку(ОбъектНастроек);
// Инициализация команд
ОбъектНастроек.НастроитьКомандыПриложения(ЭтотОбъект);
Возврат ЭтотОбъект;
КонецФункции
// Добавляет команду в приложение
//
// Параметры:
// ИмяКоманды - Строка - Имя команды
// КлассРеализации - Строка - Имя файла класса, в котором реализована команда
// Описаниекоманды - Строка - краткое описание назначения команды
//
Процедура ДобавитьКоманду(Знач ИмяКоманды, Знач КлассРеализации, Знач ОписаниеКоманды) Экспорт
Попытка
РеализацияКоманды = Новый(КлассРеализации);
Команда = ПарсерКоманд.ОписаниеКоманды(ИмяКоманды, ОписаниеКоманды);
ПарсерКоманд.ДобавитьКоманду(Команда);
РеализацияКоманды.НастроитьКоманду(Команда, ПарсерКоманд);
ИсполнителиКоманд.Вставить(ИмяКоманды, РеализацияКоманды);
Исключение
ЗавершитьРаботуПриложенияСОшибкой(СтрШаблон("Не удалось инициализировать команду '%1' для класса '%2' по причине:
|%3", ИмяКоманды, КлассРеализации, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())));
КонецПопытки;
КонецПроцедуры
// Аварийно завершает работу приложения с ошибкой
//
// Параметры:
// Сообщение - Строка - Сообщение, которое будет выведено пользователю перед завершением
// КодВозврата (не обязательный) - Число - Код возврата с которым будет закрыто приложение
// Значение по умолчанию: "ОшибкаВремениВыполнения" -- 1
//
Процедура ЗавершитьРаботуПриложенияСОшибкой(Знач Сообщение, Знач КодВозврата = Неопределено) Экспорт
Если КодВозврата = Неопределено Тогда
КодВозврата = РезультатыКоманд().ОшибкаВремениВыполнения;
КонецЕсли;
Лог.КритичнаяОшибка(Сообщение);
ЗавершитьРаботу(КодВозврата);
КонецПроцедуры
// Завершает работу приложения
//
// Параметры:
// КодВозврата (не обязательный) - Число - Код возврата с которым будет закрыто приложение
// Значение по умолчанию: "Успех" -- 0
//
Процедура ЗавершитьРаботуПриложения(Знач КодВозврата = Неопределено) Экспорт
Если КодВозврата = Неопределено Тогда
КодВозврата = РезультатыКоманд().Успех;
КонецЕсли;
ЗавершитьРаботу(КодВозврата);
КонецПроцедуры
// Осуществляет запуск приложения на выполнение
//
// Возвращаемое значение:
// Число - Код возврата выполнения команды приложения
//
Функция ЗапуститьВыполнение() Экспорт
Попытка
ПараметрыЗапуска = ПарсерКоманд.Разобрать(АргументыКоманднойСтроки);
Исключение
Лог.Отладка(ОписаниеОшибки());
Лог.Ошибка("Не удалось определить требуемое действие.");
ВывестиСправкуПоКомандам();
Возврат РезультатыКоманд().НеверныеПараметры;
КонецПопытки;
Команда = "";
ЗначенияПараметров = Неопределено;
Если ПараметрыЗапуска = Неопределено ИЛИ ПараметрыЗапуска.Количество() = 0 Тогда
ВывестиВерсию();
ВывестиСправкуПоКомандам();
Возврат РезультатыКоманд().НеверныеПараметры;
ИначеЕсли ТипЗнч(ПараметрыЗапуска) = Тип("Структура") Тогда
// это команда
Команда = ПараметрыЗапуска.Команда;
ЗначенияПараметров = ПараметрыЗапуска.ЗначенияПараметров;
Лог.Отладка("Выполняю команду продукта %1", Команда);
ИначеЕсли ЗначениеЗаполнено(ОбъектНастроек.ИмяКомандыПоУмолчанию()) Тогда
// это команда по-умолчанию
Команда = ОбъектНастроек.ИмяКомандыПоУмолчанию();
ЗначенияПараметров = ПараметрыЗапуска;
Лог.Отладка("Выполняю команду продукта по умолчанию %1", Команда);
Иначе
Возврат НекорректныеПараметры();
КонецЕсли;
Если Команда <> ОбъектНастроек.ИмяКомандыВерсия() Тогда
ВывестиВерсию();
КонецЕсли;
Возврат ВыполнитьКоманду(Команда, ЗначенияПараметров);
КонецФункции // ЗапуститьВыполнение()
// Осуществляет запуск на выполнение указанной команды приложения
//
// Параметры:
// ИмяКоманды - Строка - Имя команды, которую необходимо запустить
// ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений
//
Функция ВыполнитьКоманду(Знач ИмяКоманды, Знач ПараметрыКоманды) Экспорт
Команда = ПолучитьКоманду(ИмяКоманды);
КодВозврата = Команда.ВыполнитьКоманду(ПараметрыКоманды, ЭтотОбъект);
Если КодВозврата = Неопределено Тогда
КодВозврата = РезультатыКоманд().Успех;
КонецЕсли;
Возврат КодВозврата;
КонецФункции // ВыполнитьКоманду
///////////////////////////////////////////////////////////////////////////////
// ПРОГРАММНЫЙ ИНТЕРФЕЙС
///////////////////////////////////////////////////////////////////////////////
// Возвращает лог приложения
Функция ПолучитьЛог() Экспорт
Возврат Лог;
КонецФункции // ПолучитьЛог
// Возвращает версию продукта
Функция ВерсияПродукта() Экспорт
Возврат ОбъектНастроек.ВерсияПродукта();
КонецФункции // ВерсияПродукта
// Возвращает имя продукта
Функция ИмяПродукта() Экспорт
Возврат ОбъектНастроек.ИмяПродукта();
КонецФункции // ИмяПродукта
// Возвращает путь к исполняемому файлу
Функция ПутьКИсполняемомуФайлу() Экспорт
Возврат ОбъектНастроек.ПутьКИсполняемомуФайлу();
КонецФункции // ПутьКИсполняемомуФайлу
// Возвращает путь к каталогу основного скрипта
Функция ПутьКРодительскомуКаталогу() Экспорт
Возврат ОбъектНастроек.ПутьКРодительскомуКаталогу();
КонецФункции // ПутьКРодительскомуКаталогу
// Выводит справку по всем командам приложения
Процедура ВывестиСправкуПоКомандам() Экспорт
ПарсерКоманд.ВывестиСправкуПоКомандам();
КонецПроцедуры // ВывестиСправкуПоКомандам
// Выводит справку по указанной команде приложения.
Процедура ВывестиСправкуПоКоманде(Знач ИмяКоманды) Экспорт
ПарсерКоманд.ВывестиСправкуПоКоманде(ИмяКоманды);
КонецПроцедуры // ВывестиСправкуПоКоманде
///////////////////////////////////////////////////////////////////////////////
// ПЕРЕЧИСЛЕНИЯ
///////////////////////////////////////////////////////////////////////////////
// Возвращает стандартные коды возврата приложения
Функция РезультатыКоманд() Экспорт
РезультатыКоманд = Новый Структура;
РезультатыКоманд.Вставить("Успех", 0);
РезультатыКоманд.Вставить("НеверныеПараметры", 5);
РезультатыКоманд.Вставить("ОшибкаВремениВыполнения", 1);
Возврат РезультатыКоманд;
КонецФункции // РезультатыКоманд
///////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
///////////////////////////////////////////////////////////////////////////////
// Получает объект класса с реализацией указанной команды
Функция ПолучитьКоманду(Знач ИмяКоманды)
КлассРеализации = ИсполнителиКоманд[ИмяКоманды];
Если КлассРеализации = Неопределено Тогда
ВызватьИсключение СтрШаблон("Неверная операция. Команда '%1' не предусмотрена.", ИмяКоманды);
КонецЕсли;
Возврат КлассРеализации;
КонецФункции // ПолучитьКоманду
// Осуществляет вывод полной версии продукта
Процедура ВывестиВерсию()
Сообщить(СтрШаблон("%1 v%2", ИмяПродукта(), ВерсияПродукта()));
КонецПроцедуры // ВывестиВерсию
// Вывод ошибки и справки по параметрам
Функция НекорректныеПараметры()
Лог.Ошибка("Некорректные аргументы командной строки");
ВывестиСправкуПоКомандам();
Возврат РезультатыКоманд().НеверныеПараметры;
КонецФункции // НекорректныеПараметры()
Функция ПолучитьРегексп(Паттерн) Экспорт
Регексп = Новый РегулярноеВыражение(Паттерн);
Регексп.Многострочный = Истина;
Регексп.ИгнорироватьРегистр = Истина;
Возврат Регексп;
КонецФункции
Функция ПрочитатьФайл(ФайлОбъекта) Экспорт
ФайлЧтение = Новый ТекстовыйДокумент;
ПутьФайла = ?(ТипЗнч(ФайлОбъекта) = Тип("Строка"), ФайлОбъекта, ФайлОбъекта.ПолноеИмя);
ФайлЧтение.Прочитать(ПутьФайла, КодировкаТекста.UTF8NoBOM);
Возврат ФайлЧтение.ПолучитьТекст();
КонецФункции

View File

@ -0,0 +1,144 @@
///////////////////////////////////////////////////////////////////////////////
//
// Служебный модуль с набором служебных параметров приложения
//
// При создании нового приложения обязательно внести изменение
// в ф-ии ИмяПродукта, указав имя вашего приложения.
//
// При выпуске новой версии обязательно изменить ее значение
// в ф-ии ВерсияПродукта
//
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// СВОЙСТВА ПРОДУКТА
///////////////////////////////////////////////////////////////////////////////
// ВерсияПродукта
// Возвращает текущую версию продукта
//
// Возвращаемое значение:
// Строка - Значение текущей версии продукта
//
Функция ВерсияПродукта() Экспорт
Возврат "1.0.2";
КонецФункции // ВерсияПродукта
// ИмяПродукта
// Возвращает имя продукта
//
// Возвращаемое значение:
// Строка - Значение имени продукта
//
Функция ИмяПродукта() Экспорт
Возврат "diff3cf";
КонецФункции // ИмяПродукта
// ПутьКИсполняемомуФайлу
// Возвращает путь к исполняемому файлу
//
// Возвращаемое значение:
// Строка - Путь к исполняемому файлу скрипта
//
Функция ПутьКИсполняемомуФайлу() Экспорт
Возврат ОбъединитьПути(ПутьКРодительскомуКаталогу(), "src", "main.os");
КонецФункции // ПутьКИсполняемомуФайлу
// ПутьКРодительскомуКаталогу
// Возвращает путь к каталогу основного скрипта
//
// Возвращаемое значение:
// Строка - Путь к каталогу основного скрипта
//
Функция ПутьКРодительскомуКаталогу() Экспорт
Файл = Новый Файл(ОбъединитьПути(ТекущийСценарий().Каталог, "..", ".."));
Возврат Файл.ПолноеИмя;
КонецФункции // ПутьКРодительскомуКаталогу
///////////////////////////////////////////////////////////////////////////////
// ЛОГИРОВАНИЕ
///////////////////////////////////////////////////////////////////////////////
// Форматирование логов
// См. описание метода "УстановитьРаскладку" библиотеки logos
//
Функция Форматировать(Знач Уровень, Знач Сообщение) Экспорт
Возврат СтрШаблон("%1: %2 - %3", ТекущаяДата(), УровниЛога.НаименованиеУровня(Уровень), Сообщение);
КонецФункции
// ИмяЛогаСистемы
// Возвращает идентификатор лога приложения
//
// Возвращаемое значение:
// Строка - Значение идентификатора лога приложения
//
Функция ИмяЛогаСистемы() Экспорт
Возврат "oscript.app." + ИмяПродукта();
КонецФункции // ИмяЛогаСистемы
///////////////////////////////////////////////////////////////////////////////
// НАСТРОЙКА КОМАНД
///////////////////////////////////////////////////////////////////////////////
// Возвращает имя команды "version" (ключ командной строки)
//
// Возвращаемое значение:
// Строка - имя команды
//
Функция ИмяКомандыВерсия() Экспорт
Возврат "version";
КонецФункции // ИмяКомандыВерсия
// Возвращает имя команды "help" (ключ командной строки)
//
// Возвращаемое значение:
// Строка - имя команды
//
Функция ИмяКомандыПомощь() Экспорт
Возврат "help";
КонецФункции // ИмяКомандыПомощь()
// ИмяКомандыПоУмолчанию
// Одна из команд может вызываться неявно, без указания команды.
// Иными словами, здесь указывается какой обработчик надо вызывать, если приложение запущено без какой-либо команды
// myapp /home/user/somefile.txt будет аналогично myapp default-action /home/user/somefile.txt
//
// Возвращаемое значение:
// Строка - имя команды по умолчанию
Функция ИмяКомандыПоУмолчанию() Экспорт
Возврат "help";
КонецФункции // ИмяКомандыПоУмолчанию
// НастроитьКомандыПриложения
// Регистрирует классы обрабатывающие команды прилоложения
//
// Параметры:
// Приложение - Модуль - Модуль менеджера приложения
Процедура НастроитьКомандыПриложения(Знач Приложение) Экспорт
Приложение.ДобавитьКоманду(ИмяКомандыПомощь(), "КомандаСправкаПоПараметрам", "Выводит справку по командам");
Приложение.ДобавитьКоманду(ИмяКомандыВерсия(), "КомандаVersion", "Выводит версию приложения");
Приложение.ДобавитьКоманду("diff", "КомандаСравнение",
"Выполняет сравнение расширения с основной конфигурацией и новой поставкой");
Приложение.ДобавитьКоманду("objects", "КомандаАнализОбъектов",
"Выполняет анализ изменения объектов из основной конфигурации в новой поставке");
КонецПроцедуры // ПриРегистрацииКомандПриложения

View File

@ -0,0 +1,60 @@
///////////////////////////////////////////////////////////////////////////////
//
// Служебный модуль получения результата сравнения расширения, основной конфы и поставки
//
// (с) BIA Technologies, LLC
//
///////////////////////////////////////////////////////////////////////////////
// Сравнивает три конфигурации - Родитель, Поставка и Расширение
//
// Параметры:
// РодительПуть - Строка - Каталог конфигурации Родитель
// ПоставкаПуть - Строка - Каталог конфигурации Поставка
// РасширениеПуть - Строка - Каталог конфигурации Расширение
// Лог - log-manager - Экземпляр класса логирования
//
// Возвращаемое значение:
// Структура - результат сравнения
//
Функция ПолучитьРезультатСравнения(РодительПуть, ПоставкаПуть, РасширениеПуть, Лог) Экспорт
РасширениеОписание = Новый Структура("Префикс, Типы");
РасширениеОписание.Вставить("РодительПуть", РодительПуть);
РасширениеОписание.Вставить("ПоставкаПуть", ПоставкаПуть);
РасширениеОписание.Вставить("РасширениеПуть", РасширениеПуть);
Парсер = Новый ПарсерМодулейРасширения(РасширениеПуть);
ФайлКонфигурации = ОбъединитьПути(РасширениеПуть, "Configuration.xml");
РасширениеОписание.Префикс = Парсер.ПрочитатьПрефиксРасширения(ФайлКонфигурации);
// Получить переопределенные объекты (файлы xml и bsl)
РасширениеОписание.Типы = Парсер.ПолучитьПереопределенныеОбъекты();
Для каждого ТипРасширения Из РасширениеОписание.Типы Цикл
Для каждого ОбъектРасширения Из ТипРасширения.Объекты Цикл
Лог.Информация(ОбъектРасширения.Тип + " - " + ОбъектРасширения.Имя);
Для каждого ФайлМодуля Из ОбъектРасширения.Модули Цикл
МодульОбъекта = ФайлМодуля.ФайлМодуля;
ФайлМодуля.Вставить("Методы", Парсер.ПрочитатьМетодыМодуля(МодульОбъекта, РасширениеОписание.Префикс));
// читаем и раскладываем модуль родителя
Парсер.ПрочитатьМетодыОсновнойКонфигурации(МодульОбъекта, ФайлМодуля, РодительПуть, "Родитель");
// читаем и раскладываем модуль поставки
Парсер.ПрочитатьМетодыОсновнойКонфигурации(МодульОбъекта, ФайлМодуля, ПоставкаПуть, "Поставка");
КонецЦикла;
КонецЦикла;
КонецЦикла;
Возврат РасширениеОписание;
КонецФункции

View File

@ -0,0 +1,29 @@
Перем ОбъектыКонфигурации Экспорт;
///////////////////////////////////////////////////////////////////////////////////////////////
ОбъектыКонфигурации = Новый Массив();
ОбъектыКонфигурации.Добавить("AccountingRegisters");
ОбъектыКонфигурации.Добавить("AccumulationRegisters");
ОбъектыКонфигурации.Добавить("BusinessProcesses");
ОбъектыКонфигурации.Добавить("CalculationRegisters");
ОбъектыКонфигурации.Добавить("Catalogs");
ОбъектыКонфигурации.Добавить("ChartsOfAccounts");
ОбъектыКонфигурации.Добавить("ChartsOfCalculationTypes");
ОбъектыКонфигурации.Добавить("ChartsOfCharacteristicTypes");
ОбъектыКонфигурации.Добавить("CommonCommands");
ОбъектыКонфигурации.Добавить("CommonForms");
ОбъектыКонфигурации.Добавить("CommonModules");
ОбъектыКонфигурации.Добавить("Constants");
ОбъектыКонфигурации.Добавить("DataProcessors");
ОбъектыКонфигурации.Добавить("DocumentJournals");
ОбъектыКонфигурации.Добавить("Documents");
ОбъектыКонфигурации.Добавить("Enums");
ОбъектыКонфигурации.Добавить("ExchangePlans");
ОбъектыКонфигурации.Добавить("Ext");
ОбъектыКонфигурации.Добавить("FilterCriteria");
ОбъектыКонфигурации.Добавить("HTTPServices");
ОбъектыКонфигурации.Добавить("InformationRegisters");
ОбъектыКонфигурации.Добавить("Reports");
ОбъектыКонфигурации.Добавить("SettingsStorages");
ОбъектыКонфигурации.Добавить("Tasks");
ОбъектыКонфигурации.Добавить("WebServices");

18
tasks/test-feature.os Normal file
View File

@ -0,0 +1,18 @@
#Использовать ".."
#Использовать 1bdd
КаталогФич = ОбъединитьПути(".", "features");
ПутьФичи = ОбъединитьПути(".", "features", АргументыКоманднойСтроки[0]);
Файл_КаталогФич = Новый Файл(КаталогФич);
ФайлФичи = Новый Файл(ПутьФичи);
ИсполнительБДД = Новый ИсполнительБДД;
РезультатВыполнения = ИсполнительБДД.ВыполнитьФичу(ФайлФичи, Файл_КаталогФич);
ИтоговыйРезультатВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатВыполнения);
Сообщить(ИтоговыйРезультатВыполнения);
Если ИтоговыйРезультатВыполнения = ИсполнительБДД.ВозможныеСтатусыВыполнения().Сломался Тогда
ВызватьИсключение 1;
КонецЕсли;

82
tasks/test.os Normal file
View File

@ -0,0 +1,82 @@
#Использовать "../src"
#Использовать 1bdd
#Использовать 1testrunner
Функция ПрогнатьТесты()
Тестер = Новый Тестер;
ПутьКТестам = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "tests");
ПутьКОтчетуJUnit = ОбъединитьПути(ТекущийСценарий().Каталог, "..");
КаталогТестов = Новый Файл(ПутьКТестам);
Если Не КаталогТестов.Существует() Тогда
Сообщить(СтрШаблон("Не найден каталог тестов %1", ПутьКТестам));
Возврат Истина;
КонецЕсли;
РезультатТестирования = Тестер.ТестироватьКаталог(
КаталогТестов,
Новый Файл(ПутьКОтчетуJUnit)
);
Успешно = РезультатТестирования = 0;
Возврат Успешно;
КонецФункции // ПрогнатьТесты()
Функция ПрогнатьФичи()
ПутьОтчетаJUnit = "./bdd-log.xml";
КаталогФич = ОбъединитьПути(".", "features");
Файл_КаталогФич = Новый Файл(КаталогФич);
Если Не Файл_КаталогФич.Существует() Тогда
Сообщить(СтрШаблон("Не найден каталог фич %1", КаталогФич));
Возврат Истина;
КонецЕсли;
ИсполнительБДД = Новый ИсполнительБДД;
РезультатыВыполнения = ИсполнительБДД.ВыполнитьФичу(Файл_КаталогФич, Файл_КаталогФич);
ИтоговыйРезультатВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатыВыполнения);
СтатусВыполнения = ИсполнительБДД.ВозможныеСтатусыВыполнения().НеВыполнялся;
Если РезультатыВыполнения.Строки.Количество() > 0 Тогда
СтатусВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатыВыполнения);
КонецЕсли;
ГенераторОтчетаJUnit = Новый ГенераторОтчетаJUnit;
ГенераторОтчетаJUnit.Сформировать(РезультатыВыполнения, СтатусВыполнения, ПутьОтчетаJUnit);
Сообщить(СтрШаблон("Результат прогона фич <%1>
|", ИтоговыйРезультатВыполнения));
Возврат ИтоговыйРезультатВыполнения <> ИсполнительБДД.ВозможныеСтатусыВыполнения().Сломался;
КонецФункции // ПрогнатьФичи()
Попытка
ТестыПрошли = ПрогнатьТесты();
Исключение
ТестыПрошли = Ложь;
Сообщить(СтрШаблон("Тесты через 1testrunner выполнены неудачно
|%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())));
КонецПопытки;
Попытка
ФичиПрошли = ПрогнатьФичи();
Исключение
ФичиПрошли = Ложь;
Сообщить(СтрШаблон("Тесты поведения через 1bdd выполнены неудачно
|%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())));
КонецПопытки;
Если Не ТестыПрошли Или Не ФичиПрошли Тогда
ВызватьИсключение "Тестирование завершилось неудачно!";
Иначе
Сообщить(СтрШаблон("Результат прогона тестов <%1>
|", ТестыПрошли));
КонецЕсли;

View File

@ -0,0 +1,84 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.7">
<Catalog uuid="c5ac80e6-b951-4a64-b272-68ecfc378eaf">
<InternalInfo>
<xr:GeneratedType name="CatalogObject.Справочник1" category="Object">
<xr:TypeId>54640876-c2e6-475b-835e-a755b661df98</xr:TypeId>
<xr:ValueId>d4b2fd69-7010-475e-95d3-5b31d3abff26</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="CatalogRef.Справочник1" category="Ref">
<xr:TypeId>cd29b0ab-168f-46ea-bcb9-13ec622af7d7</xr:TypeId>
<xr:ValueId>5eb3b617-0c7e-4319-b890-097c56a166aa</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="CatalogSelection.Справочник1" category="Selection">
<xr:TypeId>b8a806e9-eba1-414c-84a8-724dcd6b82ee</xr:TypeId>
<xr:ValueId>130f6ad5-d7be-4d32-bffd-faa976836a81</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="CatalogList.Справочник1" category="List">
<xr:TypeId>cd4a0f54-030f-4c02-84db-67752c4107da</xr:TypeId>
<xr:ValueId>863afb5a-afed-43a0-9792-c0f39e3c7241</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="CatalogManager.Справочник1" category="Manager">
<xr:TypeId>d8ec89b5-d4fa-42e2-a9e7-620c903dca0a</xr:TypeId>
<xr:ValueId>6330ba24-5beb-4a5c-bcb3-62a58101d88e</xr:ValueId>
</xr:GeneratedType>
</InternalInfo>
<Properties>
<Name>Справочник1</Name>
<Synonym/>
<Comment/>
<Hierarchical>false</Hierarchical>
<HierarchyType>HierarchyFoldersAndItems</HierarchyType>
<LimitLevelCount>false</LimitLevelCount>
<LevelCount>2</LevelCount>
<FoldersOnTop>true</FoldersOnTop>
<UseStandardCommands>true</UseStandardCommands>
<Owners/>
<SubordinationUse>ToItems</SubordinationUse>
<CodeLength>9</CodeLength>
<DescriptionLength>25</DescriptionLength>
<CodeType>String</CodeType>
<CodeAllowedLength>Variable</CodeAllowedLength>
<CodeSeries>WholeCatalog</CodeSeries>
<CheckUnique>true</CheckUnique>
<Autonumbering>true</Autonumbering>
<DefaultPresentation>AsDescription</DefaultPresentation>
<Characteristics/>
<PredefinedDataUpdate>Auto</PredefinedDataUpdate>
<EditType>InDialog</EditType>
<QuickChoice>false</QuickChoice>
<ChoiceMode>BothWays</ChoiceMode>
<InputByString>
<xr:Field>Catalog.Справочник1.StandardAttribute.Description</xr:Field>
<xr:Field>Catalog.Справочник1.StandardAttribute.Code</xr:Field>
</InputByString>
<SearchStringModeOnInputByString>Begin</SearchStringModeOnInputByString>
<FullTextSearchOnInputByString>DontUse</FullTextSearchOnInputByString>
<ChoiceDataGetModeOnInputByString>Directly</ChoiceDataGetModeOnInputByString>
<DefaultObjectForm/>
<DefaultFolderForm/>
<DefaultListForm/>
<DefaultChoiceForm/>
<DefaultFolderChoiceForm/>
<AuxiliaryObjectForm/>
<AuxiliaryFolderForm/>
<AuxiliaryListForm/>
<AuxiliaryChoiceForm/>
<AuxiliaryFolderChoiceForm/>
<IncludeHelpInContents>false</IncludeHelpInContents>
<BasedOn/>
<DataLockFields/>
<DataLockControlMode>Managed</DataLockControlMode>
<FullTextSearch>DontUse</FullTextSearch>
<ObjectPresentation/>
<ExtendedObjectPresentation/>
<ListPresentation/>
<ExtendedListPresentation/>
<Explanation/>
<CreateOnInput>Use</CreateOnInput>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<DataHistory>DontUse</DataHistory>
</Properties>
<ChildObjects/>
</Catalog>
</MetaDataObject>

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.7">
<CommonModule uuid="a44a75b2-7156-4865-8baf-2c6cc8dbc3bc">
<Properties>
<Name>ОбщийМодульТест</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Общий модуль тест</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Global>false</Global>
<ClientManagedApplication>false</ClientManagedApplication>
<Server>true</Server>
<ExternalConnection>false</ExternalConnection>
<ClientOrdinaryApplication>false</ClientOrdinaryApplication>
<ServerCall>false</ServerCall>
<Privileged>false</Privileged>
<ReturnValuesReuse>DontUse</ReturnValuesReuse>
</Properties>
</CommonModule>
</MetaDataObject>

View File

@ -0,0 +1,5 @@
Процедура ТестПроцедуры()
Тест = "Это просто тестирование сравнения конфигураций";
КонецПроцедуры

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<ConfigDumpInfo xmlns="http://v8.1c.ru/8.3/xcf/dumpinfo" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" format="Hierarchical" version="2.7">
<ConfigVersions>
<Metadata name="Catalog.Справочник1" id="c5ac80e6-b951-4a64-b272-68ecfc378eaf" configVersion="54c58831a6045b468a9bee8da1d87db500000000"/>
<Metadata name="CommonModule.ОбщийМодульТест" id="a44a75b2-7156-4865-8baf-2c6cc8dbc3bc" configVersion="5c0c09f98be1294cae5c406c898c168800000000"/>
<Metadata name="CommonModule.ОбщийМодульТест.Module" id="a44a75b2-7156-4865-8baf-2c6cc8dbc3bc.0" configVersion="f84e46277e660c498f103cfc4b9bedc600000000"/>
<Metadata name="Configuration.ТестированиеСравнения" id="b8f2bed8-62af-456a-bd48-48af2633fe61" configVersion="49badb7a768e9b4db6a62bedd3a3f2d300000000"/>
<Metadata name="Document.ТестовыйДокумент" id="166ae4b2-4689-4202-b76c-1ca63e305b16" configVersion="d252ac6ccf4fd849af4ddcff57df155100000000">
<Metadata name="Document.ТестовыйДокумент.TabularSection.ТабличнаяЧасть1" id="1a9690a8-f078-40ac-965c-b5ae42a40da6"/>
<Metadata name="Document.ТестовыйДокумент.TabularSection.ТабличнаяЧасть1.Attribute.Реквизит1" id="25228916-a86f-4c9f-adcb-caf22243c2ad"/>
<Metadata name="Document.ТестовыйДокумент.TabularSection.ТабличнаяЧасть1.Attribute.Реквизит3" id="5aa085e7-1aed-4dd3-a673-52c6183d9631"/>
<Metadata name="Document.ТестовыйДокумент.Attribute.Реквизит2" id="7c781ffa-00ec-45d7-928b-379028d8d41e"/>
<Metadata name="Document.ТестовыйДокумент.Attribute.Реквизит1" id="d99abaf2-eae9-4b87-9290-9602869abb06"/>
<Metadata name="Document.ТестовыйДокумент.TabularSection.ТабличнаяЧасть1.Attribute.Реквизит2" id="ff3484e3-c880-4504-a4be-7f7fc9d94b95"/>
</Metadata>
<Metadata name="Document.ТестовыйДокумент.Form.ФормаДокумента" id="5823fee4-aac1-4768-b623-c55ff0970b60" configVersion="8455e4dc1e3dd7498642a1a08d90ea2d00000000"/>
<Metadata name="Document.ТестовыйДокумент.Form.ФормаДокумента.Form" id="5823fee4-aac1-4768-b623-c55ff0970b60.0" configVersion="dc5d5c78a28c0f4f8b8c229d2d69e48c00000000"/>
<Metadata name="Document.ТестовыйДокумент.ObjectModule" id="166ae4b2-4689-4202-b76c-1ca63e305b16.0" configVersion="2299082c6e6611438f56234994edc8f200000000"/>
<Metadata name="Language.Русский" id="401e926f-d313-440b-9a97-3d176c2859b9" configVersion="5079916dd21594449e3788ee8c87259c00000000"/>
<Metadata name="Role.Администратор" id="f92f420d-e323-431c-94b4-151d5175a4e0" configVersion="2df0e39547974842a29a1af1bfd6cf5900000000"/>
<Metadata name="Role.Администратор.Rights" id="f92f420d-e323-431c-94b4-151d5175a4e0.0" configVersion="04407c27da65854caac89ad5a1410e8b00000000"/>
<Metadata name="Subsystem.ПодсистемаТест" id="b99a2492-b58f-414e-8279-1db48fc7f54c" configVersion="1ed89ab27d723343a2b9baae3d51f17000000000"/>
</ConfigVersions>
</ConfigDumpInfo>

View File

@ -0,0 +1,148 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.7">
<Configuration uuid="b8f2bed8-62af-456a-bd48-48af2633fe61">
<InternalInfo>
<xr:ContainedObject>
<xr:ClassId>9cd510cd-abfc-11d4-9434-004095e12fc7</xr:ClassId>
<xr:ObjectId>804c66e4-c30d-409b-8591-7ee38de6cf58</xr:ObjectId>
</xr:ContainedObject>
<xr:ContainedObject>
<xr:ClassId>9fcd25a0-4822-11d4-9414-008048da11f9</xr:ClassId>
<xr:ObjectId>46aa5b38-d653-4c7b-976e-d50ab79964e4</xr:ObjectId>
</xr:ContainedObject>
<xr:ContainedObject>
<xr:ClassId>e3687481-0a87-462c-a166-9f34594f9bba</xr:ClassId>
<xr:ObjectId>8d0e858b-89e5-4d0d-a61c-dd7dc2207f3f</xr:ObjectId>
</xr:ContainedObject>
<xr:ContainedObject>
<xr:ClassId>9de14907-ec23-4a07-96f0-85521cb6b53b</xr:ClassId>
<xr:ObjectId>e3a6ca97-02b1-428c-acd6-d52cad356652</xr:ObjectId>
</xr:ContainedObject>
<xr:ContainedObject>
<xr:ClassId>51f2d5d8-ea4d-4064-8892-82951750031e</xr:ClassId>
<xr:ObjectId>568f0d16-cbfa-4b11-8f18-6ce8014fc83f</xr:ObjectId>
</xr:ContainedObject>
<xr:ContainedObject>
<xr:ClassId>e68182ea-4237-4383-967f-90c1e3370bc7</xr:ClassId>
<xr:ObjectId>2ac838b4-c5db-4ad6-9cc5-8d480c868fcf</xr:ObjectId>
</xr:ContainedObject>
</InternalInfo>
<Properties>
<Name>ТестированиеСравнения</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Тестирование сравнения</v8:content>
</v8:item>
</Synonym>
<Comment/>
<NamePrefix/>
<ConfigurationExtensionCompatibilityMode>Version8_3_13</ConfigurationExtensionCompatibilityMode>
<DefaultRunMode>ManagedApplication</DefaultRunMode>
<UsePurposes>
<v8:Value xsi:type="app:ApplicationUsePurpose">PlatformApplication</v8:Value>
</UsePurposes>
<ScriptVariant>Russian</ScriptVariant>
<DefaultRoles/>
<Vendor/>
<Version/>
<UpdateCatalogAddress/>
<IncludeHelpInContents>false</IncludeHelpInContents>
<UseManagedFormInOrdinaryApplication>false</UseManagedFormInOrdinaryApplication>
<UseOrdinaryFormInManagedApplication>false</UseOrdinaryFormInManagedApplication>
<AdditionalFullTextSearchDictionaries/>
<CommonSettingsStorage/>
<ReportsUserSettingsStorage/>
<ReportsVariantsStorage/>
<FormDataSettingsStorage/>
<DynamicListsUserSettingsStorage/>
<Content/>
<DefaultReportForm/>
<DefaultReportVariantForm/>
<DefaultReportSettingsForm/>
<DefaultDynamicListSettingsForm/>
<DefaultSearchForm/>
<DefaultDataHistoryChangeHistoryForm/>
<DefaultDataHistoryVersionDataForm/>
<DefaultDataHistoryVersionDifferencesForm/>
<RequiredMobileApplicationPermissions>
<v8:pair>
<v8:Key xsi:type="app:RequiredMobileApplicationPermissions">Multimedia</v8:Key>
<v8:Value xsi:type="xs:boolean">false</v8:Value>
</v8:pair>
<v8:pair>
<v8:Key xsi:type="app:RequiredMobileApplicationPermissions">Location</v8:Key>
<v8:Value xsi:type="xs:boolean">false</v8:Value>
</v8:pair>
<v8:pair>
<v8:Key xsi:type="app:RequiredMobileApplicationPermissions">Contacts</v8:Key>
<v8:Value xsi:type="xs:boolean">false</v8:Value>
</v8:pair>
<v8:pair>
<v8:Key xsi:type="app:RequiredMobileApplicationPermissions">Calendars</v8:Key>
<v8:Value xsi:type="xs:boolean">false</v8:Value>
</v8:pair>
<v8:pair>
<v8:Key xsi:type="app:RequiredMobileApplicationPermissions">Telephony</v8:Key>
<v8:Value xsi:type="xs:boolean">false</v8:Value>
</v8:pair>
<v8:pair>
<v8:Key xsi:type="app:RequiredMobileApplicationPermissions">PushNotification</v8:Key>
<v8:Value xsi:type="xs:boolean">false</v8:Value>
</v8:pair>
<v8:pair>
<v8:Key xsi:type="app:RequiredMobileApplicationPermissions">LocalNotification</v8:Key>
<v8:Value xsi:type="xs:boolean">false</v8:Value>
</v8:pair>
<v8:pair>
<v8:Key xsi:type="app:RequiredMobileApplicationPermissions">Print</v8:Key>
<v8:Value xsi:type="xs:boolean">false</v8:Value>
</v8:pair>
<v8:pair>
<v8:Key xsi:type="app:RequiredMobileApplicationPermissions">InAppPurchases</v8:Key>
<v8:Value xsi:type="xs:boolean">false</v8:Value>
</v8:pair>
<v8:pair>
<v8:Key xsi:type="app:RequiredMobileApplicationPermissions">Ads</v8:Key>
<v8:Value xsi:type="xs:boolean">false</v8:Value>
</v8:pair>
<v8:pair>
<v8:Key xsi:type="app:RequiredMobileApplicationPermissions">BackgroundLocation</v8:Key>
<v8:Value xsi:type="xs:boolean">false</v8:Value>
</v8:pair>
<v8:pair>
<v8:Key xsi:type="app:RequiredMobileApplicationPermissions">BackgroundAudioPlayback</v8:Key>
<v8:Value xsi:type="xs:boolean">false</v8:Value>
</v8:pair>
<v8:pair>
<v8:Key xsi:type="app:RequiredMobileApplicationPermissions">FileExchangeWithPersonalComputer</v8:Key>
<v8:Value xsi:type="xs:boolean">false</v8:Value>
</v8:pair>
</RequiredMobileApplicationPermissions>
<MainClientApplicationWindowMode>Normal</MainClientApplicationWindowMode>
<DefaultInterface/>
<DefaultStyle/>
<DefaultLanguage>Language.Русский</DefaultLanguage>
<BriefInformation/>
<DetailedInformation/>
<Copyright/>
<VendorInformationAddress/>
<ConfigurationInformationAddress/>
<DataLockControlMode>Managed</DataLockControlMode>
<ObjectAutonumerationMode>NotAutoFree</ObjectAutonumerationMode>
<ModalityUseMode>DontUse</ModalityUseMode>
<SynchronousPlatformExtensionAndAddInCallUseMode>DontUse</SynchronousPlatformExtensionAndAddInCallUseMode>
<InterfaceCompatibilityMode>Taxi</InterfaceCompatibilityMode>
<CompatibilityMode>Version8_3_10</CompatibilityMode>
<DefaultConstantsForm/>
</Properties>
<ChildObjects>
<Language>Русский</Language>
<Subsystem>ПодсистемаТест</Subsystem>
<Role>Администратор</Role>
<CommonModule>ОбщийМодульТест</CommonModule>
<Catalog>Справочник1</Catalog>
<Document>ТестовыйДокумент</Document>
</ChildObjects>
</Configuration>
</MetaDataObject>

View File

@ -0,0 +1,271 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.7">
<Document uuid="166ae4b2-4689-4202-b76c-1ca63e305b16">
<InternalInfo>
<xr:GeneratedType name="DocumentObject.ТестовыйДокумент" category="Object">
<xr:TypeId>12cd8645-67e4-4f52-97b6-33eb80c8cb3d</xr:TypeId>
<xr:ValueId>288ab939-f6f2-4f00-afe7-a1689e74c4cf</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="DocumentRef.ТестовыйДокумент" category="Ref">
<xr:TypeId>e6cfb2e1-7b41-4bbc-8e3a-63f11d2b29b9</xr:TypeId>
<xr:ValueId>c6b945c6-982e-4fed-964a-e9d8ce291c0c</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="DocumentSelection.ТестовыйДокумент" category="Selection">
<xr:TypeId>9c776a75-b90b-4f98-a717-e9f379102896</xr:TypeId>
<xr:ValueId>c22d1558-1e4f-4a52-8753-4c6f48c97b1f</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="DocumentList.ТестовыйДокумент" category="List">
<xr:TypeId>1728ad7b-98d0-4123-b7fb-75ee6af22e95</xr:TypeId>
<xr:ValueId>15d6ea31-fc29-4a88-af02-6c9eebc3aa15</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="DocumentManager.ТестовыйДокумент" category="Manager">
<xr:TypeId>e9cb002d-a63c-46a2-97b7-60385633b767</xr:TypeId>
<xr:ValueId>f19e8590-3b64-40d9-ba90-dd73efce2628</xr:ValueId>
</xr:GeneratedType>
</InternalInfo>
<Properties>
<Name>ТестовыйДокумент</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Тестовый документ</v8:content>
</v8:item>
</Synonym>
<Comment/>
<UseStandardCommands>true</UseStandardCommands>
<Numerator/>
<NumberType>String</NumberType>
<NumberLength>9</NumberLength>
<NumberAllowedLength>Variable</NumberAllowedLength>
<NumberPeriodicity>Nonperiodical</NumberPeriodicity>
<CheckUnique>true</CheckUnique>
<Autonumbering>true</Autonumbering>
<Characteristics/>
<BasedOn/>
<InputByString>
<xr:Field>Document.ТестовыйДокумент.StandardAttribute.Number</xr:Field>
</InputByString>
<CreateOnInput>Use</CreateOnInput>
<SearchStringModeOnInputByString>Begin</SearchStringModeOnInputByString>
<FullTextSearchOnInputByString>DontUse</FullTextSearchOnInputByString>
<ChoiceDataGetModeOnInputByString>Directly</ChoiceDataGetModeOnInputByString>
<DefaultObjectForm>Document.ТестовыйДокумент.Form.ФормаДокумента</DefaultObjectForm>
<DefaultListForm/>
<DefaultChoiceForm/>
<AuxiliaryObjectForm/>
<AuxiliaryListForm/>
<AuxiliaryChoiceForm/>
<Posting>Allow</Posting>
<RealTimePosting>Allow</RealTimePosting>
<RegisterRecordsDeletion>AutoDeleteOnUnpost</RegisterRecordsDeletion>
<RegisterRecordsWritingOnPost>WriteSelected</RegisterRecordsWritingOnPost>
<SequenceFilling>AutoFill</SequenceFilling>
<RegisterRecords/>
<PostInPrivilegedMode>true</PostInPrivilegedMode>
<UnpostInPrivilegedMode>true</UnpostInPrivilegedMode>
<IncludeHelpInContents>false</IncludeHelpInContents>
<DataLockFields/>
<DataLockControlMode>Managed</DataLockControlMode>
<FullTextSearch>DontUse</FullTextSearch>
<ObjectPresentation/>
<ExtendedObjectPresentation/>
<ListPresentation/>
<ExtendedListPresentation/>
<Explanation/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<DataHistory>DontUse</DataHistory>
</Properties>
<ChildObjects>
<Attribute uuid="d99abaf2-eae9-4b87-9290-9602869abb06">
<Properties>
<Name>Реквизит1</Name>
<Synonym/>
<Comment/>
<Type>
<v8:Type>xs:string</v8:Type>
<v8:StringQualifiers>
<v8:Length>10</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:type="xs:string"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Indexing>DontIndex</Indexing>
<FullTextSearch>DontUse</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
<Attribute uuid="7c781ffa-00ec-45d7-928b-379028d8d41e">
<Properties>
<Name>Реквизит2</Name>
<Synonym/>
<Comment/>
<Type>
<v8:Type>cfg:CatalogRef.Справочник1</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Indexing>DontIndex</Indexing>
<FullTextSearch>DontUse</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
<Form>ФормаДокумента</Form>
<TabularSection uuid="1a9690a8-f078-40ac-965c-b5ae42a40da6">
<InternalInfo>
<xr:GeneratedType name="DocumentTabularSection.ТестовыйДокумент.ТабличнаяЧасть1" category="TabularSection">
<xr:TypeId>d632e036-d75c-4ff8-8b2c-46006e419dd3</xr:TypeId>
<xr:ValueId>a02e60cc-699d-47ac-bc5b-b5f1cab00e7f</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="DocumentTabularSectionRow.ТестовыйДокумент.ТабличнаяЧасть1" category="TabularSectionRow">
<xr:TypeId>7bf838d8-2d5a-429c-a3cd-954154d18d51</xr:TypeId>
<xr:ValueId>ebc3195f-7749-4ff0-9ce5-e0b7c4aca343</xr:ValueId>
</xr:GeneratedType>
</InternalInfo>
<Properties>
<Name>ТабличнаяЧасть1</Name>
<Synonym/>
<Comment/>
<ToolTip/>
<FillChecking>DontCheck</FillChecking>
</Properties>
<ChildObjects>
<Attribute uuid="25228916-a86f-4c9f-adcb-caf22243c2ad">
<Properties>
<Name>Реквизит1</Name>
<Synonym/>
<Comment/>
<Type>
<v8:Type>v8:ValueStorage</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Indexing>DontIndex</Indexing>
<FullTextSearch>DontUse</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
<Attribute uuid="ff3484e3-c880-4504-a4be-7f7fc9d94b95">
<Properties>
<Name>Реквизит2</Name>
<Synonym/>
<Comment/>
<Type>
<v8:Type>cfg:CatalogRef.Справочник1</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Indexing>DontIndex</Indexing>
<FullTextSearch>DontUse</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
<Attribute uuid="5aa085e7-1aed-4dd3-a673-52c6183d9631">
<Properties>
<Name>Реквизит3</Name>
<Synonym/>
<Comment/>
<Type>
<v8:Type>xs:boolean</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Indexing>DontIndex</Indexing>
<FullTextSearch>DontUse</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
</ChildObjects>
</TabularSection>
</ChildObjects>
</Document>
</MetaDataObject>

View File

@ -0,0 +1,6 @@

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Тест = "Это просто тестирование сравнения конфигураций в модуле документа";
КонецПроцедуры

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.7">
<Form uuid="5823fee4-aac1-4768-b623-c55ff0970b60">
<Properties>
<Name>ФормаДокумента</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Форма документа</v8:content>
</v8:item>
</Synonym>
<Comment/>
<FormType>Managed</FormType>
<IncludeHelpInContents>false</IncludeHelpInContents>
<UsePurposes>
<v8:Value xsi:type="app:ApplicationUsePurpose">PlatformApplication</v8:Value>
<v8:Value xsi:type="app:ApplicationUsePurpose">MobilePlatformApplication</v8:Value>
</UsePurposes>
</Properties>
</Form>
</MetaDataObject>

View File

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<Form xmlns="http://v8.1c.ru/8.3/xcf/logform" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.7">
<AutoTime>CurrentOrLast</AutoTime>
<UsePostingMode>Auto</UsePostingMode>
<RepostOnWrite>true</RepostOnWrite>
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1"/>
<Events>
<Event name="OnCreateAtServer">ПриСозданииНаСервере</Event>
</Events>
<ChildItems>
<InputField name="Номер" id="7">
<DataPath>Объект.Number</DataPath>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="НомерКонтекстноеМеню" id="2"/>
<ExtendedTooltip name="НомерРасширеннаяПодсказка" id="3"/>
</InputField>
<InputField name="Дата" id="4">
<DataPath>Объект.Date</DataPath>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="ДатаКонтекстноеМеню" id="5"/>
<ExtendedTooltip name="ДатаРасширеннаяПодсказка" id="6"/>
</InputField>
</ChildItems>
<Attributes>
<Attribute name="Объект" id="1">
<Type>
<v8:Type>cfg:DocumentObject.ТестовыйДокумент</v8:Type>
</Type>
<MainAttribute>true</MainAttribute>
<SavedData>true</SavedData>
<UseAlways>
<Field>Объект.RegisterRecords</Field>
</UseAlways>
</Attribute>
</Attributes>
</Form>

View File

@ -0,0 +1,7 @@

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Тест = "Это просто тестирование сравнения конфигураций в форме документа";
КонецПроцедуры

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.7">
<Language uuid="401e926f-d313-440b-9a97-3d176c2859b9">
<Properties>
<Name>Русский</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Русский</v8:content>
</v8:item>
</Synonym>
<Comment/>
<LanguageCode>ru</LanguageCode>
</Properties>
</Language>
</MetaDataObject>

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.7">
<Role uuid="f92f420d-e323-431c-94b4-151d5175a4e0">
<Properties>
<Name>Администратор</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Администратор</v8:content>
</v8:item>
</Synonym>
<Comment/>
</Properties>
</Role>
</MetaDataObject>

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<Rights xmlns="http://v8.1c.ru/8.2/roles" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Rights" version="2.7">
<setForNewObjects>true</setForNewObjects>
<setForAttributesByDefault>true</setForAttributesByDefault>
<independentRightsOfChildObjects>false</independentRightsOfChildObjects>
<object>
<name>Document.ТестовыйДокумент</name>
<right>
<name>InteractiveDelete</name>
<value>false</value>
</right>
<right>
<name>InteractiveDeleteMarked</name>
<value>false</value>
</right>
</object>
<object>
<name>Subsystem.ПодсистемаТест</name>
<right>
<name>View</name>
<value>false</value>
</right>
</object>
</Rights>

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.7">
<Subsystem uuid="b99a2492-b58f-414e-8279-1db48fc7f54c">
<Properties>
<Name>ПодсистемаТест</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Подсистема тест</v8:content>
</v8:item>
</Synonym>
<Comment/>
<IncludeHelpInContents>true</IncludeHelpInContents>
<IncludeInCommandInterface>true</IncludeInCommandInterface>
<Explanation/>
<Picture/>
<Content>
<xr:Item xsi:type="xr:MDObjectRef">CommonModule.ОбщийМодульТест</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">Document.ТестовыйДокумент</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">Catalog.Справочник1</xr:Item>
</Content>
</Properties>
<ChildObjects/>
</Subsystem>
</MetaDataObject>

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<CommonModule uuid="2410127c-df4a-4db7-90de-6be3de96a2f0">
<Properties>
<Name>ОбщийМодульТест</Name>
<ObjectBelonging>Adopted</ObjectBelonging>
<Global>false</Global>
<ClientManagedApplication>false</ClientManagedApplication>
<Server>true</Server>
<ExternalConnection>false</ExternalConnection>
<ClientOrdinaryApplication>false</ClientOrdinaryApplication>
<ServerCall>false</ServerCall>
</Properties>
</CommonModule>
</MetaDataObject>

View File

@ -0,0 +1,8 @@

&Вместо("ТестПроцедуры")
Процедура ADDTSTТестПроцедуры()
// Вставить содержимое метода.
Тест = "Переопределение в расширении";
КонецПроцедуры

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<ConfigDumpInfo xmlns="http://v8.1c.ru/8.3/xcf/dumpinfo" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" format="Hierarchical" version="2.4">
<ConfigVersions>
<Metadata name="CommonModule.ОбщийМодульТест" id="2410127c-df4a-4db7-90de-6be3de96a2f0" configVersion="bf76832ec1eeb433a642d8a800a6f05e187543a2"/>
<Metadata name="CommonModule.ОбщийМодульТест.Module" id="2410127c-df4a-4db7-90de-6be3de96a2f0.0" configVersion="aca107f0b8858444cd07ebbffceddbd3c85002e5"/>
<Metadata name="Configuration.РасширениеТест" id="fe67f727-4b7c-413d-b0b9-2ba3af7cbd9e" configVersion="c77c7beecf90c2b8abd97018df42914b73852798"/>
<Metadata name="Document.ТестовыйДокумент" id="901aca2a-0992-47a0-a18d-d4757682a071" configVersion="65fd12ed01de51a0945f6a15f1e13d073c9010f2"/>
<Metadata name="Document.ТестовыйДокумент.Form.ФормаДокумента" id="c0762482-4839-447f-9633-ed3a4b7727fb" configVersion="9c6d85a889487c1abbb9544cb54380b0534f2835"/>
<Metadata name="Document.ТестовыйДокумент.Form.ФормаДокумента.Form" id="c0762482-4839-447f-9633-ed3a4b7727fb.0" configVersion="49194a1807c477ca2ea6378c9ec03c7ee2c7660f"/>
<Metadata name="Language.Русский" id="7db28f26-4f45-4c4f-9757-05fddaee40c1" configVersion="7a7736fa48fddaed3baab0fbbe0d39300f2c06cf"/>
</ConfigVersions>
</ConfigDumpInfo>

View File

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<Configuration uuid="fe67f727-4b7c-413d-b0b9-2ba3af7cbd9e">
<InternalInfo>
<xr:ContainedObject>
<xr:ClassId>9cd510cd-abfc-11d4-9434-004095e12fc7</xr:ClassId>
<xr:ObjectId>e796b40b-c503-4c5e-945f-871874d5a84f</xr:ObjectId>
</xr:ContainedObject>
<xr:ContainedObject>
<xr:ClassId>9fcd25a0-4822-11d4-9414-008048da11f9</xr:ClassId>
<xr:ObjectId>1ef6003e-749f-46c4-b7ba-87ea0964089b</xr:ObjectId>
</xr:ContainedObject>
<xr:ContainedObject>
<xr:ClassId>e3687481-0a87-462c-a166-9f34594f9bba</xr:ClassId>
<xr:ObjectId>80e30f82-f35b-4b40-a0c0-c2e4c16640e2</xr:ObjectId>
</xr:ContainedObject>
<xr:ContainedObject>
<xr:ClassId>9de14907-ec23-4a07-96f0-85521cb6b53b</xr:ClassId>
<xr:ObjectId>cbb79db0-2948-456b-8161-b0e5feeb7174</xr:ObjectId>
</xr:ContainedObject>
<xr:ContainedObject>
<xr:ClassId>51f2d5d8-ea4d-4064-8892-82951750031e</xr:ClassId>
<xr:ObjectId>bcefdba1-6272-4706-9f9b-82600a9a5f0d</xr:ObjectId>
</xr:ContainedObject>
<xr:ContainedObject>
<xr:ClassId>e68182ea-4237-4383-967f-90c1e3370bc7</xr:ClassId>
<xr:ObjectId>8e8463e0-5cfe-4881-976e-dee313dc22bb</xr:ObjectId>
</xr:ContainedObject>
</InternalInfo>
<Properties>
<Name>РасширениеТест</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Расширение тест</v8:content>
</v8:item>
</Synonym>
<Comment/>
<ConfigurationExtensionPurpose>AddOn</ConfigurationExtensionPurpose>
<ObjectBelonging>Adopted</ObjectBelonging>
<NamePrefix>ADDTST</NamePrefix>
<ConfigurationExtensionCompatibilityMode>Version8_3_10</ConfigurationExtensionCompatibilityMode>
<DefaultRunMode>ManagedApplication</DefaultRunMode>
<UsePurposes>
<v8:Value xsi:type="app:ApplicationUsePurpose">PersonalComputer</v8:Value>
</UsePurposes>
<ScriptVariant>Russian</ScriptVariant>
<Vendor/>
<Version/>
<DefaultLanguage>Language.Русский</DefaultLanguage>
<InterfaceCompatibilityMode>Taxi</InterfaceCompatibilityMode>
<CompatibilityMode>Version8_3_10</CompatibilityMode>
</Properties>
<ChildObjects>
<Language>Русский</Language>
<CommonModule>ОбщийМодульТест</CommonModule>
<Document>ТестовыйДокумент</Document>
</ChildObjects>
</Configuration>
</MetaDataObject>

View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<Document uuid="901aca2a-0992-47a0-a18d-d4757682a071">
<InternalInfo>
<xr:GeneratedType name="DocumentObject.ТестовыйДокумент" category="Object">
<xr:TypeId>c9de9adf-490d-4f67-a092-4cdfc2e5eae2</xr:TypeId>
<xr:ValueId>8e0c32a8-db8d-4563-a13c-01ae7e7d054b</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="DocumentRef.ТестовыйДокумент" category="Ref">
<xr:TypeId>f245c3fe-8458-4cfa-bb80-57eacad6a01f</xr:TypeId>
<xr:ValueId>e1e76c79-5718-401c-846d-7d181b57c5a1</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="DocumentSelection.ТестовыйДокумент" category="Selection">
<xr:TypeId>8c5eee5b-ebad-411a-b117-b8a3a7ddb446</xr:TypeId>
<xr:ValueId>cb26fff0-c762-4a2e-a3d1-01a28f2423ad</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="DocumentList.ТестовыйДокумент" category="List">
<xr:TypeId>dc6f6f7f-5ed9-4281-acd7-f7baee3e0bd7</xr:TypeId>
<xr:ValueId>97b5bc52-7f3d-422c-a62c-d085abb77ac6</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="DocumentManager.ТестовыйДокумент" category="Manager">
<xr:TypeId>1519094e-2d28-4e8c-8d1d-bb010d6b6899</xr:TypeId>
<xr:ValueId>86199801-900d-49ea-8779-33987d4c59a6</xr:ValueId>
</xr:GeneratedType>
</InternalInfo>
<Properties>
<Name>ТестовыйДокумент</Name>
<ObjectBelonging>Adopted</ObjectBelonging>
<NumberType>String</NumberType>
<NumberLength>9</NumberLength>
<NumberAllowedLength>Variable</NumberAllowedLength>
</Properties>
<ChildObjects>
<Form>ФормаДокумента</Form>
</ChildObjects>
</Document>
</MetaDataObject>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<Form uuid="c0762482-4839-447f-9633-ed3a4b7727fb">
<Properties>
<Name>ФормаДокумента</Name>
<ObjectBelonging>Adopted</ObjectBelonging>
<FormType>Managed</FormType>
</Properties>
</Form>
</MetaDataObject>

View File

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8"?>
<Form xmlns="http://v8.1c.ru/8.3/xcf/logform" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<AutoTime>CurrentOrLast</AutoTime>
<UsePostingMode>Auto</UsePostingMode>
<RepostOnWrite>true</RepostOnWrite>
<AutoCommandBar name="ФормаКоманднаяПанель" id="15"/>
<Events>
<Event name="OnCreateAtServer" callType="Override">ADDTSTПриСозданииНаСервереВместо</Event>
</Events>
<ChildItems>
<InputField name="Номер" id="7">
<DataPath>Объект.Number</DataPath>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="НомерКонтекстноеМеню" id="14"/>
<ExtendedTooltip name="НомерРасширеннаяПодсказка" id="13"/>
</InputField>
<InputField name="Дата" id="12">
<DataPath>Объект.Date</DataPath>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="ДатаКонтекстноеМеню" id="11"/>
<ExtendedTooltip name="ДатаРасширеннаяПодсказка" id="10"/>
</InputField>
</ChildItems>
<Attributes>
<Attribute name="Объект" id="8">
<Type>
<v8:Type>cfg:DocumentObject.ТестовыйДокумент</v8:Type>
</Type>
<MainAttribute>true</MainAttribute>
<SavedData>true</SavedData>
<UseAlways>
<Field>Объект.RegisterRecords</Field>
</UseAlways>
</Attribute>
</Attributes>
<BaseForm version="2.4">
<AutoTime>CurrentOrLast</AutoTime>
<UsePostingMode>Auto</UsePostingMode>
<RepostOnWrite>true</RepostOnWrite>
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1"/>
<ChildItems>
<InputField name="Номер" id="9">
<DataPath>Объект.Number</DataPath>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="НомерКонтекстноеМеню" id="2"/>
<ExtendedTooltip name="НомерРасширеннаяПодсказка" id="3"/>
</InputField>
<InputField name="Дата" id="4">
<DataPath>Объект.Date</DataPath>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="ДатаКонтекстноеМеню" id="5"/>
<ExtendedTooltip name="ДатаРасширеннаяПодсказка" id="6"/>
</InputField>
</ChildItems>
<Attributes>
<Attribute name="Объект" id="1">
<Type>
<v8:Type>cfg:DocumentObject.ТестовыйДокумент</v8:Type>
</Type>
<MainAttribute>true</MainAttribute>
<SavedData>true</SavedData>
<UseAlways>
<Field>Объект.RegisterRecords</Field>
</UseAlways>
</Attribute>
</Attributes>
</BaseForm>
</Form>

View File

@ -0,0 +1,7 @@

&НаСервере
Процедура ADDTSTПриСозданииНаСервереВместо(Отказ, СтандартнаяОбработка)
Тест = "Это переопределение обработчика в форме документа";
КонецПроцедуры

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<Language uuid="7db28f26-4f45-4c4f-9757-05fddaee40c1">
<Properties>
<Name>Русский</Name>
<ObjectBelonging>Adopted</ObjectBelonging>
<LanguageCode>ru</LanguageCode>
</Properties>
</Language>
</MetaDataObject>

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<CommonModule uuid="a44a75b2-7156-4865-8baf-2c6cc8dbc3bc">
<Properties>
<Name>ОбщийМодульТест</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Общий модуль тест</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Global>false</Global>
<ClientManagedApplication>false</ClientManagedApplication>
<Server>true</Server>
<ExternalConnection>false</ExternalConnection>
<ClientOrdinaryApplication>false</ClientOrdinaryApplication>
<ServerCall>false</ServerCall>
<Privileged>false</Privileged>
<ReturnValuesReuse>DontUse</ReturnValuesReuse>
</Properties>
</CommonModule>
</MetaDataObject>

View File

@ -0,0 +1,7 @@
Процедура ТестПроцедуры()
Тест = "Это просто тестирование сравнения конфигураций";
Тест = Тест + " дополнен в обновлении...";
КонецПроцедуры

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<ConfigDumpInfo xmlns="http://v8.1c.ru/8.3/xcf/dumpinfo" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" format="Hierarchical" version="2.4">
<ConfigVersions>
<Metadata name="CommonModule.ОбщийМодульТест" id="a44a75b2-7156-4865-8baf-2c6cc8dbc3bc" configVersion="9b8b58499e2d104cbe3b082c4bf6454100000000"/>
<Metadata name="CommonModule.ОбщийМодульТест.Module" id="a44a75b2-7156-4865-8baf-2c6cc8dbc3bc.0" configVersion="98d78c02f6379c47a8de7ab76de25c9800000000"/>
<Metadata name="Configuration.ТестированиеСравнения" id="b8f2bed8-62af-456a-bd48-48af2633fe61" configVersion="07c1fa90cc5a6d45b4b44eb29956c97900000000"/>
<Metadata name="Document.ТестовыйДокумент" id="166ae4b2-4689-4202-b76c-1ca63e305b16" configVersion="1f77c4c1b4479745a804b9ae897c5e8100000000"/>
<Metadata name="Document.ТестовыйДокумент.Form.ФормаДокумента" id="5823fee4-aac1-4768-b623-c55ff0970b60" configVersion="6b34d0f8322abd4a82fe23ba928fb51400000000"/>
<Metadata name="Document.ТестовыйДокумент.Form.ФормаДокумента.Form" id="5823fee4-aac1-4768-b623-c55ff0970b60.0" configVersion="375f44bf66f57b48bed7eec2b9f0027d00000000"/>
<Metadata name="Document.ТестовыйДокумент.ObjectModule" id="166ae4b2-4689-4202-b76c-1ca63e305b16.0" configVersion="1cbabf8c5b076d47aa6a1a708774de2400000000"/>
<Metadata name="Language.Русский" id="401e926f-d313-440b-9a97-3d176c2859b9" configVersion="f0540697e27c7447b04da8c857bc521b00000000"/>
<Metadata name="Role.Администратор" id="f92f420d-e323-431c-94b4-151d5175a4e0" configVersion="b713287664fd864783e5c92a8d3df41700000000"/>
<Metadata name="Role.Администратор.Rights" id="f92f420d-e323-431c-94b4-151d5175a4e0.0" configVersion="4068a1b3e6e4e84d88261b8d2066214800000000"/>
<Metadata name="Subsystem.ПодсистемаТест" id="b99a2492-b58f-414e-8279-1db48fc7f54c" configVersion="efe785ec8f5ec14aa45ccc0218d0b50300000000"/>
</ConfigVersions>
</ConfigDumpInfo>

132
tests/fixtures/release/Configuration.xml vendored Normal file
View File

@ -0,0 +1,132 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<Configuration uuid="b8f2bed8-62af-456a-bd48-48af2633fe61">
<InternalInfo>
<xr:ContainedObject>
<xr:ClassId>9cd510cd-abfc-11d4-9434-004095e12fc7</xr:ClassId>
<xr:ObjectId>804c66e4-c30d-409b-8591-7ee38de6cf58</xr:ObjectId>
</xr:ContainedObject>
<xr:ContainedObject>
<xr:ClassId>9fcd25a0-4822-11d4-9414-008048da11f9</xr:ClassId>
<xr:ObjectId>46aa5b38-d653-4c7b-976e-d50ab79964e4</xr:ObjectId>
</xr:ContainedObject>
<xr:ContainedObject>
<xr:ClassId>e3687481-0a87-462c-a166-9f34594f9bba</xr:ClassId>
<xr:ObjectId>8d0e858b-89e5-4d0d-a61c-dd7dc2207f3f</xr:ObjectId>
</xr:ContainedObject>
<xr:ContainedObject>
<xr:ClassId>9de14907-ec23-4a07-96f0-85521cb6b53b</xr:ClassId>
<xr:ObjectId>e3a6ca97-02b1-428c-acd6-d52cad356652</xr:ObjectId>
</xr:ContainedObject>
<xr:ContainedObject>
<xr:ClassId>51f2d5d8-ea4d-4064-8892-82951750031e</xr:ClassId>
<xr:ObjectId>568f0d16-cbfa-4b11-8f18-6ce8014fc83f</xr:ObjectId>
</xr:ContainedObject>
<xr:ContainedObject>
<xr:ClassId>e68182ea-4237-4383-967f-90c1e3370bc7</xr:ClassId>
<xr:ObjectId>2ac838b4-c5db-4ad6-9cc5-8d480c868fcf</xr:ObjectId>
</xr:ContainedObject>
</InternalInfo>
<Properties>
<Name>ТестированиеСравнения</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Тестирование сравнения</v8:content>
</v8:item>
</Synonym>
<Comment/>
<NamePrefix/>
<ConfigurationExtensionCompatibilityMode>Version8_3_10</ConfigurationExtensionCompatibilityMode>
<DefaultRunMode>ManagedApplication</DefaultRunMode>
<UsePurposes>
<v8:Value xsi:type="app:ApplicationUsePurpose">PersonalComputer</v8:Value>
</UsePurposes>
<ScriptVariant>Russian</ScriptVariant>
<DefaultRoles/>
<Vendor/>
<Version/>
<UpdateCatalogAddress/>
<IncludeHelpInContents>false</IncludeHelpInContents>
<UseManagedFormInOrdinaryApplication>false</UseManagedFormInOrdinaryApplication>
<UseOrdinaryFormInManagedApplication>false</UseOrdinaryFormInManagedApplication>
<AdditionalFullTextSearchDictionaries/>
<CommonSettingsStorage/>
<ReportsUserSettingsStorage/>
<ReportsVariantsStorage/>
<FormDataSettingsStorage/>
<DynamicListsUserSettingsStorage/>
<Content/>
<DefaultReportForm/>
<DefaultReportVariantForm/>
<DefaultReportSettingsForm/>
<DefaultDynamicListSettingsForm/>
<DefaultSearchForm/>
<RequiredMobileApplicationPermissions>
<v8:pair>
<v8:Key xsi:type="app:RequiredMobileApplicationPermissions">Multimedia</v8:Key>
<v8:Value xsi:type="xs:boolean">false</v8:Value>
</v8:pair>
<v8:pair>
<v8:Key xsi:type="app:RequiredMobileApplicationPermissions">Location</v8:Key>
<v8:Value xsi:type="xs:boolean">false</v8:Value>
</v8:pair>
<v8:pair>
<v8:Key xsi:type="app:RequiredMobileApplicationPermissions">Contacts</v8:Key>
<v8:Value xsi:type="xs:boolean">false</v8:Value>
</v8:pair>
<v8:pair>
<v8:Key xsi:type="app:RequiredMobileApplicationPermissions">Calendars</v8:Key>
<v8:Value xsi:type="xs:boolean">false</v8:Value>
</v8:pair>
<v8:pair>
<v8:Key xsi:type="app:RequiredMobileApplicationPermissions">Telephony</v8:Key>
<v8:Value xsi:type="xs:boolean">false</v8:Value>
</v8:pair>
<v8:pair>
<v8:Key xsi:type="app:RequiredMobileApplicationPermissions">PushNotification</v8:Key>
<v8:Value xsi:type="xs:boolean">false</v8:Value>
</v8:pair>
<v8:pair>
<v8:Key xsi:type="app:RequiredMobileApplicationPermissions">LocalNotification</v8:Key>
<v8:Value xsi:type="xs:boolean">false</v8:Value>
</v8:pair>
<v8:pair>
<v8:Key xsi:type="app:RequiredMobileApplicationPermissions">Print</v8:Key>
<v8:Value xsi:type="xs:boolean">false</v8:Value>
</v8:pair>
<v8:pair>
<v8:Key xsi:type="app:RequiredMobileApplicationPermissions">InAppPurchases</v8:Key>
<v8:Value xsi:type="xs:boolean">false</v8:Value>
</v8:pair>
<v8:pair>
<v8:Key xsi:type="app:RequiredMobileApplicationPermissions">Ads</v8:Key>
<v8:Value xsi:type="xs:boolean">false</v8:Value>
</v8:pair>
</RequiredMobileApplicationPermissions>
<MainClientApplicationWindowMode>Normal</MainClientApplicationWindowMode>
<DefaultInterface/>
<DefaultStyle/>
<DefaultLanguage>Language.Русский</DefaultLanguage>
<BriefInformation/>
<DetailedInformation/>
<Copyright/>
<VendorInformationAddress/>
<ConfigurationInformationAddress/>
<DataLockControlMode>Managed</DataLockControlMode>
<ObjectAutonumerationMode>NotAutoFree</ObjectAutonumerationMode>
<ModalityUseMode>DontUse</ModalityUseMode>
<SynchronousPlatformExtensionAndAddInCallUseMode>DontUse</SynchronousPlatformExtensionAndAddInCallUseMode>
<InterfaceCompatibilityMode>Taxi</InterfaceCompatibilityMode>
<CompatibilityMode>Version8_3_10</CompatibilityMode>
<DefaultConstantsForm/>
</Properties>
<ChildObjects>
<Language>Русский</Language>
<Subsystem>ПодсистемаТест</Subsystem>
<Role>Администратор</Role>
<CommonModule>ОбщийМодульТест</CommonModule>
<Document>ТестовыйДокумент</Document>
</ChildObjects>
</Configuration>
</MetaDataObject>

View File

@ -0,0 +1,81 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<Document uuid="166ae4b2-4689-4202-b76c-1ca63e305b16">
<InternalInfo>
<xr:GeneratedType name="DocumentObject.ТестовыйДокумент" category="Object">
<xr:TypeId>12cd8645-67e4-4f52-97b6-33eb80c8cb3d</xr:TypeId>
<xr:ValueId>288ab939-f6f2-4f00-afe7-a1689e74c4cf</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="DocumentRef.ТестовыйДокумент" category="Ref">
<xr:TypeId>e6cfb2e1-7b41-4bbc-8e3a-63f11d2b29b9</xr:TypeId>
<xr:ValueId>c6b945c6-982e-4fed-964a-e9d8ce291c0c</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="DocumentSelection.ТестовыйДокумент" category="Selection">
<xr:TypeId>9c776a75-b90b-4f98-a717-e9f379102896</xr:TypeId>
<xr:ValueId>c22d1558-1e4f-4a52-8753-4c6f48c97b1f</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="DocumentList.ТестовыйДокумент" category="List">
<xr:TypeId>1728ad7b-98d0-4123-b7fb-75ee6af22e95</xr:TypeId>
<xr:ValueId>15d6ea31-fc29-4a88-af02-6c9eebc3aa15</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="DocumentManager.ТестовыйДокумент" category="Manager">
<xr:TypeId>e9cb002d-a63c-46a2-97b7-60385633b767</xr:TypeId>
<xr:ValueId>f19e8590-3b64-40d9-ba90-dd73efce2628</xr:ValueId>
</xr:GeneratedType>
</InternalInfo>
<Properties>
<Name>ТестовыйДокумент</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Тестовый документ</v8:content>
</v8:item>
</Synonym>
<Comment/>
<UseStandardCommands>true</UseStandardCommands>
<Numerator/>
<NumberType>String</NumberType>
<NumberLength>9</NumberLength>
<NumberAllowedLength>Variable</NumberAllowedLength>
<NumberPeriodicity>Nonperiodical</NumberPeriodicity>
<CheckUnique>true</CheckUnique>
<Autonumbering>true</Autonumbering>
<Characteristics/>
<BasedOn/>
<InputByString>
<xr:Field>Document.ТестовыйДокумент.StandardAttribute.Number</xr:Field>
</InputByString>
<CreateOnInput>Use</CreateOnInput>
<SearchStringModeOnInputByString>Begin</SearchStringModeOnInputByString>
<FullTextSearchOnInputByString>DontUse</FullTextSearchOnInputByString>
<ChoiceDataGetModeOnInputByString>Directly</ChoiceDataGetModeOnInputByString>
<DefaultObjectForm>Document.ТестовыйДокумент.Form.ФормаДокумента</DefaultObjectForm>
<DefaultListForm/>
<DefaultChoiceForm/>
<AuxiliaryObjectForm/>
<AuxiliaryListForm/>
<AuxiliaryChoiceForm/>
<Posting>Allow</Posting>
<RealTimePosting>Allow</RealTimePosting>
<RegisterRecordsDeletion>AutoDeleteOnUnpost</RegisterRecordsDeletion>
<RegisterRecordsWritingOnPost>WriteSelected</RegisterRecordsWritingOnPost>
<SequenceFilling>AutoFill</SequenceFilling>
<RegisterRecords/>
<PostInPrivilegedMode>true</PostInPrivilegedMode>
<UnpostInPrivilegedMode>true</UnpostInPrivilegedMode>
<IncludeHelpInContents>false</IncludeHelpInContents>
<DataLockFields/>
<DataLockControlMode>Managed</DataLockControlMode>
<FullTextSearch>DontUse</FullTextSearch>
<ObjectPresentation/>
<ExtendedObjectPresentation/>
<ListPresentation/>
<ExtendedListPresentation/>
<Explanation/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
</Properties>
<ChildObjects>
<Form>ФормаДокумента</Form>
</ChildObjects>
</Document>
</MetaDataObject>

View File

@ -0,0 +1,6 @@

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Тест = "Это просто тестирование сравнения конфигураций в модуле документа";
КонецПроцедуры

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<Form uuid="5823fee4-aac1-4768-b623-c55ff0970b60">
<Properties>
<Name>ФормаДокумента</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Форма документа</v8:content>
</v8:item>
</Synonym>
<Comment/>
<FormType>Managed</FormType>
<IncludeHelpInContents>false</IncludeHelpInContents>
<UsePurposes>
<v8:Value xsi:type="app:ApplicationUsePurpose">PersonalComputer</v8:Value>
<v8:Value xsi:type="app:ApplicationUsePurpose">MobileDevice</v8:Value>
</UsePurposes>
</Properties>
</Form>
</MetaDataObject>

View File

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<Form xmlns="http://v8.1c.ru/8.3/xcf/logform" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<AutoTime>CurrentOrLast</AutoTime>
<UsePostingMode>Auto</UsePostingMode>
<RepostOnWrite>true</RepostOnWrite>
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1"/>
<Events>
<Event name="OnCreateAtServer">ПриСозданииНаСервере</Event>
</Events>
<ChildItems>
<InputField name="Номер" id="7">
<DataPath>Объект.Number</DataPath>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="НомерКонтекстноеМеню" id="2"/>
<ExtendedTooltip name="НомерРасширеннаяПодсказка" id="3"/>
</InputField>
<InputField name="Дата" id="4">
<DataPath>Объект.Date</DataPath>
<EditMode>EnterOnInput</EditMode>
<ContextMenu name="ДатаКонтекстноеМеню" id="5"/>
<ExtendedTooltip name="ДатаРасширеннаяПодсказка" id="6"/>
</InputField>
</ChildItems>
<Attributes>
<Attribute name="Объект" id="1">
<Type>
<v8:Type>cfg:DocumentObject.ТестовыйДокумент</v8:Type>
</Type>
<MainAttribute>true</MainAttribute>
<SavedData>true</SavedData>
<UseAlways>
<Field>Объект.RegisterRecords</Field>
</UseAlways>
</Attribute>
</Attributes>
</Form>

View File

@ -0,0 +1,9 @@

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Тест = "Это просто тестирование сравнения конфигураций в форме документа";
Тест = Тест + " дополнен в обновлении...";
КонецПроцедуры

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<Language uuid="401e926f-d313-440b-9a97-3d176c2859b9">
<Properties>
<Name>Русский</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Русский</v8:content>
</v8:item>
</Synonym>
<Comment/>
<LanguageCode>ru</LanguageCode>
</Properties>
</Language>
</MetaDataObject>

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<Role uuid="f92f420d-e323-431c-94b4-151d5175a4e0">
<Properties>
<Name>Администратор</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Администратор</v8:content>
</v8:item>
</Synonym>
<Comment/>
</Properties>
</Role>
</MetaDataObject>

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<Rights xmlns="http://v8.1c.ru/8.2/roles" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Rights" version="2.4">
<setForNewObjects>true</setForNewObjects>
<setForAttributesByDefault>true</setForAttributesByDefault>
<independentRightsOfChildObjects>false</independentRightsOfChildObjects>
<object>
<name>Document.ТестовыйДокумент</name>
<right>
<name>InteractiveDelete</name>
<value>false</value>
</right>
<right>
<name>InteractiveDeleteMarked</name>
<value>false</value>
</right>
</object>
<object>
<name>Subsystem.ПодсистемаТест</name>
<right>
<name>View</name>
<value>false</value>
</right>
</object>
</Rights>

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<Subsystem uuid="b99a2492-b58f-414e-8279-1db48fc7f54c">
<Properties>
<Name>ПодсистемаТест</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Подсистема тест</v8:content>
</v8:item>
</Synonym>
<Comment/>
<IncludeHelpInContents>true</IncludeHelpInContents>
<IncludeInCommandInterface>true</IncludeInCommandInterface>
<Explanation/>
<Picture/>
<Content>
<xr:Item xsi:type="xr:MDObjectRef">CommonModule.ОбщийМодульТест</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">Document.ТестовыйДокумент</xr:Item>
</Content>
</Properties>
<ChildObjects/>
</Subsystem>
</MetaDataObject>

181
tests/test-app.os Normal file
View File

@ -0,0 +1,181 @@
///////////////////////////////////////////////////////////////////
//
// Тестирование основной функциональности пакета
// Проверка на соответствие выгрузки эталону
//
// (с) BIA Technologies, LLC
//
///////////////////////////////////////////////////////////////////
#Использовать logos
#Использовать asserts
#Использовать tempfiles
#Использовать 1commands
#Использовать ".."
///////////////////////////////////////////////////////////////////
Перем Лог;
Перем МенеджерВременныхФайлов;
Перем РасширениеПуть;
Перем РодительПуть;
Перем ПоставкаПуть;
Перем Парсер;
///////////////////////////////////////////////////////////////////
// Программный интерфейс
///////////////////////////////////////////////////////////////////
Функция ПолучитьСписокТестов(Знач ЮнитТестирование) Экспорт
МассивТестов = Новый Массив;
МассивТестов.Добавить("ТестПарсера_ПолучитьПрефиксРасширения");
МассивТестов.Добавить("ТестПарсера_ВыполнитьЧтениеМетодовМодуля");
МассивТестов.Добавить("ТестПарсера_ПолучитьПереопределенныеОбъекты");
МассивТестов.Добавить("ТестПарсера_ПрочитатьМетодыОсновнойКонфигурации");
МассивТестов.Добавить("ТестПриложения_ПолучитьРезультатСравнения");
МассивТестов.Добавить("ТестПриложения_СохранитьРезультатСравнения");
МассивТестов.Добавить("ТестПриложения_ПолучитьРезультатСравненияОбъектов");
Возврат МассивТестов;
КонецФункции
Процедура ПередЗапускомТеста() Экспорт
// служебные переменные
РасширениеПуть = ОбъединитьПути("tests", "fixtures", "exts", "ADDTST");
РодительПуть = ОбъединитьПути("tests", "fixtures", "configuration");
ПоставкаПуть = ОбъединитьПути("tests", "fixtures", "release");
ОбъектНастроек = ПараметрыПриложения;
// Логирование
Лог = Логирование.ПолучитьЛог(ОбъектНастроек.ИмяЛогаСистемы());
Лог.УстановитьРаскладку(ОбъектНастроек);
Парсер = Новый ПарсерМодулейРасширения(РасширениеПуть);
МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов;
КонецПроцедуры
Процедура ПослеЗапускаТеста() Экспорт
МенеджерВременныхФайлов.Удалить();
КонецПроцедуры
///////////////////////////////////////////////////////////////////
// Шаги
///////////////////////////////////////////////////////////////////
Процедура ТестПарсера_ПолучитьПрефиксРасширения() Экспорт
ФайлКонфигурации = ОбъединитьПути(РасширениеПуть, "Configuration.xml");
Префикс = Парсер.ПрочитатьПрефиксРасширения(ФайлКонфигурации);
Утверждения.ПроверитьРавенство("ADDTST", Префикс);
КонецПроцедуры
Процедура ТестПарсера_ВыполнитьЧтениеМетодовМодуля() Экспорт
ФайлКонфигурации = ОбъединитьПути(РасширениеПуть, "Configuration.xml");
Префикс = Парсер.ПрочитатьПрефиксРасширения(ФайлКонфигурации);
ТипОбъектов = "Documents";
Объекты = Парсер.ПолучитьФайлыОбъектов(ТипОбъектов); // Получаем документы
Модули = Парсер.ПолучитьФайлыМодулей(ТипОбъектов, Объекты[0].ИмяБезРасширения); // Получаем модули
Методы = Парсер.ПрочитатьМетодыМодуля(Модули[0], Префикс);
Утверждения.ПроверитьБольше(Методы.Количество(), 0);
КонецПроцедуры
Процедура ТестПарсера_ПолучитьПереопределенныеОбъекты() Экспорт
Объекты = Парсер.ПолучитьПереопределенныеОбъекты();
Утверждения.ПроверитьБольше(Объекты.Количество(), 0);
КонецПроцедуры
Процедура ТестПарсера_ПрочитатьМетодыОсновнойКонфигурации() Экспорт
ФайлКонфигурации = ОбъединитьПути(РасширениеПуть, "Configuration.xml");
Префикс = Парсер.ПрочитатьПрефиксРасширения(ФайлКонфигурации);
ТипыКонфигурации = Парсер.ПолучитьПереопределенныеОбъекты();
ОбъектыЕсть = Ложь;
Для каждого ТипРасширения Из ТипыКонфигурации Цикл
Если ТипРасширения.Объекты.Количество() Тогда
ОбъектыЕсть = Истина;
ОбъектРасширения = ТипРасширения.Объекты[0];
ФайлМодуля = ОбъектРасширения.Модули[0]; // и первый модуль
МодульОбъекта = ФайлМодуля.ФайлМодуля;
ФайлМодуля.Вставить("Методы", Парсер.ПрочитатьМетодыМодуля(МодульОбъекта, Префикс)); // заполняем методы
Парсер.ПрочитатьМетодыОсновнойКонфигурации(МодульОбъекта, ФайлМодуля, РодительПуть, "Родитель"); // сопоставляем с родительской конфигурацией
Прервать;
КонецЕсли;
КонецЦикла;
Утверждения.ПроверитьИстину(ОбъектыЕсть, "методы не обнаружены");
КонецПроцедуры
Процедура ТестПриложения_ПолучитьРезультатСравнения() Экспорт
РезультатСравнения = РезультатСравненияРасширения.ПолучитьРезультатСравнения(
РодительПуть,
ПоставкаПуть,
РасширениеПуть,
Лог);
Утверждения.ПроверитьБольше(РезультатСравнения.Типы.Количество(), 0, "нет типов в результате сравнения");
КонецПроцедуры
Процедура ТестПриложения_СохранитьРезультатСравнения() Экспорт
ФайлРезультатИмя = МенеджерВременныхФайлов.СоздатьФайл("HTML");
РезультатСравнения = РезультатСравненияРасширения.ПолучитьРезультатСравнения(
РодительПуть,
ПоставкаПуть,
РасширениеПуть,
Лог);
Генератор = Новый ГенераторОтчета;
Генератор.СохранитьРезультат(РезультатСравнения, ФайлРезультатИмя, Лог, "HTML");
ТекстРезультат = Новый ТекстовыйДокумент();
ТекстРезультат.Прочитать(ФайлРезультатИмя, КодировкаТекста.UTF8NoBOM);
Утверждения.ПроверитьВхождение(ТекстРезультат.ПолучитьТекст(), "<!DOCTYPE HTML>", "текст не соответствует шаблону");
КонецПроцедуры
///////////////////////////////////////////////////////////////////
Процедура ТестПриложения_ПолучитьРезультатСравненияОбъектов() Экспорт
РезультатСравнения = АнализаторОбъектов.ВыполнитьСравнениеОбъектов(РодительПуть, ПоставкаПуть, Лог);
Утверждения.ПроверитьБольше(РезультатСравнения.Типы.Количество(), 0, "нет типов в результате сравнения");
КонецПроцедуры
///////////////////////////////////////////////////////////////////
// Служебный функционал
///////////////////////////////////////////////////////////////////