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

23.11.16

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

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

Файлы

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

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

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

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

15500 руб.

02.09.2020    202817    1116    410    

1022

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

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

8400 руб.

20.08.2024    35760    206    104    

196

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

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    24009    62    26    

92

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

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

16000 руб.

10.11.2023    16491    69    39    

88

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

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

9360 руб.

17.05.2024    34718    123    53    

165

SALE! 30%

Инструментарий разработчика WEB-интеграция 1С v8.3 1C v8.2 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x Платные (руб)

Инструмент для генерации OpenApi (Swagger) спецификаций на основании файлов конфигураций 1С. Это консольное и десктопное приложение на языке Rust с полноценным редактором кода, содержащим автозамену и подсвечивание ошибок для быстрого и безошибочного написания документирующего комментария.

18000 12600 руб.

22.11.2024    1791    1    0    

8

Инструментарий разработчика Программист 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

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

6000 руб.

07.02.2018    107179    249    100    

313

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

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

3600 руб.

27.12.2024    2880    6    0    

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

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

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

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

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

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