Дополнительный журнал регистрации (управляемые формы), сравнение реквизитов и табличных частей

22.03.13

База данных - Журнал регистрации

Дополнительный журнал регистрации (управляемые формы), сравнение реквизитов и табличных частей

Скачать исходный код

Наименование Файл Версия Размер
ДополнительныйЖурналРегистрации82УФ
.cf 75,82Kb
65
.cf 75,82Kb 65 Скачать
Регистрирует изменения реквизитов и их табличных частей следующих типов объектов:
  1. Справочники
  2. Документы
  3. Планы видов расчета
  4. Планы видов характеристик
  5. Бизнес процессы
  6. Задачи
  7. Регистры сведений (независимые)
Форма списка журнала позволяет просмотреть все изменения в объекте в виде дерева и в отдельном окне.Ограничения:Форма отображения изменений объекта может показать максимум 4 табличные части и максимум 20 колонок в одной табличной части, кроме постоянных колонок.  Мне больше и не встречалось. Хранятся же изменения по любому количеству табличных частей и и любому количеству колонок.Для работы механизма сравнения табличных частей должен быть заполнен регистр «Ключевые колонки табличных частей», открывается по кнопке «Настройки» формы списка журнала. По умолчанию (если регистр не заполнен) система считает ключевыми колонки, у которых в свойстве «Проверка заполнения» стоит «Выдавать ошибку».Строки неограниченной длинны в табличных частях преобразует в строки ограниченной длинны (300), чтобы запрос сравнения работал. По желанию можно изменить в коде.Как устанавливать.Решение оформлено как файл конфигурации с одной подсистемой.Объединяем его со своей конфигурацией. При этом нужно снять флаги с раздела «Свойства» конфигурации и справочника «Пользователи» (предполагается, что он у вас уже есть).Всем пользователям включаем роль «ЗаписьВДополнительныйЖурналРегистрации»Решение выкладываю с открытым кодом. Буду исправлять только грубые ошибки, которые мешают адекватной работе подсистемы (пишите в каментах). Дальнейшее развитие не предполагаю ввиду сильной нехватки времени.Некоторые идеи подглядел в скриншотах других публикаций на эту тему, например: //infostart.ru/public/18588/

Дополнено 22.03.2013

Если на ваших конфигурациях выдает ошибку, связанную с определением текущего пользователя, исправьте способ определения текущего пользователя на тот, который реализован у вас. Делать это нужно в процедуре ОбработатьСобытиеПередЗаписьюОбъекта() в строке

ТекПользователь = ОбщегоНазначения.ТекущийПользователь();

 

Исправлены ошибки:

 

Выдавал ошибку при записи набора в регистре сведений без ресурсов и реквизитов.

См. также

Журнал изменений с восстановлением состояния ссылочных объектов и архивацией по HTTP / COM (расширение + конфигурация, 8.3.14+, ЛЮБАЯ конфигурация)

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

База данных «сама» меняет данные в документах/справочниках? Тогда данный журнал изменений для Вас! Практически не влияет на скорость записи объектов за счет быстрого алгоритма! Скорость работы почти в 2 раза выше типового механизма "История изменений"! Позволяет следить за изменениями и удалением в любых ссылочных объектах конфигурации, с возможностью архивации по HTTP(!) или COM, и сверткой данных. А так же, может восстановить состояние реквизитов (значения) до момента изменения или удаления объекта из базы. Есть ДЕМО-база где можно самостоятельно протестировать часть функционала! Работает на любых платформах выше 8.3.14+ и любых конфигурациях! Версия 3.1 от 24.08.2023!

21600 руб.

15.05.2017    42626    12    24    

38

Версионирование объектов для Альфа-авто, ред 4 и 5.

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

Подсистема версионирования объектов для конфигураций Рарус: Альфа-авто на базе типовой подсистемы от 1С. Позволяет хранить историю изменений документов и справочников, кто, что, когда и какие данные изменял, а так же вернуться к предыдущим версиям объекта.

4800 руб.

03.09.2016    42303    33    24    

37

LogManager - Внешний журнал регистрации в SQL

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

Журнал регистрации платформы 1С в SQL. Общая база хранения всех журналов. Через com-подключение регламентным заданием периодически догружает журналы регистраций из рабочих баз. Предоставляет настраиваемый доступ к журналам по правам подразделений. Формирует отчеты по пользователям и данным.

10000 руб.

23.05.2014    55574    52    16    

47

Мониторинг баз и серверов 1С

Журнал регистрации Мониторинг Платформа 1С v8.3 Платные (руб)

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

9000 руб.

28.08.2019    31105    14    21    

66

LogiCH - хранение и анализ журнала регистрации в сверхбыстрой СУБД ClickHouse

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

Конфигурация LogiCH эффективно решает проблему хранения и анализа записей журналов регистрации. Разработка использует столбцовую СУБД ClickHouse, одну из самых быстрых Big Data OLAP СУБД. Любой анализ журнала можно выполнить в одном отчете, в котором доступны все возможности СКД с учетом ограничений RLS. Количество подключаемых баз не ограничено и не влияет на скорость построения анализа.

5000 руб.

28.11.2018    19623    13    6    

37

Регламентное сокращение журнала регистрации

Инструменты администратора БД Журнал регистрации Платформа 1С v8.3 1С:Управление торговлей 11 Абонемент ($m)

Внешняя обработка для регламентного сокращения журнала регистрации для конфигураций на базе БСП и платформы 8.3.20+

1 стартмани

29.12.2023    1383    14    dima_gsv    1    

12

Магия преобразований: ЖР, ТЖ, RAS/RAC, логи - универсальное решение Vector

Мониторинг Журнал регистрации Технологический журнал Абонемент ($m)

Как легко и быстро с помощью специализированных решений собирать, парсить и передавать логи и метрики.

1 стартмани

13.11.2023    3139    4    AlexSTAL    0    

42

Мониторинг состояния с отправкой в telegram

Журнал регистрации Инструменты администратора БД Мониторинг Мессенджеры и боты Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х Абонемент ($m)

Внешняя обработка для БСП-конфигураций с простым программным интерфейсом. Предназначена для мониторинга состояния системы. Базово реализована отправка ошибок из журнала регистрации, но можно легко добавить мониторинг других журналов, каких-либо действий пользователей, состояния системы (например закрытие месяца).

3 стартмани

26.09.2023    1829    11    doom2good    10    

13
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. WellMaster 104 20.03.13 09:55 Сейчас в теме
Изменения в журнал записываются при записи/проведении? Как это влияет на скорость работы БД?
+
4. Makushimo 160 20.03.13 10:17 Сейчас в теме
(1) WellMaster,
предположительно незначительное, не замерял.
+
6. wunderland 201 21.03.13 19:22 Сейчас в теме
(1) это первый вопрос, который у меня возник, про скорость
+
2. Amras 43 20.03.13 10:04 Сейчас в теме
Ошибка при выполнении обработчика - 'ПередЗаписью'
по причине:
Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода СделатьЗаписьВДополнительныйЖурналРегистрацииДокументПередЗа­писью ().

ЗУП 2.5.6.3 - При записи документа "Начисление зарплаты работникам организации"
+
3. Makushimo 160 20.03.13 10:16 Сейчас в теме
(2) Amras,
спс, поправлю
+
7. Makushimo 160 22.03.13 09:18 Сейчас в теме
(2) Amras,
потестил на ЗУП 2.5.63.1 (демо) запись ведется без проблем. Возможно у вас доработанная конфа.
Подробности в студию, будем разбираться.

Кстати эта ЗУП на обычных формах, поэтому интерфейс для просмотра результатов записи в журнал не доступен.
Все сделано для управляемых форм.
+
5. WellMaster 104 20.03.13 11:02 Сейчас в теме
Это довольно важный момент. Если производительность упадет, хорошего мало.
+
8. Amras 43 22.03.13 10:50 Сейчас в теме
Попробую описать (Документ "Прием на работу в организацию" - не проведен, делаем перезапись):

Функция ПолучитьТекстЗапросаСравненияТаблиц(Колонки)
...


При сборке запроса по:
ТекстВТ_УдаленоИзмененоСекцияГДЕ = "ГДЕ
	   |	ВТ_ТаблицаПосле.НомерСтрокиПосле ЕСТЬ NULL
	   |			ИЛИ (";

ТекстВТ_ДобавленоИзмененоСекцияГДЕ = "ГДЕ
	   |	ВТ_ТаблицаДо.НомерСтрокиДо ЕСТЬ NULL
	   |			ИЛИ (";
Показать


С дальнейшим соединением запроса в данном модуле:

Если Колонка.Ключевая Тогда
(всегда попадает в это место, в Иначе не попал ни разу)
...

А теперь вот эти моменты:
ТекстВТ_УдаленоИзменено = ТекстВТ_УдаленоИзмененоСекцияВыбрать+Символы.ПС+ТекстВТ_УдаленоИзмененоСекцияИЗ+ТекстВТ_УдаленоИзмененоСе­кцияГДЕ+");"+Символы.ПС;



ТекстВТ_ДобавленоИзменено = ТекстВТ_ДобавленоИзмененоСекцияВыбрать+Символы.ПС+ТекстВТ_ДобавленоИзмененоСекцияИЗ+ТекстВТ_ДобавленоИзмене­ноСекцияГДЕ+");"+Символы.ПС;


Ну и формируется примерно такой кусок в запросе:

...
ГДЕ
   ВТ_ТаблицаДо.НомерСтрокиДо ЕСТЬ NULL
	ИЛИ ();

...

При выполнение запроса он начинает ругаться на это неопределенное состояние ИЛИ ()

П.С.
Про управляемые формы, точно... не сообразил сразу, немного изменил правила работы для общего модуля ДополнительныйЖурналРегистрации
+
9. Makushimo 160 22.03.13 11:13 Сейчас в теме
(8) Amras,
описанную вами ошибку исправил
файл перезалил
+
10. Amras 43 22.03.13 14:32 Сейчас в теме
(9)
Вот теперь все работает хорошо. Пока глубоко не копал, но показывает изменения верно. Только почему-то в разных строчках. Или это правильная логика? При более подробном рассмотрении, старое и новое отображается в двух таблицах напротив.
Прикрепленные файлы:
+
13. Makushimo 160 14.06.13 05:37 Сейчас в теме
(10) Amras,
Это логика работы такая.
Таблицы до и после сравниваются по ключевым полям.
Ключевые поля по умолчанию - это поля, обязательные для заполнения (свойство поля)
Судя по вашему скриншоту, поле "должность" и есть ключевое поле таблицы.
Вы просто поменяли должность, а журнал воспринял это как удаление текущей строки и последующее ее добавление новой строки.
Переопределить ключевые колонки для табличных частей можно по кнопке "Настройка" в форме списка журнала.
+
11. Amras 43 22.03.13 14:57 Сейчас в теме
Решил поиграться с отпусками организаций (доработана ТЧ Сотрудники). Читаем измения более развернуто, выдается сообщение:

{РегистрСведений.ДополнительныйЖурналРегистрации.Форма.ФормаПросмотраИзмененияОбъекта.Форма(338)}: Поле объекта не обнаружено (ТабличнаяЧасть1ДоКолонка21)
Элементы["ТабличнаяЧасть"+НомерТч+"ДоКолонка"+НомерКолонки].Заголовок = ИмяКолонки;

Вероятнее всего это произошло из за наличия в ТЧ 22 колонок. А если взять типовой расчет зарплаты (Начисление зарплаты работникам организации), то там колонок и того больше (порядка 32).
+
12. dskull86 13.06.13 15:25 Сейчас в теме
счето у меня вообще ниче не показывает, кнопки настроить нету, толи файл старый, хотя только вчера скачал
+
14. Makushimo 160 14.06.13 05:42 Сейчас в теме
Коллеги, обнаружил что текущая версия "Дополнительного журнала регистрации" не дружит с подсистемой БСП "Обновление версии ИБ". Когда при смене версии ИБ в конфигураторе запускаются процедуры подсистемы БСП, журнал вылетает с ошибкой при попытке зафиксировать изменения в служебных регистрах сведений.

Временное решение - заглушить выполнение обработчика подписки СделатьЗаписьВДополнительныйЖурналРегистрацииРегистрСведений­ПередЗаписью на время работы обработчиков обновления ИБ.

Над постоянным решением этой проблемы работаю. Выложу результат и новый файл по готовности.
+
15. Makushimo 160 25.06.13 07:58 Сейчас в теме
(14)
Проблема решена, журнал ругался на ресурсы и реквизиты с типом "Хранилище значения"
Решение заменить текст функции ДополнительныйЖурналРегистрации.ОпределитьКлючевыеКолонкиТабличнойЧасти на следующий текст:

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