Имя: Пароль:
1C
 
Сравнение 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
Так хочет большой босс :)
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан