Проверка регистраторов при обновлении конфигурации

23.04.20

Задачи пользователя - Корректировка данных

При обновлении конфигурации состав движений документов может быть изменен. Если в них были сделаны движения по своим регистрам, то их нужно восстановить. Если забыть это сделать - данные будут утеряны.

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

Также можно забыть восстановить слетевшие изменения в определяемых типах. 

Чтобы гарантировать себя от этой ситуации, я сделал проверку состава регистраторов для добавленных регистров. Она состоит из двух модулей - для клиентской и серверной части.

Серверный модуль выглядит так:

Процедура ПроверкаКонфигурации(Отказ) Экспорт
	
	Если Не РольДоступна("ПолныеПрава") Тогда
		возврат;
	КонецЕсли;
	
	ПроверитьРегистраторы_РегистраНакопления_мт_ВыполнениеПроизводственныхОпераций(Отказ);
	
	ПроверитьОпределяемыйТип_ВладелецПрисоединенныхФайлов(Отказ);
	ПроверитьОпределяемыйТип_ПрисоединенныйФайл(Отказ);
	ПроверитьОпределяемыйТип_ПрисоединенныйФайлОбъект(Отказ);
	
КонецПроцедуры

Процедура ПроверитьРегистраторы_РегистраНакопления_мт_ВыполнениеПроизводственныхОпераций(Отказ)
	
	МетаданныеРегистра = Метаданные.РегистрыНакопления.мт_ВыполнениеПроизводственныхОпераций;
	
	ТребуемыеРегистраторы = Новый Массив;
	ТребуемыеРегистраторы.Добавить(Метаданные.Документы.КорректировкаРегистров);
	ТребуемыеРегистраторы.Добавить(Метаданные.Документы.ПоступлениеОтПереработчика);
	ТребуемыеРегистраторы.Добавить(Метаданные.Документы.ПроизводственнаяОперация2_2);
	
	ПроверитьНаличиеРегистраторов(МетаданныеРегистра, ТребуемыеРегистраторы, Отказ);
	
КонецПроцедуры

Процедура ПроверитьОпределяемыйТип_ВладелецПрисоединенныхФайлов(Отказ)
	
	МетаданныеОпределяемогоТипа = Метаданные.ОпределяемыеТипы.ВладелецПрисоединенныхФайлов;
	
	ТребуемыеТипы = Новый Массив;
	ТребуемыеТипы.Добавить(Тип("ДокументСсылка.мт_АктОБраке"));
	ТребуемыеТипы.Добавить(Тип("ДокументСсылка.мт_СогласованиеОтклонений"));
	
	ПроверитьВхождениеТипов_в_ОпределяемыйТип(МетаданныеОпределяемогоТипа, ТребуемыеТипы, Отказ)
	
КонецПроцедуры

Процедура ПроверитьНаличиеРегистраторов(МетаданныеРегистра, ТребуемыеРегистраторы, Отказ)
	
	ТекстСообщенияОбОшибке = "";
	
	Для Каждого ОбъектМетаданных Из ТребуемыеРегистраторы Цикл
		
		Если НЕ ОбъектМетаданных.Движения.Содержит(МетаданныеРегистра) Тогда
			
			Если ТекстСообщенияОбОшибке = "" Тогда
				ТекстСообщенияОбОшибке = "В регистре "+МетаданныеРегистра.ПолноеИмя() + " не указаны регистраторы:"
			КонецЕсли;
			
			ТекстСообщенияОбОшибке = ТекстСообщенияОбОшибке + Символы.ВК + ОбъектМетаданных.Имя;
			Отказ = Истина;
			
		КонецЕсли;
		
	КонецЦикла;
		
	Если ЗначениеЗаполнено(ТекстСообщенияОбОшибке) Тогда
		ЗаписьЖурналаРегистрации("Проверка конфигурации", УровеньЖурналаРегистрации.Ошибка,,,ТекстСообщенияОбОшибке);
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОбОшибке);
	КонецЕсли;
	
КонецПроцедуры

Процедура ПроверитьВхождениеТипов_в_ОпределяемыйТип(МетаданныеОпределяемогоТипа, ТребуемыеТипы, Отказ)
	
	ТекстСообщенияОбОшибке = "";
	
	Для Каждого Тип Из ТребуемыеТипы Цикл
		
		Если НЕ МетаданныеОпределяемогоТипа.Тип.СодержитТип(Тип) Тогда
			
			Если ТекстСообщенияОбОшибке = "" Тогда
				ТекстСообщенияОбОшибке = "В определяемом типе "+МетаданныеОпределяемогоТипа.ПолноеИмя() + " не указан тип:"
			КонецЕсли;
			
			ТекстСообщенияОбОшибке = ТекстСообщенияОбОшибке + Символы.ВК + Строка(Тип);
			Отказ = Истина;
			
		КонецЕсли;
		
	КонецЦикла;
		
	Если ЗначениеЗаполнено(ТекстСообщенияОбОшибке) Тогда
		ЗаписьЖурналаРегистрации("Проверка конфигурации", УровеньЖурналаРегистрации.Ошибка,,,ТекстСообщенияОбОшибке);
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОбОшибке);
	КонецЕсли;
	
КонецПроцедуры

Клиентская часть содержит вызов процедуры "ПроверкаКонфигурации" и вывод окна с предупреждением об ошибке:

Процедура ПроверкаКонфигурации() Экспорт
	
	Отказ = Ложь;
	мт_ТестированиеКонфигурации_Сервер.ПроверкаКонфигурации(Отказ);
	
	Если Отказ Тогда
		
		ПоказатьПредупреждение(, "Обнаружены ошибки при проверке конфигурации (см. журнал регистрации)");
		
	КонецЕсли;
	
КонецПроцедуры

Функция вызывается при старте системы. Сообщение об ошибке будет выдано при запуске тестовой копии обновленной базы, и будет исправлено до того, как попадет в рабочую базу.

См. также

Исправление в 1С:ЗУП/ЗКГУ ошибок по НДФЛ и взаиморасчетам с сотрудниками на начало расчетного года.

Корректировка данных Зарплата Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры бюджетного учреждения 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ Платные (руб)

Обработка исправляет технические ошибки по НДФЛ, взаиморасчетам с сотрудниками в 1С:ЗУП (1С:ЗКГУ) на начало года. Фактически все ошибки, которые проявляются в ведомостях на выплату, расчетных листках, при заполнении ведомостей на выплату и отчетах 6-НДФЛ и т.д. нужно начинать исправлять с начала расчетного года. Это позволит быть уверенными, что после завершения расчетов предыдущего года, начали работать с «чистого листа» без ошибочных остатков.

4800 руб.

06.10.2023    2617    30    15    

35

Тестирование и исправление ключей аналитики ERP, УТ11, КА

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

Незаменимая обработка для сопровождения конфигураций: ERP, УТ, КА. Позволяет вычистить многие ошибки в ключах аналитики, в ключевых справочниках конфигурации.

3600 руб.

10.02.2017    107271    636    173    

679

Ускоренное проведение документов (x4), устранение ошибок 60/62 счетов и зачет авансов (Бухгалтерия 3.0)

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

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    27924    82    146    

61

Исправление ошибки закрытия месяца "Обнаружены ненулевые остатки по суммам при нулевом остатке по количеству в регистре себестоимости по организации". УТ 11.4,УТ 11.5, КА 2.4,КА 2.5, ERP 2.4, ERP 2.5, КА 2 Казахстан, Управление торговлей 3 для Казахстана

Закрытие периода Корректировка данных Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Закрытие месяца - важный процесс в современных конфигурациях, таких как УТ 11.4, УТ 11.5, КА 2.4, КА 2.5 ERP 2.4,ERP 2.5, КА 2 Казахстан, УТ 3 Казахстан регламентные операции влияют на расчет себестоимости, и ошибки в данном расчете не дают картины деятельности организации.

2400 руб.

27.10.2021    22550    302    35    

74

Заполнение документа "Корректировка регистров" произвольными данными

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

Внешняя обработка, позволяющая произвольным образом заполнять документ "Корректировка регистров" Предназначена для использования в конфигурациях "Управление торговлей 11", "Управление небольшой фирмой", "ERP Управление предприятием", а также в других конфигурациях, в состав которых входит библиотека стандартных подсистем (БСП) версии 2.2+ и указанный выше документ.

2400 руб.

13.07.2015    50317    171    29    

121

Исправление ошибок по НДФЛ и взаиморасчетам с сотрудниками в 1С:Бухгалтерия 3.0

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

Внешняя обработка предназначена для исправления самых различных ошибок, возникших по самым разным причинам. Общее проявление этих ошибок видно в различии данных между: проводками и различными отчетами по НДФЛ, заполнении ведомостей на выдачу зарплаты, неверным расчетом НДФЛ при начислении ЗП и т.д.

3600 руб.

09.02.2024    713    3    4    

6
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. cleaner_it 220 26.04.20 16:09 Сейчас в теме
При обновлении конфигурации поставщика может быть изменен состав движений документа. Если разработчиком в конфигурацию были добавлены свои регистры, и в качестве регистраторов выбраны документы основной поставки, то этот регистратор у них при этом слетит. Их надо восстановить вручную.


Неправильно обновляли, раз в основной конфигурации состав движений был заменён на состав движений из конфигурации поставщика. Есть ведь возможность объединения состава движений.
+
2. ipoloskov 162 26.04.20 18:07 Сейчас в теме
(1) если поставщик исключил движение по определенному регистратору - при объединении состава движений, он будет удален?
+
4. cleaner_it 220 27.04.20 15:46 Сейчас в теме
(2)
регистратору


Останется. Не путайте конфигурацию поставщика и основную конфигурацию
+
6. ipoloskov 162 27.04.20 16:25 Сейчас в теме
(4) поэтому я и не использую режим объединения состава движений
+
3. GAS.tlt 5 26.04.20 18:14 Сейчас в теме
(1)
А теперь представте кейс:
Вам постоянно нужно обновлять 15 разных измененных больших конфигураций. И релизов нужно накатить не 1 а штук 5. Можно конечно на каждом этапе галочки проверять (15*5=75 раз ), а можно использовать метод автора, плюс написать в autoIT скрипт обновления который без пользователя работает и если уже движения слетели (это будет происходить очень редко) ты об этом узнаешь, откатишься на резервную копию и обновишь руками установив нужную галочку.
Автору жирный плюс. Буду использовать. (Жалко что я сам до этого не додумался)
+
5. cleaner_it 220 27.04.20 15:52 Сейчас в теме
(3) Автообновлениями не занимался) Если дописывать через расширения, подписки на события, и переопределяемые модули - то контролировать попросту нечего. А если лезть глубже - то никакому скрипту я обновление не доверю. Не один, и не два раза встречался, когда добавленная дописка теряет актуальность, и её нужно убрать, или переместить, или ещё немного дописать. Со старыми конфигурациями на обычных формах сложнее, конечно, но с другой стороны - там в последние годы ничего и не пишут особо.

Автору плюс в любом случае - разработка концептуальная, пригодиться может и в других случаях
wolfsoft; +1
7. astratek 2 28.04.20 14:23 Сейчас в теме
Небольшое замечание, отрази в статье, что вызывать надо только при обновлении конфигурации, а не при каждом запуске системы.
+
8. ipoloskov 162 28.04.20 15:47 Сейчас в теме
(7) я думал вызывать только при обновлении. Но потом решил, что лучше при каждом запуске, чтобы проверялось и при обычной разработке. Тормозов это не добавляет, и вызывается только для ограниченного количества пользователей: только для тех, у кого полные права.
+
9. i.s.o 23.06.20 11:31 Сейчас в теме
Спасибо, возьму это на заметку.
Но, я пошел немного другим путем - для всех "моих" регистров есть один регистратор - это, скажем, ДокументРегистраторДляДополнийКонфигурации с реквизитом "ДокументИсточник" - ссылка на документ стандартной конфигурации. Также есть и другие необходимые мне реквизиты. Каждый "мой" регистр обязательно содержит измерение "ДокументИсточник" - ссылки на документы стандартной конфигурации.
Есть "свои" подписки на события, где описано для каких документов необходимо создавать документ ДокументРегистраторДляДополнийКонфигурации, и все дальнейшие действия происходят уже с этим документом. И всегда есть доступ к ДокументуИсточнику, и из ДокументаИсточника можно посмотреть движения по ДокументРегистраторДляДополнийКонфигурации для этого ДокументаИсточника (отдельно для форм при открытии формируются кнопки для этого, и то для пользователей, кому это необходимо).
Отдельно могу перепроводить ДокументРегистраторДляДополнийКонфигурации, совсем не затрагивая ДокументИсточник (только чтение его).
И при обновлении вообще никогда не сталкиваюсь с тем, что будут мои дополнения затронуты.
+
10. ipoloskov 162 24.06.20 12:23 Сейчас в теме
(9) я так сделал на одном проекте ERP. Потом отказался от этой схемы и переделал на обычную.
Причина в том, что однажды мне при проведении потребовались остатки на дату документа, естественно, без учета движений этого документа. На обычной схеме это делается просто: берем остатки по регистру на дату документа, и вычитаем движения по регистру этого документа. Запрос получается простой.

На схеме с отдельным документом мне нужно найти вспомогательный документ и вычесть его движения. Получился такой вот монстр:
	Если ПолучатьОстаткиПроверенныхОТКНаДату=Неопределено
		И ЗначениеЗаполнено(ИсключатьДвиженияДокумента) Тогда
		
		//В целом ряде документов движения по мт_ДеталиПроверенныеОТК делает другой документ, а именно мт_УчетОстатковСерийныхНомеров.
		ДвижениеПоРегистру_ДеталиПроверенныеОТК_ДелаетОтдельныйДокум­ент_УчетОстатковСерийныхНомеров = 
			ТипЗнч(ИсключатьДвиженияДокумента) <> Тип("ДокументСсылка.мт_СборочнаяВедомость");
		
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "ПОМЕСТИТЬ ВТ_ПрошлиПроверкуОТК", "ПОМЕСТИТЬ ВТ_ПрошлиПроверкуОТК_Предварительно");
		Запрос.УстановитьПараметр("ИсключатьДвиженияДокумента", ИсключатьДвиженияДокумента);
		
		Запрос.Текст = Запрос.Текст + ";
						|
	               		|////////////////////////////////////////////////////////////­////////////////////
						|ВЫБРАТЬ
						|	ВТ_ПрошлиПроверкуОТК_Предварительно.Номенклатура КАК Номенклатура,
						|	ВТ_ПрошлиПроверкуОТК_Предварительно.Характеристика КАК Характеристика,
						|	ВТ_ПрошлиПроверкуОТК_Предварительно.Серия КАК Серия,
						|	ВТ_ПрошлиПроверкуОТК_Предварительно.ПровереноОстаток КАК ПровереноОстаток,
						|	ВТ_ПрошлиПроверкуОТК_Предварительно.ГодныеОстаток КАК ГодныеОстаток
						|ПОМЕСТИТЬ ВТ_ПрошлиПроверкуОТК_Объединенная
						|ИЗ
						|	ВТ_ПрошлиПроверкуОТК_Предварительно КАК ВТ_ПрошлиПроверкуОТК_Предварительно
						|
						|ОБЪЕДИНИТЬ ВСЕ
						|
						|ВЫБРАТЬ
						|	мт_ДеталиПроверенныеОТК.Номенклатура,
						|	мт_ДеталиПроверенныеОТК.Характеристика,
						|	мт_ДеталиПроверенныеОТК.Серия,
						|	СУММА(ВЫБОР
						|			КОГДА мт_ДеталиПроверенныеОТК.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
						|				ТОГДА -мт_ДеталиПроверенныеОТК.Проверено
						|			ИНАЧЕ мт_ДеталиПроверенныеОТК.Проверено
						|		КОНЕЦ),
						|	СУММА(ВЫБОР
						|			КОГДА мт_ДеталиПроверенныеОТК.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
						|				ТОГДА -мт_ДеталиПроверенныеОТК.Годные
						|			ИНАЧЕ мт_ДеталиПроверенныеОТК.Годные
						|		КОНЕЦ)
						|ИЗ";
		
		Если ДвижениеПоРегистру_ДеталиПроверенныеОТК_ДелаетОтдельныйДокум­ент_УчетОстатковСерийныхНомеров Тогда
			
			Запрос.Текст = Запрос.Текст + "
						|	Документ.мт_УчетОстатковСерийныхНомеров КАК мт_УчетОстатковСерийныхНомеров
						|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.мт_ДеталиПроверенныеОТК КАК мт_ДеталиПроверенныеОТК
						|		ПО мт_УчетОстатковСерийныхНомеров.Ссылка = мт_ДеталиПроверенныеОТК.Регистратор
						|ГДЕ
						|	мт_УчетОстатковСерийныхНомеров.ДокументОснование = &ИсключатьДвиженияДокумента";
			
		Иначе
			
			Запрос.Текст = Запрос.Текст + "
						|	РегистрНакопления.мт_ДеталиПроверенныеОТК КАК мт_ДеталиПроверенныеОТК
						|ГДЕ
						|	мт_ДеталиПроверенныеОТК.Регистратор = &ИсключатьДвиженияДокумента";
			
		КонецЕсли;
		
		Запрос.Текст = Запрос.Текст + "
						|
						|СГРУППИРОВАТЬ ПО
						|	мт_ДеталиПроверенныеОТК.Номенклатура,
						|	мт_ДеталиПроверенныеОТК.Характеристика,
						|	мт_ДеталиПроверенныеОТК.Серия
						|;
						|
						|////////////////////////////////////////////////////////////­////////////////////
						|ВЫБРАТЬ
						|	ВТ_ПрошлиПроверкуОТК_Объединенная.Номенклатура КАК Номенклатура,
						|	ВТ_ПрошлиПроверкуОТК_Объединенная.Характеристика КАК Характеристика,
						|	ВТ_ПрошлиПроверкуОТК_Объединенная.Серия КАК Серия,
						|	СУММА(ВТ_ПрошлиПроверкуОТК_Объединенная.ПровереноОстаток) КАК ПровереноОстаток,
						|	СУММА(ВТ_ПрошлиПроверкуОТК_Объединенная.ГодныеОстаток) КАК ГодныеОстаток
						|ПОМЕСТИТЬ ВТ_ПрошлиПроверкуОТК
						|ИЗ
						|	ВТ_ПрошлиПроверкуОТК_Объединенная КАК ВТ_ПрошлиПроверкуОТК_Объединенная
						|
						|СГРУППИРОВАТЬ ПО
						|	ВТ_ПрошлиПроверкуОТК_Объединенная.Номенклатура,
						|	ВТ_ПрошлиПроверкуОТК_Объединенная.Характеристика,
						|	ВТ_ПрошлиПроверкуОТК_Объединенная.Серия";
		
	КонецЕсли;
Показать

А монстров я не люблю.
Кроме того, если возникает ошибка при проведении вспомогательного документа, ее оказалось трудно поймать.
+
11. Smirnov1980 7 28.06.21 05:39 Сейчас в теме
Как всегда, пока не клюнет, авось пронесет... не пронесло, последнее обновление УПП зачистило порядка 20 регистров на документах ПТУ и РТУ.., а тут предложено предупреждающее данную ситуацию решение.
Для исправления пришлось работать в выходные, писать обработку по переносу данных и за все года записи в регистрах с дампа переносить в рабочую. Никому не пожелаю.

Спасибо за статью. Внедрим у себя, администраторам полегче будет, "минное поле обновлений" теперь будет с предупреждением :).
+
12. Smirnov1980 7 28.06.21 09:30 Сейчас в теме
Определение не типовых регистров и их типовых регистраторов
+
13. ipoloskov 162 29.06.21 14:02 Сейчас в теме
Развитие этой идеи можно посмотреть на гитхабе:
https://github.com/poloskovi/testconfig
+
Оставьте свое сообщение