![]() |
![]() |
![]() |
|
Сравнение 2 таблиц значений? | ☑ | ||
---|---|---|---|---|
0
TechKom
13.10.05
✎
12:23
|
Можно ли программно сравнить одну строку таблицы значений с другой, например есть такая строка в ТаблицеПроводки: Д50 К51 и мне нужно проверить есть ли такая же строка но в другой таблице значений КорректныеПровдоки? Как это сделать?
|
|||
1
Stilet
13.10.05
✎
12:50
|
Ну первое, что напрашивается использовать метод ТаблЗначений.Найти(). А чем этот способ не устраивает?
Идешь построчно по первой табл., ищешь строки из нее во второй. |
|||
2
TechKom
13.10.05
✎
12:58
|
через метод ТаблЗначений.Найти(); ?
|
|||
3
TechKom
13.10.05
✎
12:58
|
через метод ТаблЗначений.Найти(); ?
|
|||
4
ZolotarevAA
13.10.05
✎
13:13
|
Можно попробовать сделать запрос к двум таблицам (я имею ввиду Движения документа и Справочник проводок). Выглядеть будет очень изящно.
|
|||
5
TechKom
13.10.05
✎
13:20
|
(4) Как это мона сдеалть? Мне надо сравнить, есть ли проводки в регистре сведений или нет? Как это сделать в запросе?
|
|||
6
TechKom
13.10.05
✎
13:34
|
Есть строки в таблице значение Провдоки:
СчетДт СчетКр Д50 К51 Д60 К51 Д19 К60 например. И строки в таблице значений КоррекнтыеПроводки: СчетДт СчетКр Д50 К51 Д60 К51 Мне надо кажудую строку из таблицы Проводки проверить есть ли она в таблице Корректные проводки, соответсвенно Д19 К60 нет, надо выдать Сообщить ("Обнаружена некорректная проводка Д19 К60"); |
|||
7
ZolotarevAA
13.10.05
✎
13:44
|
(5) А Вы, я извиняюсь, с запросами работали?
|
|||
8
TechKom
13.10.05
✎
14:09
|
ну да
|
|||
9
ZolotarevAA
13.10.05
✎
14:17
|
(8) Ну, а в чем загвоздка? Пробуйте делать, если будет не получаться, то пишите.
Или Вы не знаете с чего начать? У меня, в частности, такая задача будет реализовываться позже, поэтому я Вам только рыбу и кинул. |
|||
10
TechKom
13.10.05
✎
14:18
|
(9)В смысле в запросе делать запрос к двум регистрам и сравнивать в запросе?
|
|||
11
ZolotarevAA
13.10.05
✎
14:21
|
(10) Ну да.
Самому все больше и больше нравится эта идея. |
|||
12
ZolotarevAA
13.10.05
✎
14:23
|
2 (10) Не сравнивать, а склеивать таблицы. Где не склеилось - там что-то и делать.
|
|||
13
Cerrg
13.10.05
✎
14:24
|
два запроса и через внешнее соединение получить только сопоставимые строки....
|
|||
14
TechKom
13.10.05
✎
14:30
|
(11) Честно говоря не разу не делал так, ну вот запрос:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КорректныеКорреспонденцииСчетов.СчетДт, | КорректныеКорреспонденцииСчетов.СчетКт, | ХозрасчетныйДвиженияССубконто.Регистратор, | ХозрасчетныйДвиженияССубконто.СчетДт КАК СчетДт1, | ХозрасчетныйДвиженияССубконто.СчетКт КАК СчетКт1 |ИЗ | РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(, , Регистратор = &Ссылка) КАК ХозрасчетныйДвиженияССубконто, | РегистрСведений.КорректныеКорреспонденцииСчетов КАК КорректныеКорреспонденцииСчетов"; Запрос.УстановитьПараметр("Регистратор", ссылка); Где именно делать сравнение? Что счета Дт и Кт регистра Хозрасчетный совпадают с регистром Коррекные операции? |
|||
15
TechKom
13.10.05
✎
14:32
|
(12) Вы имеет ввиду Связать 2 таблицы:
Где ХозрасчетныйДвиженияССубконто.СчетДт = КорректныеКорреспонденцииСчетов.СчетДт, ХозрасчетныйДвиженияССубконто.СчетКт = КорректныеКорреспонденцииСчетов.СчетКт Так ? |
|||
16
ZolotarevAA
13.10.05
✎
14:56
|
(15) Именно. Только я бы другую таблицу взял - обороты по счетам.
|
|||
17
TechKom
13.10.05
✎
14:57
|
Нет имеено эта таблица.
|
|||
18
TechKom
13.10.05
✎
15:01
|
(16) Точно вот:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КорректныеКорреспонденцииСчетов.СчетДт КАК КСчетДт, | КорректныеКорреспонденцииСчетов.СчетКт КАК КСчетКт, | ХозрасчетныйДвиженияССубконто.СчетДт КАК СчетДт, | ХозрасчетныйДвиженияССубконто.СчетКт КАК СчетКт |ИЗ | РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(, , Регистратор = &Ссылка) КАК ХозрасчетныйДвиженияССубконто | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КорректныеКорреспонденцииСчетов КАК КорректныеКорреспонденцииСчетов | ПО ХозрасчетныйДвиженияССубконто.СчетДт = КорректныеКорреспонденцииСчетов.СчетДт | И ХозрасчетныйДвиженияССубконто.СчетКт = КорректныеКорреспонденцииСчетов.СчетКт"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл КонецЦикла; Если он нашел данные проводки то выводит совподение, а если нет пусто, нет данных. Ну как теперь програмно узнать что данных нет? |
|||
19
TechKom
13.10.05
✎
15:01
|
Что резулбтат запроса пустой?
|
|||
20
TechKom
13.10.05
✎
15:03
|
(16) Точно вы правы были на счет таблицы, наоборот надо :)
|
|||
21
ZolotarevAA
13.10.05
✎
15:13
|
(20) С таблицами - все просто: смотришь, какие поля предоставляет и выбираешь наименьшую среди подходящих.
(18) Я бы сделал левое соединение, а вместо КорректныеКорреспонденцииСчетов.СчетДт сделал бы флажок типа ВЫБОР КОГДА КорректныеКорреспонденцииСчетов.СчетДт ЕСТЬ NULL ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА КОНЕЦ КАК ЕстьВСпискеКорректныхПроводок |
|||
22
TechKom
13.10.05
✎
15:33
|
А если воттак:
Если НЕ Результат.Пустой() Тогда Сообщить("Обнаружены некорректные корреспонденции."); ... Так тоже мона :) |
|||
23
ZolotarevAA
13.10.05
✎
15:40
|
(22) Тока в этом случае непонятно, какие проводки и что с этим делать - то ли справочник пополнять, то ли в данных ошибка. Отгадай, кто будет искать некорректные проводки?
|
|||
24
TechKom
13.10.05
✎
15:44
|
Вот так:
Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Если НЕ Результат.Пустой() Тогда Сообщить("Обнаружены некорректные корреспонденции.", СтатусСообщения.Важное); Пока Выборка.Следующий() Цикл Сообщить("Проводка: Дт " + Выборка.СчетДт + " Кр " + Выборка.СчетКт); КонецЦикла; КонецЕсли; |
|||
25
TechKom
13.10.05
✎
15:50
|
Да полонять справочник, это и есть задумка
|
|||
26
ZolotarevAA
13.10.05
✎
16:03
|
(25) Нафига что-то проверять, если при первом же несоответствии вместо ругани проводка попадет в справочник корректных корреспонденций?
|
|||
27
TechKom
13.10.05
✎
16:24
|
Так хочет большой босс :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |