Отображение таблиц изменений в 1С

1. user1776578 08.02.24 11:59 Сейчас в теме
Подскажите пожалуйста,как написан алгоритм получения таблиц изменений в консоли запросов? где его можно посмотреть?
Пишу свой консоль запросов и хочу добавить туда данную функцию
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. -AI- 08.02.24 12:17 Сейчас в теме
(1)
Пишу свой консоль запросов
а залезть в код "чужой консоль" не можете?

хотите что бы другие за вас это сделали?
3. user1776578 08.02.24 12:42 Сейчас в теме
(2) Я смотрел тот код. Не глупый
Прикрепленные файлы:
4. user1776578 08.02.24 12:43 Сейчас в теме
Там с помощью метода открывается конструктор. А мне надо кодом конкретно данная кнопка
5. anton13m 2 08.02.24 13:49 Сейчас в теме
https://its.1c.ru/db/metod8dev/content/1798/hdoc
Если хотя бы одна константа участвует в обмене данными, то создается таблица регистрации изменений констант (_ConstsChngR) со следующими полями:
_Node - ссылка на узел плана обмена;
_MessageNo - номер сообщения обмена данными, в которое было выгружено это изменение или NULL, если оно еще не было выгружено;
_ConstID - идентификатор константы, значение которой изменилось.
_Fld<n> - общие реквизиты

И далее для остальных таблиц.
6. user1776578 08.02.24 18:14 Сейчас в теме
(5) Это я тоже понимаю,что из планов обмена берется. Но хоть один примерчик не дадите,как выцепить изменения?
7. anton13m 2 08.02.24 20:19 Сейчас в теме
(6)
Какие изменения? Если объект метаданных добавлен в план обмена, то у него будет таблица изменений. В конструкторе на уровне платформы реализовано.
При нажатии на кнопку обходите объекты и проверяйте на включение в узел обмена, затем добавляете новую строку с таблицей изменений и полями, которые вам нужны.
После этого работа в запросе происходит как и с другими таблицами.
8. user1776578 08.02.24 21:01 Сейчас в теме
(7) Можно пример,как проверить на включение в узел обмена? Буду очень благодарен за ваш опыт
9. anton13m 2 09.02.24 08:33 Сейчас в теме
(8)
Для Каждого Об_МД из Метаданные.Документы Цикл
	Содержит = Метаданные.ПланыОбмена.Полный.Состав.Содержит(Об_МД);
	Если Содержит Тогда
		// Добавляем в таблицу	новую строку с изменениями	
	КонецЕсли;
КонецЦикла;
10. user1776578 09.02.24 10:00 Сейчас в теме
(9)
Для Каждого Об_МД из Метаданные.Документы Цикл
Содержит = Метаданные.ПланыОбмена.Полный.Состав.Содержит(Об_МД);
Если Содержит Тогда
// Добавляем в таблицу новую строку с изменениями
КонецЕсли;
КонецЦикла;


Все шикарно,но почему то в дерево не хочет добавлять?:( Он не находит метаданные с изменениями
Прикрепленные файлы:
11. user1776578 12.02.24 09:14 Сейчас в теме
(9)Я что то не так делаю?
12. user1776578 12.02.24 10:28 Сейчас в теме
(9)Как обратится к самой таблице изменений?
13. anton13m 2 12.02.24 10:35 Сейчас в теме
(11)
Наверное что-то не так
(12)
В чем вопрос? У вас на форме дерево, для объектов у которых есть таблица изменений нужно добавить строчку которая называется "АвансовыйОтчет.Изменения". При выборе таблицы в запросе обращение к ней идет следующим образом:
ВЫБРАТЬ
	АвансовыйОтчетИзменения.Узел КАК Узел,
	АвансовыйОтчетИзменения.НомерСообщения КАК НомерСообщения,
	АвансовыйОтчетИзменения.Ссылка КАК Ссылка
ИЗ
	Документ.АвансовыйОтчет.Изменения КАК АвансовыйОтчетИзменения
14. user1776578 12.02.24 19:33 Сейчас в теме
(13) Это я тоже понимаю ) Просто до этого я добавлял метаданные и все были чики пуки... и реквизиты нужны подтягивались и т.д. А тут не могу данную таблицу изменений подтянуть(
15. anton13m 2 13.02.24 11:18 Сейчас в теме
(14)
Так реквизиты все определены, посмотрите в конструкторе, там же везде Узел, НомерСообщения, Ссылка.
16. user1776578 14.02.24 08:45 Сейчас в теме
(15) в конструкторе да,но я пишу свой конструктор можно сказать)
17. user1776578 14.02.24 09:21 Сейчас в теме
(15)
&НаКлиенте
Процедура КомандаПолучитьТаблицыИзменений(Команда)
	
	Элементы.ДоступныеТаблицыИзменений.Пометка = Не Элементы.ДоступныеТаблицыИзменений.Пометка;
		
	ОтобразитьТаблицыИзменений();
	
КонецПроцедуры


&НаСервере
Процедура ОтобразитьТаблицыИзменений()
		
		ДоступныеТаблицы.ПолучитьЭлементы().Очистить();
		
		ВидыМетаданных = ПолучитьВидыМетаданных();
		
		ПорядокЭлемента = 0;
	
		Для Каждого ВидМетаданных Из ВидыМетаданных Цикл   
				
			Если ВидМетаданных.Значение = "Последовательности" Тогда
				//БиблиотекаКартинок.КоллекцияОбъектыМетаданных.
				//Картинка = БиблиотекаКартинок["Метаданные" + ВидМетаданных.Значение];
				Картинка = БиблиотекаКартинок["СформироватьОтчет"];
			//ИначеЕсли ВидМетаданных.Значение = "ТаблицыИзменений" Тогда
			//	Картинка = БиблиотекаКартинок["КонструкторЗапросаОтображатьТаблицыИзменений"];
			Иначе		
				Картинка = БиблиотекаКартинок[ВидМетаданных.Ключ];
			КонецЕсли;

			КоллекцияМетаданных = Метаданные[ВидМетаданных.Значение];

			СтрокаВидМетаданных = ДоступныеТаблицы.ПолучитьЭлементы().Добавить();
			СтрокаВидМетаданных.Псевдоним 			= ВидМетаданных.Значение;
			СтрокаВидМетаданных.Имя 				= ВидМетаданных.Ключ;
			СтрокаВидМетаданных.Картинка 			= Картинка;
			СтрокаВидМетаданных.ПолноеИмяМетаданных = ВидМетаданных.Значение;
			СтрокаВидМетаданных.ТипСтрокой			= ПолучитьСписокТиповСтрокойПоКоллекцииМетаданных(КоллекцияМетаданных);
			СтрокаВидМетаданных.Порядок				= ПорядокЭлемента;
			
			Если КоллекцияМетаданных.Количество() > 0 Тогда
				ФиктивнаяСтрока = СтрокаВидМетаданных.ПолучитьЭлементы().Добавить();
			КонецЕсли;
			
			ПорядокЭлемента = ПорядокЭлемента + 1;
			
		КонецЦикла;
			
КонецПроцедуры

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

КонецФункции

&НаСервере
Функция ПолучитьСписокТиповСтрокойПоКоллекцииМетаданных(КоллекцияМетаданных)

	МассивИменТипов = Новый Массив;

	МассивИменТипов.Добавить("");

	Для Каждого МетаданныеОбъекта Из КоллекцияМетаданных Цикл 
		
		МассивИменТипов.Добавить(МетаданныеОбъекта.ПолноеИмя()); 
		
		Если Метаданные.ПланыОбмена.Полный.Состав.Содержит(МетаданныеОбъекта) и Элементы.ДоступныеТаблицыИзменений.Пометка Тогда
			МассивИменТипов.Добавить(МетаданныеОбъекта.ПолноеИмя() + ".Изменения");
		КонецЕсли;
		                                                             
	КонецЦикла;

	МассивИменТипов.Добавить("");

	СписокТиповСтрокой = СтрСоединить(МассивИменТипов, ",");

	Возврат СписокТиповСтрокой;

КонецФункции 

Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот