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

23.11.16

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Проверка добавленных типов v 1.1
.epf 10,29Kb ver:1.0
13
13 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

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

См. также

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

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

12000 руб.

02.09.2020    170273    947    403    

907

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    13265    102    46    

104

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

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

9360 руб.

17.05.2024    26833    91    48    

134

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

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

22200 руб.

06.10.2023    16983    41    15    

75

SALE! %

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

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

4800 3840 руб.

14.01.2013    190772    1151    0    

918

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

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

15000 руб.

10.11.2023    11512    40    27    

66

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

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    956    2    0    

5

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

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

5000 руб.

07.02.2018    104013    244    100    

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

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

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

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

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

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