8.х Не сходятся результат запроса и данные типового отчета

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем nickvv, 3 июн 2014.

  1. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    280
    Симпатии:
    0
    Баллы:
    26
    сделано на основе типовой "Групповой обработки справочников и документов"
    объекты отбора: ПоступлениеНаРасчетныйСчет, ПриходныйКассовыйОрдер, СписаниеСРасчетногоСчета
    затем - печать реестра

    Вложения:

  2. nbIpKuH_BaH9I
    Online

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.989
    Симпатии:
    399
    Баллы:
    104
    Теперь по существу. Прикрепите свой отчет. Мы глянем.
  3. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    280
    Симпатии:
    0
    Баллы:
    26
    спасибо.
    раньше как-то нагляднее было
  4. nbIpKuH_BaH9I
    Online

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.989
    Симпатии:
    399
    Баллы:
    104
    Что это? Отчет где?
  5. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    280
    Симпатии:
    0
    Баллы:
    26
    это обработка (название ФинПлан - очень условно)
  6. nbIpKuH_BaH9I
    Online

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.989
    Симпатии:
    399
    Баллы:
    104
    У меня нет такой базы. Ошибка вылезает на моей. Ну да ладно.
    Код:
    ОстатокВалКон = ОстатокВалНач + ИтогоПриходВалПроизв + ИтогоПриходВалАдм - ИтогоРасходВалПроизв - ИтогоРасходВалАдм;
    Вы в этой строке все складываете и отнимаете. Не припомню чтобы ОСВ это делала. Проверьте с помощью отладчика все цифры.
  7. Неназываемый
    Offline

    Неназываемый Опытный в 1С Команда форума

    Регистрация:
    2 фев 2007
    Сообщения:
    507
    Симпатии:
    7
    Баллы:
    29
  8. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    280
    Симпатии:
    0
    Баллы:
    26
    Второй запрос - для получения данных по валютному счету. По нему вопросов нет (может быть, просто потому, что и движений по нему не было).
    А вот по первому запросу - в консоли запросов результат абсолютно правильный (совпадает с Анализом счета), а в таблицу выводит неизвестно откуда берущуюся сумму
  9. Неназываемый
    Offline

    Неназываемый Опытный в 1С Команда форума

    Регистрация:
    2 фев 2007
    Сообщения:
    507
    Симпатии:
    7
    Баллы:
    29
    Странно это всё. У меня сходится.
    [​IMG]

    Покопаю дальше
  10. nbIpKuH_BaH9I
    Online

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.989
    Симпатии:
    399
    Баллы:
    104
    Вы отладчиком проверяли поэтапно?
  11. Неназываемый
    Offline

    Неназываемый Опытный в 1С Команда форума

    Регистрация:
    2 фев 2007
    Сообщения:
    507
    Симпатии:
    7
    Баллы:
    29
    На вашем скриншоте ОСВ по организации. Нажмите в поле Shift+F4 и сформируйте без организации.
    Нужно узнать будет ли разница по остаткам на 51 счете.
    nickvv нравится это.
  12. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    280
    Симпатии:
    0
    Баллы:
    26
    вопрос по получению начального остатка (или наоборот - конечного). когда в запросе менял НачДата на КонДата, все равно в отчет шла неверная цифра по конечному остатку
  13. Неназываемый
    Offline

    Неназываемый Опытный в 1С Команда форума

    Регистрация:
    2 фев 2007
    Сообщения:
    507
    Симпатии:
    7
    Баллы:
    29
    Вся проблема в условиях, как пить дать.
    В осв стоят условия по организации, подразделению ,валюте.
    nickvv нравится это.
  14. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    280
    Симпатии:
    0
    Баллы:
    26
    разницы нет. оно и понятно - организация в базе только одна
  15. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    1-е. нужно реструктурировать заполнение параметров, часть из них явно можно вынести из циклов.
    Смотрите в "синтаксис помощнике" - "ЗаполнитьЗначенияСвойств"
    У "Область.Параметры" (по тексту модуля обработки) есть метод "Заполнить(<Источник>)"
    2. Вы в цикле получаете объект, при этом нигде его не модифицируете, зачем ?
    3. Области макета нужно получить до заполнения их в цикле. Вы же области не меняете.
    4. Не используйте имена переменных которые могут (в том числе и потенциально, интуитивно) пересекаться с системными. Например "Объект", "Область". Не поленитесь назавите по оригенальнее и ближе к сути решаемой задачи
    nickvv нравится это.
  16. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    280
    Симпатии:
    0
    Баллы:
    26
    выбрана организация или нет - никакого влияния на результат. подразделение тоже не выбрано в настройках: ни в группировках, ни в отборах.
    а валюта - какое же условие на валюту может быть на счете 51? рубль конечно.
  17. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    И по коду в модуле, есть условия которые повторяются, при этом в коде вы суммируете
    --- Объединение сообщений, 4 июн 2014 ---
    Код:
    ИначеЕсли Лев(Ссылка, 4) = "Пост" Тогда
        Если Лев(ДДС, 3) = "АР." Тогда
    
    Точно можно переделать в
    Код:
    ВидДенежногоДокумента = Лев(СокрЛП(Ссылка), 4);
    ВидСтатьиДДС = Лев(СокрЛП(ДДС), 3);
    // Блок сравнений
    Если ВидДенежногоДокумента  = "Пост" И ВидСтатьиДДС = "АР." Тогда
    ....
    
    При этом, системе не придется в сравнениях каждый раз вычислять аргументы
    Последнее редактирование: 4 июн 2014
    nickvv нравится это.
  18. TopicStarter Overlay
    nickvv
    Offline

    nickvv Опытный в 1С

    Регистрация:
    10 май 2011
    Сообщения:
    280
    Симпатии:
    0
    Баллы:
    26
    С замечаниями согласен, однако та часть модуля, которая выдает ошибочные данные, попадала только под п.4.
    исправил. получилось:
    Код:
        Обл = Макет.ПолучитьОбласть("ОстаткиОбороты");
       
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ
                       | Остатки.СуммаОстаток
                       |ИЗ
                       | РегистрБухгалтерии.Хозрасчетный.Остатки(&НачДата, Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетныеСчета)), , ) КАК Остатки";
    
        //Запрос.УстановитьПараметр("НачДата", НачДатаПериода);
        Запрос.УстановитьПараметр("НачДата", Новый Граница(НачДатаПериода, ВидГраницы.Включая));
       
        Остатки = Запрос.Выполнить().Выбрать();
        Остатки.Следующий();
        ОстатокРубНач = Остатки.СуммаОстаток;                  
                      
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ
                       |    ХозрасчетныйОстатки.ВалютнаяСуммаОстаток
                       |ИЗ
                       |    РегистрБухгалтерии.Хозрасчетный.Остатки(&НачДата, Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ВалютныеСчета))) КАК ХозрасчетныйОстатки";
                      
    
        Запрос.УстановитьПараметр("НачДата", НачДатаПериода);
                      
        Выборка = Запрос.Выполнить().Выбрать();
       
        Если Выборка.Количество() = 0 Тогда
            ОстатокВалНач = 0;
        Иначе
            Выборка.Следующий();
            ОстатокВалНач = Выборка.ВалютнаяСуммаОстаток;
        КонецЕсли;
    
            УстановитьПараметрЕслиЕсть(Обл, "ОстатокРубНач", ОстатокРубНач);
            УстановитьПараметрЕслиЕсть(Обл, "ОстатокВалНач", ОстатокВалНач);
            ОстатокРубКон = ОстатокРубНач + ИтогоПриходРубПроизв + ИтогоПриходРубАдм - ИтогоРасходРубПроизв - ИтогоРасходРубАдм;
            УстановитьПараметрЕслиЕсть(Обл, "ОстатокРубКон", ОстатокРубКон);
            ОстатокВалКон = ОстатокВалНач + ИтогоПриходВалПроизв + ИтогоПриходВалАдм - ИтогоРасходВалПроизв - ИтогоРасходВалАдм;
            УстановитьПараметрЕслиЕсть(Обл, "ОстатокВалКон", ОстатокВалКон);
            УстановитьПараметрЕслиЕсть(Обл, "ИтогоПриходРуб", ИтогоПриходРубПроизв + ИтогоПриходРубАдм);
            УстановитьПараметрЕслиЕсть(Обл, "ИтогоПриходВал", ИтогоПриходВалПроизв + ИтогоПриходВалАдм);
            УстановитьПараметрЕслиЕсть(Обл, "ИтогоРасходРуб", ИтогоРасходРубПроизв + ИтогоРасходРубАдм);
            УстановитьПараметрЕслиЕсть(Обл, "ИтогоРасходВал", ИтогоРасходВалПроизв + ИтогоРасходВалАдм);
        ТабличныйДокумент.Вывести(Обл);
    
    и никаких изменений.
    может быть, откуда-то подтягиваются какие-то временные данные? только не пойму откуда они могут взяться
    --- Объединение сообщений, 4 июн 2014 ---
    Согласен, код далек от оптимального, но это все относится к первой таблице, в которую всё выводится правильно.
    Ведь во всех этих циклах и условиях нигде нет обращения к остаткам по счету, только документы перебираются по несколько раз.
    А в нижнюю таблицу начальные остатки тянутся по отдельным запросам, никак не связанным с формированием верхней таблицы.
    Вот что у меня в голове никак не укладывается. К тому же - сам запрос правильные данные выводит в консоли :(
  19. Неназываемый
    Offline

    Неназываемый Опытный в 1С Команда форума

    Регистрация:
    2 фев 2007
    Сообщения:
    507
    Симпатии:
    7
    Баллы:
    29
    Если в вашей базе, результат запроса один а в ОСВ другой, то разница:
    - в условиях запроса по ОСВ и консоли;
    - в выводе результата;

    А т.к. я не имею в наличии вашей базы, то и проверить не могу. У меня результаты идентичны.
  20. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    где на форме вы задаете параметр "НачДатаПериода" ?
    --- Объединение сообщений, 4 июн 2014 ---
    на картинку не смотрите, это по другой теме :)
    --- Объединение сообщений, 4 июн 2014 ---
    возвращаемся к сообщению №8 в этой теме,
    используя "ОстаткиИОбороты" вам не нужно будет вычислять конечный остаток в при заполнении параметров,
    нужно будет взять из запроса начальный и ( просто :) ) конечный остаток, и заполнить ими соотв. параметры области
    --- Объединение сообщений, 4 июн 2014 ---
    в режиме отладки, что у вас получается в строках 391,393 ?

    Вложения:

    Последнее редактирование: 4 июн 2014
    nickvv нравится это.

Поделиться этой страницей