Проверка измененной конфигурации перед обновлением "боевой" базы

23.11.16

Разработка - Инструментарий разработчика

Зачем всё это нужно? В принципе, не за чем, если подходить к обновлению изменённой типовой конфигурации ОЧЕНЬ внимательно, то проблем не будет. Если НЕ ОЧЕНЬ внимательно – то потеря данных весьма вероятна, причём выявиться может не сразу, через месяц – другой, что будет хоть и не фатально, но совсем неприятно. Выход - запретить обновление настроенной базы, если указанные типы (регистраторы, объекты для ввода на основании, составы и пр. пр. пр.) забыли включить в состав объектов конфигурации! 23.11.2016 - Обновил текст обработки проверки, теперь можно использовать произвольное выражение, обновил обработку

Скачать файлы

Наименование Файл Версия Размер
Проверка добавленных типов v 1.1
.epf 10,29Kb
13
.epf 1.0 10,29Kb 13 Скачать

Тема внесения изменений в типовые обсуждалась не раз, и это тема не этого «романа», скажу только пару слов о том, что подход к изменениям типовой у всех разный. Зачастую внесённые изменения, даже добавлением «своих» объектов, ведут к изменению типовых объектов, в частности, типов реквизитов, составу ввода на основании, регистраторов и пр. пр. пр.

Простой пример, создан новый документ в Бухгалтерии предприятия (БП), который делает движения по счетам учета расчетов с контрагентами, и соответственно этот документ включен в Тип Плана видов характеристик Виды субконто хозрасчетные, также этот документ добавлен в тип  предопределенного субконто Документы расчетов с контрагентами. Всё красиво, но, пойдём дальше, этот документ нужно добавить ещё в ряд объектов типовой конфигурации, чтобы всё «пело и плясало» в лад – это реквизиты документов Корректировка долга, Поступления и списания с расчетного счета, ПКО, РКО, регистр сведений Резервы по сомнительным долгам… в принципе, достаточно для примера. Если при подготовке обновления при выходе типовой БП не забывать включать соответствующие «галки/палки», то всё будет красиво, если же что-то пропустить, и обновить «боевую» базу с отсутствующим в каком-то из объектов типом, то он благополучно из данных пропадёт, причём «молча». Обнаружить пропажу сразу не всегда получается  - у меня реально «очистился» реквизит Документ расчетов с контрагентом регистра сведений Расчет резервов по сомнительным долгам. Вылезло это при закрытии квартала, когда в начислении резерва полезли совершенно неадекватные цифры, и не с первого стакана разобрался, откуда ноги растут. Пример не про изменения типовой от «одинокого» прогера, а из Бухгалтерии строительной организации 2.0, которая является сути изменённой БП. В каком-то из обновления тип указать забыли. Восстановить конечно можно, но сейчас не об этом, не как восстанавливать, а как избежать такой беды.

Много лет просто вставлял в модули свой комментарий с напоминалкой добавить реквизит, и т.п. при обновлении, писал в описании и т.д. Случаи пропажи бывали всё равно, и в общем - то надоели, поэтому придумался такой метод. Создаём табличный документ из двух колонок, в котором добросовестно прописывам в первой колонке объекты для проверки, во второй, что проверяем:

Объект

Типы

КритерииОтбора.ДокументыПоДоговоруКонтрагента.Состав

Документы.ИмпФормированиеДолевогоВклада
Документы.ИмпАктПриемкиЗаконченногоСтроительствомОбъекта

Документы.КорректировкаДолга.ТабличныеЧасти.ДебиторскаяЗадолженность.Реквизиты.Сделка

ДокументСсылка.ИмпФормированиеДолевогоВклада

Документы.КорректировкаДолга.ТабличныеЧасти.КредиторскаяЗадолженность.Реквизиты.Сделка

ДокументСсылка.ИмпФормированиеДолевогоВклада

Документы.ПоступлениеНаРасчетныйСчет.ТабличныеЧасти.РасшифровкаПлатежа.Реквизиты.Сделка

ДокументСсылка.ИмпФормированиеДолевогоВклада

Документы.СписаниеСРасчетногоСчета.ТабличныеЧасти.РасшифровкаПлатежа.Реквизиты.Сделка

ДокументСсылка.ИмпФормированиеДолевогоВклада

Документы.ПриходныйКассовыйОрдер.ТабличныеЧасти.РасшифровкаПлатежа.Реквизиты.Сделка

ДокументСсылка.ИмпФормированиеДолевогоВклада

Документы.РасходныйКассовыйОрдер.ТабличныеЧасти.РасшифровкаПлатежа.Реквизиты.Сделка

ДокументСсылка.ИмпФормированиеДолевогоВклада

Документы.СчетФактураВыданный.ТабличныеЧасти.ДокументыОснования.Реквизиты.ДокументОснование

ДокументСсылка.ИмпАктПриемкиЗаконченногоСтроительствомОбъекта

РегистрыСведений.РасчетРезервовПоСомнительнымДолгам.Измерения.ДокументРасчетовСКонтрагентом

ДокументСсылка.ИмпФормированиеДолевогоВклада

По этому принципу включить свои изменения для проверки - в Колонке Объект - объект, в котором проверяем наличие, в колонке Типы, что проверяем

Потом читаем его, и проверяем наличие в метаданных описанных типов простой процедуркой (как обычно огромное спасибо Николаю Гусеву ( //infostart.ru/profile/18469/ ), код практически его):

Процедура ПроверитьТипыНаСервере()
	СтрокаОшибки = "";
	ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
	Макет = ОбработкаОбъект.ПолучитьМакет("спво_ПроверитьТипы"); // x1c
	ТаблицаПроверки = ОбработкаОбъект.БДРС_ПолучитьДанныеИзМакета(Макет, "Таблица");
    Для Каждого стр Из ТаблицаПроверки Цикл
        _СтрокаОбъекта = стр.Объект;
        Если Лев (_СтрокаОбъекта, 1) = "#" Тогда
            // эта строка закомментирована
            Продолжить;
        КонецЕсли;
        Если ВРЕГ (Лев (_СтрокаОбъекта, 3)) = "В1:" Тогда
            // В1 - признак того, что нужно вычислить выражение
            // Если выражение выдает ошибку или результат выражения ЛОЖЬ, то фиксируется ошибка
            лРезультат = Ложь;
            лВыражение = Сред (_СтрокаОбъекта, 4);
            лОшибка = Ложь;
            Попытка
                лРезультат = Вычислить (лВыражение);
            Исключение
                лОшибка = Истина;
            КонецПопытки;
            Если (лРезультат = Ложь) ИЛИ лОшибка Тогда
                СтрокаОшибки = СтрокаОшибки + Символы.ПС + "Ошибка для " + _СтрокаОбъекта;
            КонецЕсли;
        Иначе    
            _ПозицияТочки = Найти(_СтрокаОбъекта, ".");
            _ПроверяемОбъект = Лев(_СтрокаОбъекта, _ПозицияТочки - 1);
            _ПроверяемИмя = Прав(_СтрокаОбъекта, СтрДлина(_СтрокаОбъекта) - _ПозицияТочки);
            _МассивПроверкиВхождений = спво_БДРС.БДРС_СтрокуВМассив(стр.Типы, Символы.ПС);
            Для Каждого _СтрокаМассива Из _МассивПроверкиВхождений Цикл
                Если Найти (ВРЕГ (_СтрокаОбъекта), "КРИТЕРИИОТБОРА.") = 1 Тогда
                    лСтрокаКодаСодержит = "Метаданные."+_СтрокаМассива;
                    лСтрокаКода1С = "Метаданные."+_СтрокаОбъекта+".Содержит (%1)";
                    лСтрокаКода1С = СтрЗаменить(лСтрокаКода1С, "%1", лСтрокаКодаСодержит);
                    лТест = Вычислить (лСтрокаКода1С);
                ИначеЕсли НЕ Найти (ВРЕГ (_СтрокаОбъекта), ".ВВОДИТСЯНАОСНОВАНИИ") = 0 Тогда
                    лСтрокаКодаСодержит = "Метаданные."+_СтрокаМассива;
                    лСтрокаКода1С = "Метаданные."+_СтрокаОбъекта+".Содержит (%1)";
                    лСтрокаКода1С = СтрЗаменить(лСтрокаКода1С, "%1", лСтрокаКодаСодержит);
                    лТест = Вычислить (лСтрокаКода1С);
                Иначе
                    лТест = Вычислить ("Метаданные."+_СтрокаОбъекта+".Тип.СодержитТип (Тип ("""+_СтрокаМассива+"""))");                
                КонецЕсли;
                Если Не лТест Тогда
                    СтрокаОшибки = СтрокаОшибки + Символы.ПС + "Для " + _СтрокаОбъекта + " не задан тип " + _СтрокаМассива + "!!!";                    
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
	Если Не СтрокаОшибки = "" Тогда
		ВызватьИсключение СтрокаОшибки;
	КонецЕсли;
КонецПроцедуры

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

 

Потом принимаем волевое решение, откуда это дело вызывать. Вариантов много:

- можно создать обработку, включить её в состав изменённой конфигурации, и вызывать из общего модуля перед началом работы системы;

- табличный документ разместить в общем макете, процедуру в своём общем модуле, и опять же вызывать перед началом работы системы (я делаю именно так);

- сделать внешнюю обработку (пример прилагается) и запустить её на копии базы, в которой делаем обновление;

- как- нибудь ещё на Ваш выбор J

Правила заполнения табличного документы видно из примера, есть одно соглашение – строка, начинающаяся с # считается комментарием и не обрабатывается. В колонку «Типы» можно задать несколько проверяемых типов, каждый новый должен начинать с новой строки.

Пример внешней обработки на типовой БСО 3.0 (ничего личного, просто показать как это работает). Есть нетиповой для БП документ, добавленный в Виды субконто хозрасчетные :

 

Его же добавили в тип предопределённого субконто Документы расчетов с контрагентами:

 

А был ли этот документ в реквизите резервов по сомнительным долгам раньше проверять не буду, но вот сейчас (в релизе 3.0.40.3) его там нет:

 

Ежели до того он был, потом пропал, то будет так, как я выше про БСО 2.0 рассказал – т.е. печально…  Да и работать с регистром без наличия в измерениях регистра этого документа просто не получится – не начислит программа резерв правильно.

ИМХО, он должен присутствовать в перечисленных в табличном документе объектах. Запускаем обработку, и проверяем…

Проверка измененной конфигурации перед обновлением

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    122177    670    389    

714

SALE! 25%

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

18000 15300 руб.

06.10.2023    7297    21    6    

39

SALE! 20%

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 8000 руб.

10.11.2023    3544    11    1    

34

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2520 руб.

14.01.2013    177758    1073    0    

849

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99348    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18116    6    8    

39

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28111    3    10    

15

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23605    15    15    

32
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. seermak 665 30.08.16 07:27 Сейчас в теме
(0) под свои нужды скрестил Вашу обработку с http://infostart.ru/public/545418/ Причина: Заполнить шаблон сравнения проблема, а здесь только кнопки жми, да не забывай куда файлы соскладировал. Файл исправленной в прицепе
Прикрепленные файлы:
ПроверкаДобавленныхТипов.epf
2. Alex_E 2353 30.08.16 07:33 Сейчас в теме
(1) seermak, Круто, будет досуг посмотрю, но выкладывать вот так файлы - ИМХО моветон))))
3. Fox-trot 156 30.08.16 08:15 Сейчас в теме
4. Alex_E 2353 30.08.16 08:30 Сейчас в теме
(3) Fox-trot, Да мне то пофиг (мой код выложен в статье, а обработка так - для ленивых), но выложен файл, в котором код из публикации другого автора, а у него спросили?
5. seermak 665 30.08.16 08:44 Сейчас в теме
(1)раньше можно было убрать из коментов данные (на это и было рассчитано), но...((((( нажал на спам - может так удалиться
6. Alex_E 2353 30.08.16 10:22 Сейчас в теме
(5) seermak, Это уже к модераторам))) Я то же не знаю как тут что убирать, да и...ещё раз - в этом случае я не против, но есть другой человек... А вообще - на будущее - это через личку лучше делать))))
7. ChessCat 23.11.16 16:44 Сейчас в теме
Способ контроля очень интересный.

На мой взгляд можно усилить этот контроль.

Добавить таблицу в которой будут все включенные Типы в ПланеВидов Характеристик.ВидыСубконтоХозрасчетные

И сравнивать при обновлении конфигурации изменения в этих типах.

Смысл - нас интересует чтобы случайно при обновлении не была снята галочка по Типу используемому в проводках (что приведет к тому что в проводках движения по этому субконто очистятся).

После обновления можно обновлять таблицу контроля типов субконто новыми значениями (если новые Типы добавлены в конфигурацию).
8. Alex_E 2353 23.11.16 17:42 Сейчас в теме
(7) ChessCat, Обновил публикацию - теперь есть универсальный способ проверки - ввод произвольной строки с признаком "В1", например:
В1:ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ДокументыРасчетовСКонтрагентами.ТипЗначения.СодержитТип(Тип("ДокументСсылка.спво_ДоговорДолевогоУчастия"))
без указания типа в колонке "Типы" (ДоговорДолевогоУчастия - самопальный документ, включенный в состав предопределеного субконто "ДокументаРасчетовСКонтрагентами"). Просто будет вычислено произвольное выражение, которое вернет или Истину или Ложь. Таким образом можно реализовать любую проверку...
ChessCat; +1 Ответить
Оставьте свое сообщение