Как сравнить две версии регистра сведений #245242


#0 by Гений 1С
Короче, нужно отследить изменения в регистре сведений. Итак, есть в одной таблице значений колонки: Изм1, Изм2,...ИзмН   Рес1, ...РесМ Это начальное состояние регистра сведений. В другой таблице значений такие же колонки: Изм1, Изм2,...ИзмН   Рес1, ...РесМ Это конечное состояние регистра сведений. Нужно получить результирующую таблицу: Изм1, Изм2,...ИзмН   Рес1, ...РесМ Статус Где Статус: 0  - запись не изменилась 1  - запись изменилась -1 - запись удалилась 2  - были изменены ресурсы (желательно еще и список этих ресурсов) Кто такое делал, как подступить?
#1 by Terv
чем свернуть не подходит?
#2 by Гений 1С
ресурсы не числовые
#3 by Варвар
"Вывести список", и "сравнить файлы" в 1С не катит?
#4 by Гений 1С
Не ручками, а программно и регулярно.. ;-) Не катят...
#5 by Johnbay
Запросом самое простое думаю
#6 by jcage
8.1 или 8.0?
#7 by Johnbay
ВЫБРАТЬ
#8 by Johnbay
Остальные статусы пропиши и все дела
#9 by jcage
не хочу обидеть коллега, но мне кажется, что вы написали фигню.
#10 by Johnbay
нада поправить на ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют1 КАК КурсыВалют1
#11 by Гений 1С
Запрос не катит, вторая ТЗ формируется не из регистра... а лишь по сути имитирует регистр.
#12 by jcage
Тебе похоже просто надо сравнить две ТЗ. Сортируй по периодам и валютам, далее обходи первую ТЗ и построчно сравнивай.
#13 by Гений 1С
у меня 4 регистра, надо какую-то универсальную хрень, хотя подход неплохой.
#14 by Johnbay
если все статично (формирующаяся ТЗ_2) то можно и нарисовать этот регистр, сгружать туда данные, строить запрос, удалять.
#15 by jcage
Я как-то пробовал использовать регистр сведений как буфер - фигня получилась. Запись в регистр - очень долгая операция по сравнению с работой с ТЗ. Так там написать универсальную процедуру легко. Просто получаешь первую строку из первой ТЗ, получаешь первую строку из второй ТЗ и сравниваешь. Тут важно замечательное свойство регистра сведений - уникальность записи по комбинации измерений (и периоду). Т.е. если ты осортируешь ТЗ по периоду и всем измерениям - то можешь со 100 % сравнить. Правда сортировка может времени дофига занять. Но зато обход будет только один.
#16 by Johnbay
Смотря как писать. По одной записи - да, долго. Оптом - быстрее напорядок :) Ну в общем хозяин - барин.
#17 by asady
попробуй в транзакции попытку записи в РС если будет ошибка - уникальный набор измерений уже есть - найти его легко. если ошибки нет - такого набора нет - искать нечего.
#18 by Neco
Как вариант выгрузить ТЗ1 и ТЗ2 в ТЗ. Далее свернуть ТЗ по измерениям и.. ресурсам. Потом, с помощью НайтиСтроки(..) найти все строки с Изм1, Изм2,...ИзмН  и проверить, если строк > 1, то ресурсы менялись. Далее можно пройтись по ресурсам и по сравнивать их и выявить какой ресурс менялся.
#19 by Гений 1С
Я придумал другой способ. Вот примерный код, пока еще не проверял, но думаю понятен ход мысли (нужно еще дебуггить):
#20 by Гений 1С
Вот окончательная отлаженная версия, юзается метод Свернуть:
#21 by Гений 1С
Окей, тема ушла в КЗ, код смотрите там:
#22 by vde69
собственно вот решение проще!!! и БЫСТРЕЕ!!!
#23 by kiruha
А про проблему больших ТЗ в 8.0 не слышал? И время на больших данных измерял?
#24 by simol
А если это использовать перед записью движений регистра, то вроде как если при отсутсвии изменений можно не записывать: 1. Поидее выиграш в скорости 2. Не изменяются последовательности. Как такая идея?
#25 by Гений 1С
У меня данные не большие, но в основном здесь работает метод свернуть, а как его ускорить, мы знаем. да, я такой метод знаю и его рассматривал, но по-моему СВЕРТКА быстрее, чем СОРТИРОВКА, да еще и построение индекса, нафиг... ;-)
#26 by Гений 1С
вставил кросс линки между моей и этой статьей.
#27 by Гений 1С
у меня готовая функция универсальная, а в еще дописывать надо.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С