helpf.pro
Регистрация

v8: Как сравнить 2 таблицы значений и получить результат в 3ю.

Darkfull
11.12.2012 12:01Прочитано: 14208
Здравствуйте, проблема в отслеживании изменений элементов произвольных метаданных. Обработкой создаю csv файл с информацией по актуальности данных:
Код 1C v 8.х
 		ТабЗн1 = Новый ТаблицаЗначений;
ТабЗн1.Колонки.Добавить("Ссылка");
ТабЗн1.Колонки.Добавить("Версия");

СимволРазделитель = ";";

Выборка = Справочники.ПодразделенияОрганизаций.Выбрать();
Пока Выборка.Следующий() = 1 Цикл
НСтрока = ТабЗн1.Добавить();
НСтрока.Ссылка = Выборка.Ссылка.УникальныйИдентификатор();
НСтрока.Версия = Выборка.ВерсияДанных;
тхт = "";
ИмяФайла = "C:\depts_info.csv";
Текст = Новый ТекстовыйДокумент;

тхт = "";

Для каждого КолЗн из ТабЗн1.Колонки Цикл
тхт = тхт + КолЗн.Имя + СимволРазделитель;
КонецЦикла;
Текст.ДобавитьСтроку(тхт);

Для каждого Стр из ТабЗн1 Цикл
тхт = "";

Для Кол = 0 по ТабЗн1.Колонки.Количество()-1 Цикл
тхт = тхт + Стр[Кол] + СимволРазделитель;
КонецЦикла;
Текст.ДобавитьСтроку(тхт);
КонецЦикла;
Текст.Записать(ИмяФайла);


При последующих запусках обработки, запросом формируется ТЗ с текущими данными в базе, загружается ТЗ с последними актуальными из csv файла и сравниваются между собою. Результат: ТЗ с измененными, бобавленными или удаленными элементами. Вопрос: Как получить результат с применением запросов?
Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
11.12.2012 12:09Ответ № 1
полным соединением - все что не соединилось - изменено
Darkfull
11.12.2012 12:25Ответ № 2
А разве в результат не попадут все строки?
P.S. Если можно кусочек кода откуда плясать, а то у меня маловато навыка.
Изменено 11.12.12 12:29:43
E_Migachev
11.12.2012 13:47Ответ № 3
(2) Darkfull, да, попадут все, далее нужно будет обработать результат.
код написать сложновато, т.к. нет ничего подобного под рукой. давай свои примеры - посмотрим
Darkfull
11.12.2012 17:40Ответ № 4
Код 1C v 8.2 УП
 Процедура ЗапарилсяУже()

Попытка
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать("C:\OracleExp\depts_info.csv", КодировкаТекста.UTF8);
Текст.Показать();
ТабЗн1 = Новый ТаблицаЗначений;
ТабЗн1.Колонки.Добавить("Ссылка");
Табзн1.Колонки.Добавить("Версия");
ТабЗн1.Колонки.Добавить("Загружен");//Булево, изменяется посторонеей программой на значение "1", если элемент загружен в нее.
//Эта часть загрузки в ТЗ меня удручает, как бы сделать все по-другому?
Для ТСтр=2 по Текст.КоличествоСтрок() Цикл
Стр = Текст.ПолучитьСтроку(ТСтр);
НСтрока = ТабЗн1.Добавить();
Поз = Найти(Стр,";");
НСтрока.Ссылка = Лев(Стр,Поз - 1);
НСтрока.Версия = Лев(Прав(Стр, СтрДлина(Стр) - Поз),Найти(Прав(Стр, СтрДлина(Стр) - Поз),";") - 1);
НСтрока.Загружен = Сред(Прав(Стр, СтрДлина(Стр) - Поз),Найти(Прав(Стр, СтрДлина(Стр) - Поз),";") + 1,СтрДлина(Прав(Стр, СтрДлина(Стр) - Поз)) - 1);

КонецЦикла;
/////////////////////////////////////////////////////////////////////////////
ПострПечать = Новый ПостроительОтчета;
ПострПечать.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабЗн1);
ПострПечать.Вывести();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПодразделенияОрганизаций.Ссылка,
| ПодразделенияОрганизаций.ВерсияДанных,
| ПодразделенияОрганизаций.ПометкаУдаления,
| ПодразделенияОрганизаций.Предопределенный,
| ПодразделенияОрганизаций.Владелец,
| ПодразделенияОрганизаций.Родитель,
| ПодразделенияОрганизаций.Код,
| ПодразделенияОрганизаций.Наименование,
| ПодразделенияОрганизаций.ВидПодразделения,
| ПодразделенияОрганизаций.КодПоОКАТО,
| ПодразделенияОрганизаций.КПП,
| ПодразделенияОрганизаций.АнглийскийСиноним,
| ПодразделенияОрганизаций.РайонныйКоэффициент,
| ПодразделенияОрганизаций.РайонныйКоэффициентРФ,
| ПодразделенияОрганизаций.ТерриториальныеУсловияПФР,
| ПодразделенияОрганизаций.Порядок,
| ПодразделенияОрганизаций.СоответствуетСудамПодФлагомРФ,
| ПодразделенияОрганизаций.Представление
|ИЗ
| Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций";
ТабЗн = Новый ТаблицаЗначений;
ТабЗн = Запрос.Выполнить().Выгрузить();
//Вот и получили 2 ТЗ. Сравнение происходит по 2м полям: Ссылка и ВерсияДанных
Исключение


КонецПопытки;
КонецПроцедуры //ЗапарилсяУже()
E_Migachev
11.12.2012 18:02Ответ № 5
тебе нужно это все в 1 запрос и соединить по ссылке, там где версии будет 2 - там и изменения
Подсказка: Щелникни по Имени пользователя напротив ответа, и тем самым покажешь, что сообщение адресовано ему.
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.