Как сравнить две Тз? #332112


#0 by roalang
конецпроцедуры   Я знаю что у меня налеплено черте что, но по другому не получается как сравнить тз1 с тз3, и вывести все в другую таблицу???
#1 by agarych
Кода много... ниасилил... Отсортируй по какому либо полю две таблицы и построчно сравнивай.
#2 by roalang
пробую так сделать, но вылетает ошибка если тз3.код=тз1.код тогда {C:1C2008EXTFORMSОСТАТКИАНАЛИЗ С ТЗ.ERT}: Значение не представляет агрегатный объект (код)
#3 by Дуб
А отладчик что говорит? Таблицы-то на момент сравнения заполнены?
#4 by roalang
вродне бы да, одладчик показывает ошибку выражения
#5 by Said_We
А что в результате надо получить? Добавь колонку и в отдной таблице пропиши 1, а в другой -1 сверни и получишь что совпадает будет с 0, а что не совпадает будет не с нулем. Если в ТЗ_1 и ТЗ_2 есть внутри одинаковые строчки, то необходимо предварительно сами ТЗ свернуть.
#6 by Said_We
Есть медод в ТЗ "Заполнить(,,,)". Применять его можно только если количество строк в ТЗ <> 0. Не за что.
#7 by antoneus
естессно будет ошибка. а ВыбратьСтроки кто будет писать? в первой - ВыбратьСтроки, во второй - НайтиЗначение.
#8 by antoneus
ой, не. переменные передавай в процедуру-то
#9 by roalang
Said_We надо получить 3 ТЗ, перевысти в бумажный вариант, которую отдать снабженцам
#10 by roalang
#11 by Said_We
Неа не надо. Сравниваешь же с какой-то целью. Цель бывает одна - найти одинаковые и найти разные. Ну это собственно одна задача найти одинаковые и разные. После свертки ты и получиль что есть разное и что есть одинаковое. А дальше можно с этим делать все что хочешь и выводить как хочешь.
#12 by Дуб
Попробуй в таблицах нормально создавать колонки (с типизацией)
#13 by Если
+1
#14 by Если
#15 by Said_We
И еще. Зачем у Матерьала брать наименование, если нужна ссылка на материал.
#16 by Said_We
И еще. Зачем у "МатерИала" брать наименование, если нужна ссылка на материал.
#17 by Skom
иногда бывает полезно сделать дополнительное индексное поле.... как например в закрытии кассовой смены в ОтчетеККМ там индекс составляется по Номенклатура.Наименование+ЦенаПродажи.... может не в тему но код ниасилил прочесть весь
#18 by Said_We
Если не ставить в Сортировать "*" по колонкам со ссылочным типом, то сортировка будет по основному представлению.... При свертке все равно. Я из понял задачу так. Есть две идентичные по струкуре таблицы, но разные по содержанию. Необходимо найти вче есть сходство и в чем есть различие этих ТЗ. P.S. Инициализацию ТЗ я бы вынес в отдельную функцию или процедуру. Что бы несколько раз одно и тоже не писать да и исключить ошибки (в одном месте прописал колонку, а во втором забыл).
#19 by Дуб
Стопудово
#20 by Skom
по поводу сказал же проста ниасили прочесть и написал удобный механизм для обработки ТЗ с индексами... а по поводу если все как в то самое простое это тупо пробегатьсся циклом построчно и делать поиском в другой таблице.... причем надо учесть что во второй таблице может быть две записи идентичны одной записи у нас в одном отчете похоже реализовано...там используется транзитная таблица....счас не вспомню ну в общем в общем поиск происходит по все
#21 by Skom
по всей таблице а не останавливается на первом найденном элементе
#22 by Дуб
Уточнение: там цикл в цикле. Первый - по строкам, второй - по колонкам (или наоборот). Тогда можно в глобальную функцию вытащить и юзать по необходимости.
#23 by VladZ
Жуть...
#24 by Evg
в 1с++ у индексированной таблицы есть методы реализующие сравнение двух тз: Объединить / Merge добавляет строки из таблицы - источника в текущую таблицу. Если в таблице - источнике есть колонки, которых нет в текущей, то они создаются. Объединени осуществляется с учётом индекса и фильтра таблицы - источника. Пересечение / Conjunction пересечение двух таблиц по ключевым полям. Результатом пересечения является таблица, в которой присутствуют строки текущей ТЗ, которые есть в ТЗ2, и строки ТЗ2, которые есть в текущей ТЗ (с учетом флДобавлятьСтрокиТЗ2). Совпадение строк определяется по индексам ИндексТекущейТЗ и ИндексТЗ2. Количество колонок в индексах должно быть одинаковым. Разность / Difference разность двух таблиц по ключевым полям. Результатом является таблица, в которой присутствуют строки текущей ТЗ, которых нет в ТЗ2, и строки ТЗ2, которых нет в текущей ТЗ (с учетом флДобавлятьСтрокиТЗ2). Совпадение строк определяется по индексам ИндексТекущейТЗ и ИндексТЗ2. Количество колонок в индексах должно быть одинаковым.
#25 by Said_We
в нет тупого беганья по таблицам. Вы объединяете две таблицы в одну с добавлением служебной колонки с признаком откуда та или иная строчка взялась. Сворачиваете полученную большую таблицу. тзИТОГ.Свернуть(стрКолонок, "ДляСвертки"); Получаете сразу результат что есть и чего нет и где. Это сравнение двух таблиц. Если у Вас их больше, то необходимо определиться что необходимо - пересечение или наоборот уникальные записи и следовательно в несколько этапов.
#26 by roalang
Said_We Правильно понял.
#27 by roalang
конецфункции     а если у меня таблиц несколько то как???
#28 by smaharbA
ЗначениеВСтрокуВнутр
#29 by roalang
Said_We Подскажи пожалуйста как это сделать
#30 by 1сTalik
Если надо срравнить 2 таблицы ТЗ1 и ТЗ2 тогда вот: Далее перебором ТЗ получаешь различия. Если Количество или СНД или СКД не равно 0, тогда отличаются, если все 3 значения равны 0, тогда идентичны
#31 by 1сTalik
вместо ТЗ.СНД=ТЗ1.Количество ; ТЗ.Количество=ТЗ1.Количество, а вместо ТЗ.СНД=(-1)*ТЗ1.Количество ТЗ.Количество=(-1)*ТЗ1.Количество
#32 by 1сTalik
ой во втором случае ТЗ.Количество=(-1)*ТЗ2.Количество
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

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