Имя: Пароль:
1C
1С v8
Как отладить запрос по кому?
0 Галахад
 
гуру
22.11.13
08:20
Вроде простой код, а возвращает Null.
Когда проверяю в консоли, в другой базе возвращает число.

    СотрудникВДругойБазе = База.Справочники.ФизическиеЛица.НайтиПоНаименованию(Сотрудник.Наименование);
    
    Если СотрудникВДругойБазе = База.Справочники.ФизическиеЛица.ПустаяСсылка() Тогда
        Возврат 0;
    КонецЕсли;
    
    Запрос = База.NewObject("Запрос");
    Запрос.Текст = "ВЫБРАТЬ
    |    ХозрасчетныйОборотыДтКт.СуммаОборот
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&Дата1, &Дата2, , СчетДт = &Счет_70, , СчетКт = &Счет_68_1, , СубконтоДт1 = &СубконтоДт) КАК ХозрасчетныйОборотыДтКт";
    Запрос.УстановитьПараметр("Дата1", Дата1);    
    Запрос.УстановитьПараметр("Дата2", Дата2);    
    Запрос.УстановитьПараметр("Счет_70", База.ПланыСчетов.Хозрасчетный.НайтиПоКоду("70"));    
    Запрос.УстановитьПараметр("Счет_68_1", База.ПланыСчетов.Хозрасчетный.НайтиПоКоду("68.01"));    
    Запрос.УстановитьПараметр("СубконтоДт", СотрудникВДругойБазе);    
    
    Сумма = 0;
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
        Сумма = Выборка.СуммаОборот;
    КонецЦикла;
    
    Возврат Сумма;
1 Wobland
 
22.11.13
08:25
ну а отладчик же работает. посмотри в ТЗ из запроса
2 Галахад
 
гуру
22.11.13
08:26
(1) Да смотрел. Там одна строка и в ней Null.
3 Wobland
 
22.11.13
08:28
откуда? бредятина какая..
4 Rovan
 
гуру
22.11.13
08:29
Попробуй так
|    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&Дата1, &Дата2, , СчетДт.КОД = ""70"", , СчетКт.Код = ""68.1"", , СубконтоДт1.Наименование = "" + Сотрудник.Наименование + ""
) КАК ХозрасчетныйОборотыДтКт";
5 George Wheels
 
22.11.13
08:31
(2) Добавь в выборку какие-нибудь субконто Дт Кт, чтобы определиться, откуда это.
6 Rie
 
22.11.13
08:35
Если счета предопределённые - можно через ЗНАЧЕНИЕ.
7 Галахад
 
гуру
22.11.13
08:37
(3) Ну, написал. Чо.

(4) Идея.

(5) Попробовал так:

    Запрос.Текст = "ВЫБРАТЬ
                   |    ХозрасчетныйОборотыДтКт.СуммаОборот,
                   |    ХозрасчетныйОборотыДтКт.СчетДт,
                   |    ХозрасчетныйОборотыДтКт.СчетКт,
                   |    ХозрасчетныйОборотыДтКт.СубконтоДт1
                   |ИЗ
                   |    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&Дата1, &Дата2, , СчетДт = &Счет_70, , СчетКт = &Счет_68_1, , СубконтоДт1 = &СубконтоДт) КАК ХозрасчетныйОборотыДтКт";

Стало еще интереснее. Результат запроса пустой...
8 shuhard
 
22.11.13
08:41
(7) будь мужиком
убери отборы, начиная с даты
9 Wobland
 
22.11.13
08:43
а типа пустой результат запроса "из там" есть нулл?
10 anaed
 
22.11.13
08:45
СотрудникВДругойБазе = База.Справочники.ФизическиеЛица.НайтиПоНаименованию(Сотрудник.Наименование);

может дело в этом? что отладчик говорит про СотрудникВДругойБазе во время выполнения запроса?
11 Галахад
 
гуру
22.11.13
08:47
(7)+ Соврал оказывается. В этом варианте все работает.
(я там даты не те поставил).

Но непонятно, почему первый вариант возвращает фигню.
12 Галахад
 
гуру
22.11.13
08:49
(8) Да, идея. Хотя я их все в отладчике проверил.

(9) Нет. Это СуммаОборот = Null.

(10) Говорит, что комобъект.
13 anaed
 
22.11.13
08:51
(12) А если СотрудникВДругойБазе.наименование
14 Галахад
 
гуру
22.11.13
08:53
(13) СотрудникВДругойБазе.Наименование = Сотрудник.Наименование Истина

Поставил два запроса один за другим. Из (0) и (7).
В одном выборка пустая, в другом выборка есть, но СуммаОборот = Null.
Крыша едет не спеша.
15 anaed
 
22.11.13
09:04
(14) может во второй базе физ лица задвоены?
16 Галахад
 
гуру
22.11.13
09:10
(15) Гм. А какая разница? Запросы-то, по-идее один и тот же результат должны выдавать.
17 Wobland
 
22.11.13
09:10
или наименование немного похожи
https://www.dropbox.com/s/67dj21d48ecablf/20130912_153153.jpg
18 Wobland
 
22.11.13
09:11
(16) найти находит любого подходящего
19 anaed
 
22.11.13
09:14
(16) а запрос ищет по ссылке и получается что по ссылке дубля нету никаких данных в хозрасчетном.
20 Галахад
 
гуру
22.11.13
09:17
Код привожу. Сотрудник один и тот же, запрос практически то же. А в результате разница.

    СотрудникВДругойБазе = База.Справочники.ФизическиеЛица.НайтиПоНаименованию(Сотрудник.Наименование);
    
    Если СотрудникВДругойБазе = База.Справочники.ФизическиеЛица.ПустаяСсылка() Тогда
        Возврат 0;
    КонецЕсли;
    
    Запрос = База.NewObject("Запрос");
    Запрос.Текст = "ВЫБРАТЬ
                   |    ХозрасчетныйОборотыДтКт.СуммаОборот,
                   |    ХозрасчетныйОборотыДтКт.СчетДт,
                   |    ХозрасчетныйОборотыДтКт.СчетКт,
                   |    ХозрасчетныйОборотыДтКт.СубконтоДт1
                   |ИЗ
                   |    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&Дата1, &Дата2, , СчетДт = &Счет_70, , СчетКт = &Счет_68_1, , СубконтоДт1 = &СубконтоДт) КАК ХозрасчетныйОборотыДтКт";
                  
                  
    Запрос.УстановитьПараметр("Дата1", Дата1);    
    Запрос.УстановитьПараметр("Дата2", Дата2);    
    Запрос.УстановитьПараметр("Счет_70", База.ПланыСчетов.Хозрасчетный.НайтиПоКоду("70"));    
    Запрос.УстановитьПараметр("Счет_68_1", База.ПланыСчетов.Хозрасчетный.НайтиПоКоду("68.01"));    
    Запрос.УстановитьПараметр("СубконтоДт", СотрудникВДругойБазе);    
    
    Сумма = 0;
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
        Сумма = Выборка.СуммаОборот;
    КонецЦикла;
    
    Запрос = База.NewObject("Запрос");
    Запрос.Текст = "ВЫБРАТЬ
                   |    ХозрасчетныйОборотыДтКт.СуммаОборот
                   |ИЗ
                   |    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&Дата1, &Дата2, , СчетДт = &Счет_70, , СчетКт = &Счет_68_1, , СубконтоДт1 = &СубконтоДт) КАК ХозрасчетныйОборотыДтКт";
                  
                  
    Запрос.УстановитьПараметр("Дата1", Дата1);    
    Запрос.УстановитьПараметр("Дата2", Дата2);    
    Запрос.УстановитьПараметр("Счет_70", База.ПланыСчетов.Хозрасчетный.НайтиПоКоду("70"));    
    Запрос.УстановитьПараметр("Счет_68_1", База.ПланыСчетов.Хозрасчетный.НайтиПоКоду("68.01"));    
    Запрос.УстановитьПараметр("СубконтоДт", СотрудникВДругойБазе);    
    
    Сумма2 = 0;
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
        Сумма2 = Выборка.СуммаОборот;
    КонецЦикла;
    
    Если Сумма <> Сумма2 Тогда
        Сообщить("ля-ля");
    КонецЕсли;
21 Галахад
 
гуру
22.11.13
09:18
Всегда "ля-ля".
22 anaed
 
22.11.13
09:31
(21) потому что в первом вернул null а во втором пустой результат запроса и сумма2 осталось 0.
23 Галахад
 
гуру
22.11.13
09:37
(22) А почему? Запросы же одинаковы.

З.Ы. Наоборот в первом пустой, а втором Null.
24 anaed
 
22.11.13
09:42
Не одинаковы. Но оба говорят что нету данных в хозрасчетном по этой ссылке на ФизЛицо