Имя: Пароль:
1C
1С v8
Помогите разобраться с результатами запроса....
,
0 Darhon
 
25.10.11
08:50
Доброе время суток. Помогите в такой ситуации: В документе заказа покупателю есть кусок кода отвечающий за превышение кредита:

Если  ЗапретитьПревышениеКредитаПриОперативномПроведении  Тогда
                   Запрос = Новый Запрос;
                   Запрос.УстановитьПараметр("ДоговорКонтрагента", ДоговорКонтрагента);
                   
                   Запрос.Текст = "ВЫБРАТЬ
                                  |    РасчетыПоДоговору.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетовОстаток,
                                  |ИЗ
                                  |    РегистрНакопления.РасчетыСКонтрагентами.Остатки(, ДоговорКонтрагента = &ДоговорКонтрагента) КАК РасчетыПоДоговору
                                  |ИТОГИ ПО
                                  |    СуммаВзаиморасчетовОстаток";
                   
                   Выборка = Запрос.Выполнить().Выбрать();
                   Если Выборка.Следующий() Тогда
                       СуммаВзаиморасчетовОстаток = ?(Выборка.СуммаВзаиморасчетовОстаток= NULL, 0, Выборка.СуммаВзаиморасчетовОстаток);
                       РасчетыПоДоговору.СуммаУпрОстаток =  ?(Выборка.СуммаВзаиморасчетовОстаток= NULL, 0, Выборка.СуммаВзаиморасчетовОстаток);

                       СуммаВзаиморасчетовПоДокументу = ОбщегоНазначения.ПересчитатьИзВалютыВВалюту(СуммаДокумента, ВалютаДокумента,
                       ДоговорКонтрагента.ВалютаВзаиморасчетов, УправлениеВзаиморасчетами.КурсДокумента(Ссылка,мВалютаРегламентированногоУчета),
                       КурсВзаиморасчетов, УправлениеВзаиморасчетами.КратностьДокумента(Ссылка, мВалютаРегламентированногоУчета),
                       КратностьВзаиморасчетов);
                       
                       Валюта = ДоговорКонтрагента.ВалютаВзаиморасчетов;
                       Если (СуммаВзаиморасчетовОстаток + СуммаВзаиморасчетовПоДокументу) < ДоговорКонтрагента.ДопустимаяСуммаЗадолженности Тогда


Проблема в том, что он иногда возвращает то положительные, то отрицательные значения. Хотя эти контрагенты должны. Думаю дело в том, что он еще и смотрит открытые заказы на этот договор. Вопрос как переписать код или запрос, чтобы весь долг шел с минусом, ну ли просто не возникало пересечения тех клиентов которые нам должны и которым мы должны :) Заранее спасибо :)
1 Maxus43
 
25.10.11
08:53
не смотрит никакие заказы, видно же...
смотрит долг по Договору, а не по контрагенту. А по договору и ты должен может быть
2 Maxus43
 
25.10.11
08:55
и вобще код кривой... ша за

СуммаВзаиморасчетовОстаток = ?(Выборка.СуммаВзаиморасчетовОстаток= NULL, 0, Выборка.СуммаВзаиморасчетовОстаток);


и нафиг Итоги в запросе... нафиг такие темы с утра поднимать
3 Darhon
 
25.10.11
08:57
(1)(2) Программист написавшие код сей уехал и где он уже никто не знает. А с утра такие темы, потому что и меня озадачили... То проводит заказ должника, то нет...надо чтоб совсем всегда нет :)
4 Darhon
 
25.10.11
08:58
(1) Заказы учитывает проверял....вот только с результатлом траблы :)
5 Maxus43
 
25.10.11
09:01
(4) данный запрос возвращает остаток конкретно по договору... больше ничего. Остаток по договору тоже содержит в себе манипуляции с заказами, но не по конкретным а по всем у данного договора. Из типовых лучше скомуниздить контроль задолженности

+ Итоги из запроса убрать нафиг
6 Darhon
 
25.10.11
09:06
(5) Итоги убрал. Скомуниздить возможности нету. Нету типовой. Результат по модулю верный. Мне не ясно по какому принципу он в одном контрагенте пишет -100 000, а в другом + 50 000, хотя оба должны денег.
7 Darhon
 
25.10.11
09:08
(5) То есть не ясно < или > ставить в проверке условия...
8 Maxus43
 
25.10.11
09:08
(6) долг по договору возвращает, а не по контрагенту. Погляди в регистр расчеты с контрагентами, поставь там отбор по конкретному договору - увидиш все движения по нему и почему должны именно вы
9 Maxus43
 
25.10.11
09:09
имеется ввиду что СуммаВзаиморасчетовОстаток возвращает типа неправильно? тогда (8)
10 Darhon
 
25.10.11
09:20
(9) Я наверное криво объясняю. Сами цифры-то верные, вот только мне не уловить, почему один долг идет со знаком минус, а другой вдруг со знаком плюс...из-за это заказы все же проводятся некоторые. даже с долгом контрагента. А вот как сделать чтобы программа понимала что это долг все равно...не знаю (
11 Darhon
 
25.10.11
09:21
(9) ну и да. я погимаю, что по договру, но у контрагента в основном один договор :)
12 Maxus43
 
25.10.11
09:27
погляди в регистр Расчеты с контрагентами с отбором по договору, видно будет почему у одного так, у другого по другому... я ж не вижу что там в регистре
13 PVV65
 
25.10.11
09:29
(0) Вместо регистра "РасчетыСКонтрагентами" возьми регистр "ВзаиморасчетыСКонтрагентами".
14 Darhon
 
25.10.11
09:33
(13) Что это может дать??
15 Maxus43
 
25.10.11
09:39
координально не измениться, они почти дублирующие... я бы заново переписал как надо
16 PVV65
 
25.10.11
09:42
(14) РН "РасчетыСКонтрагентами" - план (с учетом заказов), РН "ВзаиморасчетыСКонтрагентами" - факт (реальные долги).
17 Maxus43
 
25.10.11
09:42
но вобще да, для задач контроля остатков используется Взаиморасчеты именно
18 Darhon
 
25.10.11
09:54
(16)(17) нужно именно с учетом активных заказов. Поэтому не подойдет :((
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший