|
Сравнение двух таблиц значений | ☑ | ||
---|---|---|---|---|
0
Штурман
04.03.15
✎
04:56
|
Есть две ТЗ, в которых некоторые значения первых колонок совпадают.
Надо их сравнить. Пишу кодом так: для каждого з из НовТЗ цикл для каждого с из ТЗпу цикл если з.Физлицо = с.Физлицо тогда сообщить(з.Физлицо); конецесли; конеццикла; конеццикла; Почему-то сообщает только одно физлицо, хотя ТЗ содержит кучу строк Что не так в коде? |
|||
1
anaed
04.03.15
✎
05:29
|
только 1 физлицо совпадает?
|
|||
2
Штурман
04.03.15
✎
05:53
|
(1) выводит только одно физлицо, хотя по факту там очень много физлиц сопадает
отладчиком смотрел, почему-то только один проход делает, типа взяло первое физлицо из первой ТЗ, и ищет его во второй ТЗ и все, а остальных не ищет |
|||
3
Dilgorp
04.03.15
✎
05:54
|
(2) может тогда запросом, чем цикл в цикле?
|
|||
4
anaed
04.03.15
✎
05:56
|
(2) может быть код все же отличается от приведенного в (0)?
|
|||
5
patria0muerte
04.03.15
✎
05:57
|
Странно. Попробуй по другому. Что то типа:
СтруктураПоиска = Новый Структура("Физлицо"); Для Каждого СтрокаПоиска Из НовТЗ Цикл СтруктураПоиска.Физлицо = СтрокаПоиска.Физлицо; НайденныеСтроки = ТЗпу.НайтиСтроки(СтруктураПоиска); Если НайденныеСтроки.Количество > 0 Тогда Сообщить("Дубль: " + СтрокаПоиска.Физлицо) КонецЕсли; КонецЦикла; |
|||
6
anaed
04.03.15
✎
05:58
|
(5) лучше уж запросом
|
|||
7
patria0muerte
04.03.15
✎
05:58
|
Или в своем протрассируй чем то типа:
Сообщить("" + з.Физлицо + " : " + с.Физлицо); |
|||
8
Dilgorp
04.03.15
✎
05:58
|
ВЫБРАТЬ
НовТЗ.Физлицо ПОМЕСТИТЬ НовТЗ ИЗ &НовТЗ КАК НовТЗ ; ВЫБРАТЬ ТЗпу.Физлицо ПОМЕСТИТЬ ТЗпу ИЗ &ТЗпу КАК ТЗпу ; ВЫБРАТЬ НовТЗ.Физлицо ИЗ НовТЗ КАК НовТЗ ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗпу КАК ТЗпу ПО НовТЗ.Физлицо = ТЗпу.Физлицо |
|||
9
patria0muerte
04.03.15
✎
05:59
|
По любому там половина - строки а не ссылки, или еще какой нибудь подобный косяк.
|
|||
10
Штурман
04.03.15
✎
05:59
|
(3) (6) не, запросом не охота, придется много таблиц значений через менеджер временных таблиц перегонять в запрос, а там уже сравнивать, много кода писать придется, хотелось бы просто через сравнение друх ТЗ
|
|||
11
Штурман
04.03.15
✎
05:59
|
(5) сейчас попробую
|
|||
12
Штурман
04.03.15
✎
06:01
|
(5) выдает ошибку:
{Форма.Форма.Форма(115)}: Поле объекта не обнаружено (Количество) Если НайденныеСтроки.Количество > 0 Тогда |
|||
13
Dilgorp
04.03.15
✎
06:02
|
(12)Количество()
|
|||
14
patria0muerte
04.03.15
✎
06:02
|
(12) Ну блин... скобки я забыл поставить.. это не поле, а метод...
|
|||
15
Штурман
04.03.15
✎
06:03
|
(7) выдало одного и того же сотрудника в одну строку два раза
типа Иванов Иванов |
|||
16
Штурман
04.03.15
✎
06:03
|
(14) вывело только одну строку:
Дубль: Иванов |
|||
17
Штурман
04.03.15
✎
06:04
|
(4) код не отличается, в (0) вставил копипастом
|
|||
18
Dilgorp
04.03.15
✎
06:04
|
(16) тогда точно (9)
|
|||
19
Штурман
04.03.15
✎
06:07
|
(18) ну если написать так:
для каждого з из НовТЗ цикл для каждого с из ТЗпу цикл если Строка(з.Физлицо) = Строка(с.Физлицо) тогда //сообщить(з.Физлицо); Сообщить("" + з.Физлицо + " : " + с.Физлицо); конецесли; конеццикла; конеццикла; то все-равно одного человека выводит |
|||
20
patria0muerte
04.03.15
✎
06:09
|
(19) Ты глазками в таблички посмотри, мышкой там потыкай, типы данных посмотри, и полюбому сам все сразу поймешь...
|
|||
21
Штурман
04.03.15
✎
06:16
|
(20) хочешь сказать, что первые колонки в обоих ТЗ должны быть одного типа?
Дописал так: ... ОписаниеФизлица = Новый ОписаниеТипов("СправочникСсылка.ФизическиеЛица"); тз.Колонки.Добавить("Физлицо", ОписаниеФизлица); ... и тд |
|||
22
Штурман
04.03.15
✎
06:22
|
Еще раз сейчас взял, посмотрел отладчиком
Точку останова поставил на если Строка(з.Физлицо) = Строка(с.Физлицо) тогда В табло смотрю з.Физлицо - Значение Иванов, Типа - Справочник физлиц с.Физлицо - Значение Петров, Типа - Справочник физлиц т.е. типы совпадают Только вот в процессе отладки, видно, что з.Физлицо все время одно значение висит - одно физлицо Иванов, и не меняется практически А вот с.Физлицо постоянно меняется, типа Иванов, Петров, Сидоров и т.д Получается, что цикл обходит только вторую ТЗ, а первую нет, и берет из первой ТЗ только одно физлицо и сравнивает с остальными, а когда совпало, прекращает работу, вместо того, чтобы взять из первой ТЗ еще одно физлицо для сравнения |
|||
23
Штурман
04.03.15
✎
06:24
|
А все, товарищи, разобрался :)
Оказалось, в первой ТЗ было только одно физлицо, а остальных не заполнил :) |
|||
24
Штурман
04.03.15
✎
06:24
|
Всем спасибо
|
|||
25
чувак
04.03.15
✎
06:27
|
(23) ну ты иш ты йоб
|
|||
26
patria0muerte
04.03.15
✎
06:28
|
(23) Ты это, высыпайся почаще, товарищь...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |