RDT1C/DataProcessors/ирПодготовкаБазыДанныхКУсечениюТипов/Ext/ObjectModule.bsl
Администратор ebf21867b6 Редактор пользователей
+В списке добавлена группа колонок свойств настроек управляемого приложения
        +Добавлена кнопка "Установить..." для установки настроек управляемого приложения выделенным пользователям
        +В форме запуска под пользователем добавлен флажок "Режим интерфейса "Такси""
        +Запуск под пользователем с флагом "Разрешить отладку" теперь сразу подключает текущий отладчик к запускаемому сеансу
    Общее
        +Команда "Запустить обычное приложение" теперь в обоих типах управляемого приложения открывает одинаковую форму, в которой добавлен включенный по умолчанию флажок "Текущий пользователь"
        +Команда "Запустить связанный тонкий клиент" теперь передает имя текущего пользователя в строке соединения
        +При включенной параметром запуска /EnableCheckModal проверке модальности теперь при первом в сеансе открытии любой формы подсистемы предлагается запуск нового сеанса без проверки модальности
    Интерфейсная панель.
        +В контекстном меню добавлена команда "Связанный динамический список", открывающая единое окно динамического списка, обновляющее список при активизации строки
    Динамический список
        +Добавлена кнопка "Связанный редактор объекта БД", открывающая прикрепленное окно редактора объекта БД, загружающее объект при активизации строки
        +Реализовано автоматическое обновление отображаемых строк при записи объекта в редакторе объекта БД
        *Реализован обход ошибки платформы установки табличному полю типа списка независимого непериодического регистра сведений без измерений
    Редактор объекта БД
        *Увеличена длина дробной части значений отбора набора записей
    Контекстная подсказка
        *Исправлена ошибка инициализации формы списка слов при отсутствии activex компоненты Forms20
    Консоль запросов
        *Кнопка "Найти в дереве запроса" теперь доступна только в режиме просмотра узла дерева запроса
        *При сохранении узла дерева запроса, текущий узел теперь ищется не по именам, а по индексам узлов
        *Исправлено зависание программы при копировании папки дерева запросов
        *Исправлено некорректное определение имени узла дерева запроса в некоторых случаях при наличии функции ЗНАЧЕНИЕ(...)
        *При выборе основного элемента результата пакетного запроса теперь игнорируются результаты уничтожения таблиц
    Редактор табличного документа
        +Добавлена кнопка "Сохранить"

3.70
    Консоль компоновки данных
        +В настройках компоновки в таблице условного оформления добавлен пример оформления текста в колонке "Пример"
    Консоль кода
        +Добавлено дерево алгоритмов
        +Изменен формат файлов на t1c, старый формат f1c доступен только для открытия файлов
        *После сохранения в файл теперь сбрасывается модифицированность формы
        +Добавлена кнопка объединения с файлом
        +Добавлено подменю последних открытых файлов
        +Для булевых параметров реализовано отображение флажка
    Консоль запросов
        +При генерации текста модуля пакетного запроса теперь добавляется установка переменных вида "Индекс_<ИмяЗапроса>=<Индекс>" для всех именованных запросов
        +Команде "Найти в дереве" назначено сочетание клавиш CTRL+T
        +Для булевых параметров реализовано отображение флажка
        *Исправлено некорректное отображение количества строк в дереве результата при наличии выборок итогов
    Общее
        *Исправлены ошибки работы подсистемы при наличии общего модуля с именем ОбменДанными
        *Кнопка "Установить одинаковую ширину для всех колонок" заменена на "Расширить все колонки на 5 символов"
    Синтакс-помощник
        *Исправлено построение дерева, сломавшееся несколько версий назад
    Управление службами серверов 1С
        *Исправлена ошибка чтения служб при наличии службы сервера 1С без ключа "range" в строке запуска
    Редактор объекта БД
        +Для наборов записей добавлена фиксированная колонка картинки вида движения регистра накопления
        +По умолчанию для списка движений теперь включен отбор "Только не пустые"
        +Кнопка открытия редактора для таблицы движений теперь передает текущую строку
    Подбор и обработка объектов
        +Реализована поддержка журналов документов в однотабличном режиме
    Динамический список
        +В режиме выбора в заголовке теперь добавляется "(выбор)"
    Интерфейсная панель
        +Теперь уважает настройку использования "Динамический список / Основная форма списка"

3.69
    Общее
        +Вместо форм выбора теперь по умолчанию всегда открывается динамический список
        -Кнопка "Редактировать список" для значения отбор компоновки везде удалена, теперь редактирование списка всегда выполняется в расширенном режиме
    Динамический список
        +Добавлен флажок "Вместо основной" сохраняемый в настройках пользователя в разрезе объектов метаданных, управляющий подменой форм выбора
    Консоль компоновки
        *Исправлена ошибка команды "переставить с родителем" для группировок колонок и строк таблиц
    Контекстная подсказка
        *Кнопка "Удалить переносы" теперь еще заменяет двойные кавычки обычными
    Конструктор запросов
        +Для списка доступных таблиц добавлена закладка-отбор "Параметр"
        +При добавлении таблицы-параметра в выбранные таблицы сразу устанавливать тип запроса и имя временной таблицы
    Консоль запросов
        *Исправлена вычисление группировок итогов с закомментированным словом ОБЩИЕ
        +Кнопки выполнения запроса разделены на "Выполнить отображаемый запрос (F7)" и "Выполнить полный запрос (F8)"
    Редактор объекта БД
        *Исправлена ошибка поиска значения в бизнес процессе

3.68
    Редактор констант
        +Добавлена частичная поддержка констант с типом значения "Хранилище значения"
    Динамический список
        +Добавлена кнопка открытия основной формы списка с передачей отбора, текущей строки и владельца формы
        *Исправлена свежая ошибки открытия журнала документов
    Менеджер табличного поля
        *Исправлено ограничение типа значений элементов отбора
    Редактор объекта БД
        +В элементах управления колонок набора записей и движений реализован учет многострочного режима и других свойств из метаданных
        *Исправлена свежая поломка привязок на вкладке "Связанные колонки"
    Управление службами 1с
        *Исправлено перезаполнение списка при изменении компьютера
    Консоль запросов
        +Реализовано сохранение и восстановление позиции в тексте запроса при переходе между запросами и переключении режима дерева запроса
        +Для поля текста запроса добавлена команда "найти в дереве запроса" (текущую позицию в тексте запроса)
    Поиск дублей и замена ссылок
        *Исправлена свежая ошибка выполнения замены в иерархическом справочнике без флажка "Изменять поля по связям параметров выбора"
    Расширенный ввод значений
        +Добавлено распознавание навигационных ссылок
    Общее
        +Кнопка запуска связанного тонкого клиента теперь при повторном нажатии позволяет открыть в редакторе объекта БД один из открытых в связанном сеансе объектов
    Контекстная подсказка
        +Включена поддержка 8.3.8 в низкоуровневом получении описаний объектов

3.67
    Управление службами серверов 1С
        *Устранена ошибка открытия при наличии в строке соединения порта
        *Исправлено открытие при ошибках подключения WMI
    Консоль компоновки
        *Исправлена ошибка расшифровки при наличии пользовательских настроек компоновки
        +В панели настроек добавлена закладка "Пользовательские настройки" только для просмотра
        +В подменю "Исследовать" добавлена команда "Пользовательские настройки"
        +При сохранении варианта настроек добавлен пункт "<Новый>"
        +Реализовано перетаскивание полей на строки-коллекции в структуре
    Консоль запросов
        *Исправлена некорректная работа команды "найти результат" дерева запроса
        *Исправлена некорректная работа команды "Встроить из подзапроса" дерева запроса
    Конструктор запросов
        *Исправлено обновление представления условия связи при перетаскивании элементов отбора между связями
    Подбор и обработка объектов
        *Исправлены свежие ошибки при обработке подчиненных регистров сведений
    Редактор объекта БД
        *Исправлена недоступность для изменения основной формы измененного объекта
        +Добавлена кнопка "Отрыть основную форму объекта по ссылке"
        +При двойном клике по имени регистра в списке движений открывается его форма списка с отбором по регистратору
        *Исправлен сломанный несколько версий назад расширенный ввод значений в поле Ссылка
    Общее
        +В панели инструментов добавлена кнопка "Запустить связанный тонкий клиент"
    Интерфейсная панель
        +Реализовано явное отображение пустых ссылок в дереве
    Динамический список
        +Добавлена команда "Редактор объекта БД ячейки"
    Поиск дублей и замена ссылок
        +При выполнении замены реализовано предотвращение зацикливания уровней путем поднятия до ближайшего корректного родителя
    Настройка техножурнала
        *Реализован обход проблемы платформы со смещением времени изменения файла на 1ч

3.66
    +Добавлен инструмент "Управление службами серверов 1С"
    Поиск дублей и замена ссылок
        *Исправлена ошибка вывода сообщения об ошибке при отказе в записи независимых регистров сведений
        *Исправлено неверное замещение неуникальных записей в подчиненных регистрах сведений
    Подбор и обработка объектов
        *Исправлены ошибки при работе с подчиненными регистрами сведений
    Общее
        *Исправлено восстановление пароля в форме подключения СУБД
        *Исправлено свежее незапланированное изменение в поведении кнопки "Редактор объекта БД"
    Консоль компоновки данных
        *Кнопка "Исполняемый запрос" теперь открывает консоль запросов немодально
    Различные значения колонки
        +Добавлена кнопка "В список"
        *Исправлено некорректное вычисление типов значений
    Редактор объекта БД
        +Реализована поддержка флагов "Многострочный режим" и "Расширенное редактирование" колонок табличных частей и наборов записей
2016-12-04 00:22:14 +03:00

488 lines
33 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//ирПортативный Перем ирПортативный Экспорт;
//ирПортативный Перем ирОбщий Экспорт;
//ирПортативный Перем ирСервер Экспорт;
//ирПортативный Перем ирКэш Экспорт;
//ирПортативный Перем ирПривилегированный Экспорт;
#Если Клиент Тогда
////////////////////////////////////////////////////////////////////////////////
// ПЕРЕМЕННЫЕ МОДУЛЯ
Перем мЗапрос Экспорт;
Перем мРезультатыПоиска Экспорт;
Перем мМетаданныеОбъекта Экспорт;
Перем мКорневойТипОбъекта Экспорт;
Перем мПутьКДаннымПоляНечеткогоСравнения;
Перем мСтруктураКлючаПоиска;
Перем мСтруктураПредставлений Экспорт;
Перем мСтрокаРеквизитов;
Перем мСписокРеквизитов;
Перем мЗависимыеМетаданные;
Перем мПостроительЗапросаОтбора;
Перем мЗатронутыеЭлементыПВХ Экспорт;
Перем МассивСтруктурУсекаемыхТипов Экспорт;
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ
// <Описание процедуры>
//
// Параметры:
// <Параметр1> <Тип.Вид> <описание параметра>
// <продолжение описания параметра>;
// <Параметр2> <Тип.Вид> <описание параметра>
// <продолжение описания параметра>.
//
Функция ВыполнитьАвтокорректировку() Экспорт
Если ВыполнятьВТранзакции Тогда
НачатьТранзакцию();
КонецЕсли;
Попытка
ВыполнитьАнализ();
ВыполнитьОчисткуРегистров();
ВыполнитьКоррекциюПВХ(мЗатронутыеЭлементыПВХ);
Исключение
Если ВыполнятьВТранзакции Тогда
ОтменитьТранзакцию();
КонецЕсли;
ВызватьИсключение;
КонецПопытки;
Если ВыполнятьВТранзакции Тогда
ЗафиксироватьТранзакцию();
КонецЕсли;
Возврат ВыполнитьАнализ();
КонецФункции // ВыполнитьАвтокорректировку()
// <Описание процедуры>
//
// Параметры:
// <Параметр1> <Тип.Вид> <описание параметра>
// <продолжение описания параметра>;
// <Параметр2> <Тип.Вид> <описание параметра>
// <продолжение описания параметра>.
//
Функция ВыполнитьАнализ() Экспорт
ЗатрагиваемыеЭлементыТекущегоПланаВидовХарактеристик = Новый ТаблицаЗначений;
МассивСтруктурУсекаемыхТипов = Новый Массив;
МассивТиповКУдалению = Новый Массив;
Для Каждого УсекаемыйТип Из УсекаемыеТипы.Типы() Цикл
МетаданныеТипа = Метаданные.НайтиПоТипу(УсекаемыйТип);
Если МетаданныеТипа = Неопределено Тогда
Сообщить("Примитивный тип """ + УсекаемыйТип + """ не будет учтен");
МассивТиповКУдалению.Добавить(УсекаемыйТип);
Продолжить;
КонецЕсли;
СтруктураУсекаемогоТипа = Новый Структура;
СтруктураУсекаемогоТипа.Вставить("Тип", УсекаемыйТип);
СтруктураУсекаемогоТипа.Вставить("ТипЗапроса", Метаданные.НайтиПоТипу(УсекаемыйТип).ПолноеИмя());
МассивСтруктурУсекаемыхТипов.Добавить(СтруктураУсекаемогоТипа);
КонецЦикла;
УсекаемыеТипы = Новый ОписаниеТипов(УсекаемыеТипы, , МассивТиповКУдалению);
// Регистры сведений
НайтиПоРавенствуНовыхКлючейЗаписи();
// Планы видов характеристик
ЗаполнитьТаблицуПВХ();
Результат = Истина
И Не ПроблемныеПланыВидовХарактеристик.Количество() > 0
И Не ПроблемныеРегистры.Количество() > 0;
Возврат Результат;
КонецФункции // ВыполнитьАнализ()
// <Описание процедуры>
//
// Параметры:
// <Параметр1> <Тип.Вид> <описание параметра>
// <продолжение описания параметра>;
// <Параметр2> <Тип.Вид> <описание параметра>
// <продолжение описания параметра>.
//
Процедура ВыполнитьОчисткуГруппыРегистра(СтрокаРегистра, СтрокаГруппы) Экспорт
Если ВыполнятьВТранзакции Тогда
НачатьТранзакцию();
КонецЕсли;
МенеджерРегистра = РегистрыСведений[СтрокаРегистра.Имя];
ТаблицаЗаписей = ПолучитьПроблемныеЗаписиГруппыРегистра(СтрокаРегистра, СтрокаГруппы);
Для Каждого СтрокаЗаписи Из ТаблицаЗаписей Цикл
#Если Клиент Тогда
ОбработкаПрерыванияПользователя();
#КонецЕсли
НаборЗаписей = ирОбщий.ПолучитьНаборЗаписейПоКлючуЛкс("РегистрСведений." + СтрокаРегистра.Имя, СтрокаЗаписи);
ирОбщий.ЗаписатьОбъектЛкс(НаборЗаписей, ЗаписьНаСервере, , , ОтключатьКонтрольЗаписи, БезАвторегистрацииИзменений);
КонецЦикла;
Если ВыполнятьВТранзакции Тогда
ЗафиксироватьТранзакцию();
КонецЕсли;
КонецПроцедуры // ВыполнитьОчисткуГруппыРегистра()
// <Описание функции>
//
// Параметры:
// <Параметр1> <Тип.Вид> <описание параметра>
// <продолжение описания параметра>;
// <Параметр2> <Тип.Вид> <описание параметра>
// <продолжение описания параметра>.
//
// Возвращаемое значение:
// <Тип.Вид> <описание значения>
// <продолжение описания значения>;
// <Значение2> <Тип.Вид> <описание значения>
// <продолжение описания значения>.
//
Функция ПолучитьПроблемныеЗаписиГруппыРегистра(СтрокаРегистра, СтрокаГруппы) Экспорт
Запрос = Новый Запрос;
Запрос.Текст = СтрокаРегистра.ЗапросВыборкиСоставаГруппы;
МетаРегистр = Метаданные.РегистрыСведений[СтрокаРегистра.Имя];
Для Каждого МетаИзмерение Из МетаРегистр.Измерения Цикл
Запрос.УстановитьПараметр(МетаИзмерение.Имя, СтрокаГруппы[МетаИзмерение.Имя]);
КонецЦикла;
Если МетаРегистр.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда
Запрос.УстановитьПараметр("Период", СтрокаГруппы["Период"]);
КонецЕсли;
Если МетаРегистр.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору Тогда
Запрос.УстановитьПараметр("Регистратор", СтрокаГруппы["Регистратор"]);
КонецЕсли;
ТаблицаЗаписей = Запрос.Выполнить().Выгрузить();
Возврат ТаблицаЗаписей;
КонецФункции // ПолучитьПроблемныеЗаписиГруппыРегистра()
// <Описание процедуры>
//
// Параметры:
// <Параметр1> <Тип.Вид> <описание параметра>
// <продолжение описания параметра>;
// <Параметр2> <Тип.Вид> <описание параметра>
// <продолжение описания параметра>.
//
Процедура ВыполнитьОчисткуРегистра(СтрокаРегистра) Экспорт
Если ВыполнятьВТранзакции Тогда
НачатьТранзакцию();
КонецЕсли;
мЗапрос.Текст = "ВЫБРАТЬ * ИЗ " + СтрокаРегистра.Имя;
ГруппыТекущегоРегистра = мЗапрос.Выполнить().Выгрузить();
Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(ГруппыТекущегоРегистра.Количество(), "Коррекция регистра " + СтрокаРегистра.Имя);
Для Каждого СтрокаГруппы Из ГруппыТекущегоРегистра Цикл
ирОбщий.ОбработатьИндикаторЛкс(Индикатор);
ВыполнитьОчисткуГруппыРегистра(СтрокаРегистра, СтрокаГруппы);
КонецЦикла;
ирОбщий.ОсвободитьИндикаторПроцессаЛкс();
Если ВыполнятьВТранзакции Тогда
ЗафиксироватьТранзакцию();
КонецЕсли;
КонецПроцедуры // ВыполнитьОчисткуГруппРегистра()
// <Описание процедуры>
//
// Параметры:
// <Параметр1> <Тип.Вид> <описание параметра>
// <продолжение описания параметра>;
// <Параметр2> <Тип.Вид> <описание параметра>
// <продолжение описания параметра>.
//
Процедура ВыполнитьОчисткуРегистров() Экспорт
Если ВыполнятьВТранзакции Тогда
НачатьТранзакцию();
КонецЕсли;
Для Каждого СтрокаРегистра Из ПроблемныеРегистры Цикл
ВыполнитьОчисткуРегистра(СтрокаРегистра);
КонецЦикла;
Если ВыполнятьВТранзакции Тогда
ЗафиксироватьТранзакцию();
КонецЕсли;
КонецПроцедуры // ВыполнитьОчисткуРегистров()
Процедура НайтиПоРавенствуНовыхКлючейЗаписи() Экспорт
ПроблемныеРегистры.Очистить();
ЭлементыТекущейГруппы.Очистить();
ГруппыТекущегоРегистра.Очистить();
ГруппыТекущегоРегистра.Колонки.Очистить();
мТекущаяГруппа = Неопределено;
мСтруктураПредставлений = Новый Структура;
мСтруктураПредставлений.Вставить("КоличествоЭлементовВГруппе", "Количество элементов");
мСтруктураПредставлений.Вставить("НомерГруппы", "Номер группы");
мСтруктураПредставлений.Вставить("ВывестиСостав", "Вывести состав");
мСтруктураПредставлений.Вставить("Период", "Период");
мСтруктураПредставлений.Вставить("Регистратор", "Регистратор");
мСтруктураПредставлений.Вставить("ОткрытьЗапись", "Открыть запись");
мСтруктураПредставлений.Вставить("Правильный", "Правильный");
мСтруктураПредставлений.Вставить("НомерСтроки", "Номер строки");
мСтруктураПредставлений.Вставить("Активность", "Активность");
мЗапрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(Метаданные.РегистрыСведений.Количество(), "Регистры сведений");
Для Каждого МетаРегистр Из Метаданные.РегистрыСведений Цикл
ирОбщий.ОбработатьИндикаторЛкс(Индикатор);
ТекстВЫБРАТЬ = "";
ТекстСГРУППИРОВАТЬ = "";
ТекстГДЕ2 = "";
ВозможныПроблемы = Ложь;
Для Каждого МетаИзмерение Из МетаРегистр.Измерения Цикл
ИмяПоля = МетаИзмерение.Имя;
ТекстПоля = "ВЫБОР КОГДА ЛОЖЬ";
Для Каждого СтруктураУсекаемогоТипа Из МассивСтруктурУсекаемыхТипов Цикл
Если МетаИзмерение.Тип.СодержитТип(СтруктураУсекаемогоТипа.Тип) Тогда
ТекстПоля = ТекстПоля + Символы.ПС + "ИЛИ (" + ИмяПоля + " ССЫЛКА " + СтруктураУсекаемогоТипа.ТипЗапроса + ")";
ВозможныПроблемы = Истина;
КонецЕсли;
КонецЦикла;
ТекстПоля = ТекстПоля + Символы.ПС + "ТОГДА НЕОПРЕДЕЛЕНО";
ТекстПоля = ТекстПоля + Символы.ПС + "ИНАЧЕ " + ИмяПоля
+ Символы.ПС + " КОНЕЦ";
ТекстВЫБРАТЬ = ТекстВЫБРАТЬ + ", " + ТекстПоля + " КАК " + ИмяПоля; // запрещенные имена например "Соединение" так вызывают ошибку?
ТекстГДЕ2 = ТекстГДЕ2 + " И " + ТекстПоля + " = &" + ИмяПоля;
ТекстСГРУППИРОВАТЬ = ТекстСГРУППИРОВАТЬ + ", " + ТекстПоля;
КонецЦикла;
Если МетаРегистр.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда
ИмяПоля = "Период";
ТекстПоля = ИмяПоля;
ТекстВЫБРАТЬ = ТекстВЫБРАТЬ + ", " + ТекстПоля + " КАК " + ИмяПоля; // запрещенные имена например "Соединение" так вызывают ошибку?
ТекстГДЕ2 = ТекстГДЕ2 + " И " + ТекстПоля + " = &" + ИмяПоля;
ТекстСГРУППИРОВАТЬ = ТекстСГРУППИРОВАТЬ + ", " + ТекстПоля;
КонецЕсли;
Если МетаРегистр.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору Тогда
ИмяПоля = "Регистратор";
ТекстПоля = ИмяПоля;
ТекстВЫБРАТЬ = ТекстВЫБРАТЬ + ", " + ТекстПоля + " КАК " + ИмяПоля; // запрещенные имена например "Соединение" так вызывают ошибку?
ТекстГДЕ2 = ТекстГДЕ2 + " И " + ТекстПоля + " = &" + ИмяПоля;
ТекстСГРУППИРОВАТЬ = ТекстСГРУППИРОВАТЬ + ", " + ТекстПоля;
КонецЕсли;
Если Не ВозможныПроблемы Тогда
Продолжить;
КонецЕсли;
ТекстСГРУППИРОВАТЬ = Сред(ТекстСГРУППИРОВАТЬ, 2);
ТекстЗапросаПоиска = "
|ВЫБРАТЬ
| КОЛИЧЕСТВО(*) КАК КоличествоЭлементовВГруппе" + ТекстВЫБРАТЬ + "
|ПОМЕСТИТЬ " + МетаРегистр.Имя + "
|ИЗ " + МетаРегистр.ПолноеИмя() + " КАК Регистр
|СГРУППИРОВАТЬ ПО " + ТекстСГРУППИРОВАТЬ + "
|ИМЕЮЩИЕ КОЛИЧЕСТВО(*) > 1
|";
мЗапрос.Текст = ТекстЗапросаПоиска;
мЗапрос.Выполнить();
мЗапрос.Текст = "ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК КоличествоГрупп ИЗ " + МетаРегистр.Имя;
КоличествоГрупп = мЗапрос.Выполнить().Выгрузить()[0].КоличествоГрупп;
Если КоличествоГрупп = 0 Тогда
Продолжить;
КонецЕсли;
СтрокаРегистра = ПроблемныеРегистры.Добавить();
СтрокаРегистра.ЗапросВыборкиСоставаГруппы = "
|ВЫБРАТЬ *
|ИЗ " + МетаРегистр.ПолноеИмя() + " КАК Регистр
|ГДЕ ИСТИНА " + ТекстГДЕ2 + "
|";
СтрокаРегистра.Имя = МетаРегистр.Имя;
СтрокаРегистра.КоличествоГрупп = КоличествоГрупп;
КонецЦикла;
ирОбщий.ОсвободитьИндикаторПроцессаЛкс();
КонецПроцедуры // НайтиПоРавенствуНовыхКлючейЗаписи()
// <Описание процедуры>
//
// Параметры:
// <Параметр1> <Тип.Вид> <описание параметра>
// <продолжение описания параметра>;
// <Параметр2> <Тип.Вид> <описание параметра>
// <продолжение описания параметра>.
//
Процедура ЗаполнитьТаблицуПВХ()
мЗатронутыеЭлементыПВХ = Новый ТаблицаЗначений;
мЗатронутыеЭлементыПВХ.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка"));
мЗатронутыеЭлементыПВХ.Колонки.Добавить("Ссылка");
Для Каждого МетаПВХ Из Метаданные.ПланыВидовХарактеристик Цикл
Выборка = ирОбщий.ПолучитьМенеджерЛкс(МетаПВХ).Выбрать();
Пока Выборка.Следующий() Цикл
ОбъектПВХ = Выборка.ПолучитьОбъект();
Затрагивается = Ложь;
Для Каждого СтруктураУсекаемогоТипа Из МассивСтруктурУсекаемыхТипов Цикл
Если ОбъектПВХ.ТипЗначения.СодержитТип(СтруктураУсекаемогоТипа.Тип) Тогда
Затрагивается = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если Затрагивается Тогда
СтрокаЭлементаПВХ = мЗатронутыеЭлементыПВХ.Добавить();
СтрокаЭлементаПВХ.Имя = МетаПВХ.Имя;
СтрокаЭлементаПВХ.Ссылка = Выборка.Ссылка;
КонецЕсли;
КонецЦикла;
КонецЦикла;
ИтогоПВХ = мЗатронутыеЭлементыПВХ.Скопировать();
ИтогоПВХ.Колонки.Добавить("КоличествоЗатрагиваемыхЭлементов");
ИтогоПВХ.ЗаполнитьЗначения(1, "КоличествоЗатрагиваемыхЭлементов");
ИтогоПВХ.Свернуть("Имя", "КоличествоЗатрагиваемыхЭлементов");
ПроблемныеПланыВидовХарактеристик.Загрузить(ИтогоПВХ);
КонецПроцедуры // ЗаполнитьТаблицуПВХ()
Процедура ВыполнитьКоррекциюПВХ(ТаблицаСсылокПВХ) Экспорт
Если ВыполнятьВТранзакции Тогда
НачатьТранзакцию();
КонецЕсли;
ИндикаторПроцесса = ирОбщий.ПолучитьИндикаторПроцессаЛкс(ТаблицаСсылокПВХ.Количество(), "Коррекция элементов ПВХ");
Для Каждого СтрокаЭлемента Из ТаблицаСсылокПВХ Цикл
#Если Клиент Тогда
ирОбщий.ОбработатьИндикаторЛкс(ИндикаторПроцесса);
#КонецЕсли
ОбъектПВХ = СтрокаЭлемента.Ссылка.ПолучитьОбъект();
ИсходныйТипЗначения = Новый ОписаниеТипов(ОбъектПВХ.ТипЗначения);
ДобавляемыеТипы = Новый Массив;
//
НовыйТипЗначения = Новый ОписаниеТипов(ИсходныйТипЗначения, ДобавляемыеТипы, УсекаемыеТипы.Типы());
Если НовыйТипЗначения.Типы().Количество() = 0 Тогда
Сообщить("Автоматическая модификация типа значения элемента """ + ОбъектПВХ + """ невозможна, т.к. он становится пустым",
СтатусСообщения.Важное);
Продолжить;
КонецЕсли;
ОбъектПВХ.ТипЗначения = НовыйТипЗначения;
Попытка
ирОбщий.ЗаписатьОбъектЛкс(ОбъектПВХ, ЗаписьНаСервере, , , ОтключатьКонтрольЗаписи, БезАвторегистрацииИзменений);
Сообщить("Модифицирован тип значения элемента """ + ОбъектПВХ + """", СтатусСообщения.Информация);
Сообщить(Символы.Таб + "Старый: " + ИсходныйТипЗначения);
Сообщить(Символы.Таб + " Новый: " + ОбъектПВХ.ТипЗначения);
Исключение
Сообщить("Ошибка при коррекции """ + ОбъектПВХ + """: " + ОписаниеОшибки(), СтатусСообщения.Важное);
КонецПопытки;
КонецЦикла;
ирОбщий.ОсвободитьИндикаторПроцессаЛкс();
Если ВыполнятьВТранзакции Тогда
ЗафиксироватьТранзакцию();
КонецЕсли;
КонецПроцедуры // ВыполнитьКоррекциюПВХ()
// <Описание функции>
//
// Параметры:
// <Параметр1> <Тип.Вид> <описание параметра>
// <продолжение описания параметра>;
// <Параметр2> <Тип.Вид> <описание параметра>
// <продолжение описания параметра>.
//
// Возвращаемое значение:
// <Тип.Вид> <описание значения>
// <продолжение описания значения>;
// <Значение2> <Тип.Вид> <описание значения>
// <продолжение описания значения>.
//
Процедура ЗаполнитьПоРазницеМеждуКонфигурациями(ПолноеИмяФайла = "") Экспорт
Если Не ЗначениеЗаполнено(ПолноеИмяФайла) Тогда
ВременныйФайл = Новый ФАйл(ПолучитьИмяВременногоФайла("CF"));
ПолноеИмяФайла = ВременныйФайл.ПолноеИмя;
Состояние("Выгружаем основную конфигурацию");
ЗапуститьСистему("DESIGNER /DumpCfg """ + ПолноеИмяФайла + """", Истина);
//ВременныйФайл = Новый Файл("Z:\Системас.cf"); // для отладки
Если Не ВременныйФайл.Существует() Тогда
Сообщить("Не удалось выгрузить файл конфигурации. Возможно был занят конфигуратор.", СтатусСообщения.Внимание);
Возврат;
КонецЕсли;
КонецЕсли;
ФайлКонфигурации = Новый Файл(ПолноеИмяФайла);
ВременныйКаталог = ПолучитьИмяВременногоФайла();
СтрокаСоединенияВременнойБазы = "File=""" + ВременныйКаталог + """;";
Состояние("Создаем временную базу");
// Антибаг платформы 8.2.14 http://partners.v8.1c.ru/forum/thread.jsp?id=952390#952390
//ЗапуститьСистему("CREATEINFOBASE " + СтрокаСоединенияВременнойБазы + " /UseTemplate " + ФайлКонфигурации.ПолноеИмя, Истина);
СтрокаКоманды = """" + КаталогПрограммы() + "1cv8.exe"" " + "CREATEINFOBASE File=""" + ВременныйКаталог + """;";
// Антибаг платформы http://partners.v8.1c.ru/forum/thread.jsp?id=1076785#1076785
Если ирКэш.Получить().ИДВерсииПлатформы < "802018" Тогда
СтрокаКоманды = СтрокаКоманды + "/";
КонецЕсли;
СтрокаКоманды = СтрокаКоманды + " /UseTemplate """ + ФайлКонфигурации.ПолноеИмя + """";
//ирКэш.Получить().ЗапуститьСкрытоеПриложениеИДождатьсяЗавершения(СтрокаКоманды);
РезультатКоманды = ирКэш.Получить().ПолучитьТекстРезультатаКомандыСистемы(СтрокаКоманды);
КомСоединитель = Новый COMОбъект("v" + ирКэш.Получить().ИДВерсииПлатформы + ".ComConnector");
КомСоединение = КомСоединитель.Connect(СтрокаСоединенияВременнойБазы);
СсылочныеТипыМетаданных = Новый Массив;
СсылочныеТипыМетаданных.Добавить("Справочники");
СсылочныеТипыМетаданных.Добавить("Документы");
СсылочныеТипыМетаданных.Добавить("ПланыВидовХарактеристик");
СсылочныеТипыМетаданных.Добавить("Перечисления");
СсылочныеТипыМетаданных.Добавить("ПланыВидовХарактеристик");
СсылочныеТипыМетаданных.Добавить("ПланыСчетов");
СсылочныеТипыМетаданных.Добавить("ПланыОбмена");
СсылочныеТипыМетаданных.Добавить("Задачи");
СсылочныеТипыМетаданных.Добавить("БизнесПроцессы");
МассивУдаленныхТипов = Новый Массив();
НовыеМетаданные = КомСоединение.Метаданные;
Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(СсылочныеТипыМетаданных.Количество());
Для Каждого ИмяКоллекции Из СсылочныеТипыМетаданных Цикл
ирОбщий.ОбработатьИндикаторЛкс(Индикатор);
КоллекцияТекущая = Метаданные[ИмяКоллекции];
КоллекцияНовая = НовыеМетаданные[ИмяКоллекции];
Для Каждого Метаобъект Из КоллекцияТекущая Цикл
Если КоллекцияНовая.Найти(Метаобъект.Имя) = Неопределено Тогда
МассивУдаленныхТипов.Добавить(Тип(ирОбщий.ИмяТипаИзПолногоИмениТаблицыБДЛкс(Метаобъект.ПолноеИмя())));
КонецЕсли;
КонецЦикла;
КонецЦикла;
ирОбщий.ОсвободитьИндикаторПроцессаЛкс();
КомСоединитель = Неопределено;
КомСоединение = Неопределено;
НовыеМетаданные = Неопределено;
КоллекцияНовая = Неопределено;
УсекаемыеТипы = Новый ОписаниеТипов(МассивУдаленныхТипов);
Если ВременныйФайл <> Неопределено Тогда
УдалитьФайлы(ВременныйФайл.ПолноеИмя);
КонецЕсли;
УдалитьФайлы(ВременныйКаталог);
КонецПроцедуры // ЗаполнитьПоРазницеМеждуКонфигурациями()
//ирПортативный #Если Клиент Тогда
//ирПортативный Контейнер = Новый Структура();
//ирПортативный Оповестить("ирПолучитьБазовуюФорму", Контейнер);
//ирПортативный Если Не Контейнер.Свойство("ирПортативный", ирПортативный) Тогда
//ирПортативный ПолноеИмяФайлаБазовогоМодуля = ВосстановитьЗначение("ирПолноеИмяФайлаОсновногоМодуля");
//ирПортативный ирПортативный = ВнешниеОбработки.ПолучитьФорму(ПолноеИмяФайлаБазовогоМодуля);
//ирПортативный КонецЕсли;
//ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий");
//ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш");
//ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер");
//ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный");
//ирПортативный #КонецЕсли
мЗапрос = Новый Запрос;
ЭтотОбъект.ЗаписьНаСервере = ирОбщий.ПолучитьРежимЗаписиНаСервереПоУмолчаниюЛкс();
#КонецЕсли