8.х Пустой результат запроса

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем НиколайН, 2 фев 2016.

  1. TopicStarter Overlay
    НиколайН
    Offline

    НиколайН Опытный в 1С

    Регистрация:
    14 фев 2014
    Сообщения:
    246
    Симпатии:
    0
    Баллы:
    26
    Всем добрый День!
    Подскажите пожалуйста в чем может быть причина следующей ситуации.

    Конфигурация: БП 2.0.

    Создаю внешнюю обработку, которая на основе Excel-файла должна создать документ "Корректировка долга" с видом операции "Списание задолженности" и заполнить табличную часть. В Excel-файле содержится только наименование контрагентов. Не получается следующее: документ новый создаётся, контрагент добавляется, а заполнение табличной части не происходит. Процедура скопирована с модуля объекта в документе. Там она работает, а во внешней обработке нет. Проверил отладчиком, результат запроса пустой (ТекущийРезультат = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.Прямой);) Ошибок при выполнении обработки, ни каких не выдаёт, в модуле объекта документа, результат запроса НЕ ПУСТОЙ, а модуле обработки ПУСТОЙ. Подскажите пожалуйста, в чем может быть проблема???
    Код:
    Процедура ЗаполнитьОстаткамиВзаиморасчетов1(ПоКонтрагенту, ВидЗадолженности, Ссылка, СуммыДолга, ВалютаДокумента, Дата, Организация) Экспорт
       
        СчетаРасчетов = Новый Массив();
        СчетаРасчетов.Добавить(ПланыСчетов.Хозрасчетный.РасчетыСПоставщикамиИПодрядчиками);
        СчетаРасчетов.Добавить(ПланыСчетов.Хозрасчетный.РасчетыСПокупателямиИЗаказчиками);
        СчетаРасчетов.Добавить(ПланыСчетов.Хозрасчетный.РасчетыПоКраткосрочнымКредитамИЗаймам);
        СчетаРасчетов.Добавить(ПланыСчетов.Хозрасчетный.РасчетыПоДолгосрочнымКредитамИЗаймам);
        СчетаРасчетов.Добавить(ПланыСчетов.Хозрасчетный.РасчетыСРазнымиДебиторамиИКредиторами);
       
        СчетаИсключаемые = Новый Массив();
        СчетаИсключаемые.Добавить(ПланыСчетов.Хозрасчетный.ВекселяВыданные);
        СчетаИсключаемые.Добавить(ПланыСчетов.Хозрасчетный.ВекселяПолученные);
        СчетаИсключаемые.Добавить(ПланыСчетов.Хозрасчетный.РасчетыПоИмущественномуЛичномуИДобровольномуСтрахованию);
        СчетаИсключаемые.Добавить(ПланыСчетов.Хозрасчетный.НДСпоАвансамИПредоплатам);
        СчетаИсключаемые.Добавить(ПланыСчетов.Хозрасчетный.РасчетыПоНДСотложенномуДляУплатыВБюджет);
        Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ
            |    ВЫБОР
            |        КОГДА НаличиеНужныхСубконто.ЕстьДокументыРасчетов = 1
            |            ТОГДА Хозрасчетный.Ссылка
            |        ИНАЧЕ НЕОПРЕДЕЛЕНО
            |    КОНЕЦ КАК СчетаПоДокументам,
            |    ВЫБОР
            |        КОГДА НаличиеНужныхСубконто.ЕстьДокументыРасчетов = 0
            |            ТОГДА Хозрасчетный.Ссылка
            |        ИНАЧЕ НЕОПРЕДЕЛЕНО
            |    КОНЕЦ КАК СчетаБезДокументов,
            |    НаличиеНужныхСубконто.ЕстьДокументыРасчетов
            |ИЗ
            |    ПланСчетов.Хозрасчетный КАК Хозрасчетный
            |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            |            ХозрасчетныйВидыСубконто.Ссылка КАК Ссылка,
            |            МАКСИМУМ(ВЫБОР
            |                    КОГДА ХозрасчетныйВидыСубконто.ВидСубконто = &ВидСубконтоКонтрагенты
            |                        ТОГДА 1
            |                    ИНАЧЕ 0
            |                КОНЕЦ) КАК ЕстьКонтрагенты,
            |            МАКСИМУМ(ВЫБОР
            |                    КОГДА ХозрасчетныйВидыСубконто.ВидСубконто = &ВидСубконтоДоговоры
            |                        ТОГДА 1
            |                    ИНАЧЕ 0
            |                КОНЕЦ) КАК ЕстьДоговоры,
            |            МАКСИМУМ(ВЫБОР
            |                    КОГДА ХозрасчетныйВидыСубконто.ВидСубконто = &ВидСубконтоДокументыРасчетов
            |                        ТОГДА 1
            |                    ИНАЧЕ 0
            |                КОНЕЦ) КАК ЕстьДокументыРасчетов
            |        ИЗ
            |            ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто
            |       
            |        СГРУППИРОВАТЬ ПО
            |            ХозрасчетныйВидыСубконто.Ссылка) КАК НаличиеНужныхСубконто
            |        ПО Хозрасчетный.Ссылка = НаличиеНужныхСубконто.Ссылка
            |ГДЕ
            |    НаличиеНужныхСубконто.ЕстьКонтрагенты = 1
            |    И НаличиеНужныхСубконто.ЕстьДоговоры = 1
            |    И Хозрасчетный.ЗапретитьИспользоватьВПроводках = ЛОЖЬ
            |    И Хозрасчетный.Ссылка В ИЕРАРХИИ(&СчетаРасчетов)
            |    И (НЕ Хозрасчетный.Ссылка В ИЕРАРХИИ (&СчетаИсключаемые))";
       
        Запрос.УстановитьПараметр("СчетаРасчетов", СчетаРасчетов);
        Запрос.УстановитьПараметр("СчетаИсключаемые", СчетаИсключаемые);
        Запрос.УстановитьПараметр("ВидСубконтоКонтрагенты", ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты);
        Запрос.УстановитьПараметр("ВидСубконтоДоговоры", ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры);
        Запрос.УстановитьПараметр("ВидСубконтоДокументыРасчетов", ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ДокументыРасчетовСКонтрагентами);
       
        СчетаУчетаРасчетов = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.Прямой);
       
        СчетаРасчетовБезАналитикиПоДокументам = ОбщегоНазначения.УдалитьПовторяющиесяЭлементыМассива(СчетаУчетаРасчетов.ВыгрузитьКолонку("СчетаБезДокументов"),Истина);
        СчетаРасчетовСАналитикойПоДокументам = ОбщегоНазначения.УдалитьПовторяющиесяЭлементыМассива(СчетаУчетаРасчетов.ВыгрузитьКолонку("СчетаПоДокументам"),Истина);
    
        Запрос = Новый Запрос;
       
        Запрос.Текст = "";
       
        Если не СчетаРасчетовБезАналитикиПоДокументам.Количество() = 0 Тогда
            Запрос.Текст =
            "ВЫБРАТЬ
            |    ХозрасчетныйОстатки.Счет,
            |    ХозрасчетныйОстатки.Субконто1 КАК Контрагент,
            |    ХозрасчетныйОстатки.Субконто2 КАК Договор,
            |    НЕОПРЕДЕЛЕНО КАК ДокументРасчетов,
            |    ХозрасчетныйОстатки.СуммаОстаток,
            |    ХозрасчетныйОстатки.ВалютнаяСуммаОстаток,
            |    ХозрасчетныйОстатки.Субконто2.ВидДоговора КАК ВидДоговора,
            |    ХозрасчетныйОстатки.Субконто2.ВалютаВзаиморасчетов КАК ВалютаВзаиморасчетов,
            |    ХозрасчетныйОстатки.Субконто2.РасчетыВУсловныхЕдиницах КАК РасчетыВУсловныхЕдиницах
            |ИЗ
            |    РегистрБухгалтерии.Хозрасчетный.Остатки(
            |        &Период,
            |        Счет В (&СчетаРасчетовБезАналитикиПоДокументам),
            |        &ВидыСубконтоБезДокументов,
            |        Организация = &Организация
            |            И Субконто1 = &Контрагент) КАК ХозрасчетныйОстатки
            |ГДЕ
            |    ВЫБОР
            |            КОГДА &ВалютаДокумента В (&ВалютаРегУчета)
            |                ТОГДА ХозрасчетныйОстатки.Субконто2.РасчетыВУсловныхЕдиницах = ИСТИНА
            |                        ИЛИ ХозрасчетныйОстатки.Субконто2.ВалютаВзаиморасчетов В (&ВалютаРегУчета)
            |            ИНАЧЕ (НЕ ХозрасчетныйОстатки.Субконто2.ВалютаВзаиморасчетов В (&ВалютаРегУчета))
            |        КОНЕЦ
            |    И ВЫБОР
            |            КОГДА ХозрасчетныйОстатки.Субконто2.РасчетыВУсловныхЕдиницах = ИСТИНА
            |                    ИЛИ ХозрасчетныйОстатки.Субконто2.ВалютаВзаиморасчетов В (&ВалютаРегУчета)
            |                ТОГДА ВЫБОР
            |                        КОГДА &ВидЗадолженности = &ВидЗадолженностиДебиторская
            |                            ТОГДА ХозрасчетныйОстатки.СуммаОстаток > 0
            |                        ИНАЧЕ ХозрасчетныйОстатки.СуммаОстаток < 0
            |                    КОНЕЦ
            |            ИНАЧЕ ВЫБОР
            |                    КОГДА &ВидЗадолженности = &ВидЗадолженностиДебиторская
            |                        ТОГДА ХозрасчетныйОстатки.ВалютнаяСуммаОстаток > 0
            |                    ИНАЧЕ ХозрасчетныйОстатки.ВалютнаяСуммаОстаток < 0
            |                КОНЕЦ
            |        КОНЕЦ"
        КонецЕсли;
       
        Если не СчетаРасчетовСАналитикойПоДокументам.Количество() = 0 Тогда
       
            Запрос.Текст = ?(ПустаяСтрока(Запрос.Текст),"",Запрос.Текст + Символы.ПС + "Объединить Все" +Символы.ПС)+
            "ВЫБРАТЬ
            |    ХозрасчетныйОстатки.Счет,
            |    ХозрасчетныйОстатки.Субконто1 КАК Контрагент,
            |    ХозрасчетныйОстатки.Субконто2 КАК Договор,
            |    ХозрасчетныйОстатки.Субконто3 КАК ДокументРасчетов,
            |    ХозрасчетныйОстатки.СуммаОстаток,
            |    ХозрасчетныйОстатки.ВалютнаяСуммаОстаток,
            |    ХозрасчетныйОстатки.Субконто2.ВидДоговора КАК ВидДоговора,
            |    ХозрасчетныйОстатки.Субконто2.ВалютаВзаиморасчетов КАК ВалютаВзаиморасчетов,
            |    ХозрасчетныйОстатки.Субконто2.РасчетыВУсловныхЕдиницах КАК РасчетыВУсловныхЕдиницах
            |ИЗ
            |    РегистрБухгалтерии.Хозрасчетный.Остатки(
            |        &Период,
            |        Счет В (&СчетаРасчетовСАналитикойПоДокументам),
            |        &ВидыСубконтоСДокументами,
            |        Организация = &Организация
            |            И Субконто1 = &Контрагент) КАК ХозрасчетныйОстатки
            |ГДЕ
            |    ВЫБОР
            |            КОГДА &ВалютаДокумента В (&ВалютаРегУчета)
            |                ТОГДА ХозрасчетныйОстатки.Субконто2.РасчетыВУсловныхЕдиницах = ИСТИНА
            |                        ИЛИ ХозрасчетныйОстатки.Субконто2.ВалютаВзаиморасчетов В (&ВалютаРегУчета)
            |            ИНАЧЕ (НЕ ХозрасчетныйОстатки.Субконто2.ВалютаВзаиморасчетов В (&ВалютаРегУчета))
            |        КОНЕЦ
            |    И ВЫБОР
            |            КОГДА ХозрасчетныйОстатки.Субконто2.РасчетыВУсловныхЕдиницах = ИСТИНА
            |                    ИЛИ ХозрасчетныйОстатки.Субконто2.ВалютаВзаиморасчетов В (&ВалютаРегУчета)
            |                ТОГДА ВЫБОР
            |                        КОГДА &ВидЗадолженности = &ВидЗадолженностиДебиторская
            |                            ТОГДА ХозрасчетныйОстатки.СуммаОстаток > 0
            |                        ИНАЧЕ ХозрасчетныйОстатки.СуммаОстаток < 0
            |                    КОНЕЦ
            |            ИНАЧЕ ВЫБОР
            |                    КОГДА &ВидЗадолженности = &ВидЗадолженностиДебиторская
            |                        ТОГДА ХозрасчетныйОстатки.ВалютнаяСуммаОстаток > 0
            |                    ИНАЧЕ ХозрасчетныйОстатки.ВалютнаяСуммаОстаток < 0
            |                КОНЕЦ
            |        КОНЕЦ";
       
        КонецЕсли;
       
        Запрос.УстановитьПараметр("Период",Новый МоментВремени(КонецДня(Дата), Ссылка));
        Запрос.УстановитьПараметр("Организация",Организация);
        Запрос.УстановитьПараметр("Контрагент", ПоКонтрагенту);
        Запрос.УстановитьПараметр("ВидЗадолженности",ВидЗадолженности);
        Запрос.УстановитьПараметр("ВидЗадолженностиДебиторская",Перечисления.ВидыЗадолженности.Дебиторская);
        Запрос.УстановитьПараметр("ВидЗадолженностиКредиторская",Перечисления.ВидыЗадолженности.Кредиторская);
       
        ВалютыРеглУчета = Новый СписокЗначений;
        ВалютыРеглУчета.Добавить(Константы.ВалютаРегламентированногоУчета.Получить());
        ВалютыРеглУчета.Добавить(Справочники.Валюты.ПустаяСсылка());
        Запрос.УстановитьПараметр("ВалютаРегУчета",ВалютыРеглУчета);
        Запрос.УстановитьПараметр("ВалютаДокумента",ВалютаДокумента);
       
        Если ВалютыРеглУчета.НайтиПоЗначению(ВалютаДокумента) = неопределено Тогда
            //Документ в иностранной валюте. Установим отбор только по договорам в нужной валюте
            Запрос.Текст = СтрЗаменить(Запрос.Текст,"Организация = &Организация","Организация = &Организация и Валюта = &ВалютаДокумента");
        КонецЕсли;
       
        Запрос.УстановитьПараметр("СчетаРасчетовБезАналитикиПоДокументам",СчетаРасчетовБезАналитикиПоДокументам);
        Запрос.УстановитьПараметр("СчетаРасчетовСАналитикойПоДокументам", СчетаРасчетовСАналитикойПоДокументам);
       
        ВидыСубконтоБезДокументов = Новый Массив();
        ВидыСубконтоБезДокументов.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты);
        ВидыСубконтоБезДокументов.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры);
       
        Запрос.УстановитьПараметр("ВидыСубконтоБезДокументов",ВидыСубконтоБезДокументов);
       
        ВидыСубконтоСДокументами = Новый Массив();
        ВидыСубконтоСДокументами.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты);
        ВидыСубконтоСДокументами.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры);
        ВидыСубконтоСДокументами.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ДокументыРасчетовСКонтрагентами);
       
        Запрос.УстановитьПараметр("ВидыСубконтоСДокументами", ВидыСубконтоСДокументами);
       
        ТекущийРезультат = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.Прямой);
        Множитель = ?(ВидЗадолженности = Перечисления.ВидыЗадолженности.Дебиторская,1,-1);
        Для каждого СтрокаОстатков Из ТекущийРезультат Цикл
            НоваяСтрока = СуммыДолга.Добавить();
            НоваяСтрока.ВидЗадолженности = ВидЗадолженности;
            НоваяСтрока.ДоговорКонтрагента = СтрокаОстатков.Договор;
            НоваяСтрока.Сделка = СтрокаОстатков.ДокументРасчетов;
            НоваяСтрока.СчетУчетаРасчетов = СтрокаОстатков.Счет;
            Если ВалютыРеглУчета.НайтиПоЗначению(ВалютаДокумента) = неопределено Тогда
                НоваяСтрока.СуммаВзаиморасчетов = Множитель*СтрокаОстатков.ВалютнаяСуммаОстаток;
               
                //НоваяСтрока.КурсВзаиморасчетов = КурсДокумента;
                //НоваяСтрока.КратностьВзаиморасчетов = КратностьДокумента;
               
                Если СтрокаОстатков.РасчетыВУсловныхЕдиницах Тогда
                    НоваяСтрока.Сумма = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(НоваяСтрока.СуммаВзаиморасчетов,
                        ВалютаДокумента,мВалютаРегламентированногоУчета,
                        НоваяСтрока.КурсВзаиморасчетов, 1,
                        НоваяСтрока.КратностьВзаиморасчетов, 1)
                Иначе
                    НоваяСтрока.Сумма = Множитель*СтрокаОстатков.ВалютнаяСуммаОстаток;
                КонецЕсли;
               
            Иначе   
                Если ВалютыРеглУчета.НайтиПоЗначению(СтрокаОстатков.ВалютаВзаиморасчетов) = Неопределено Тогда
                    // Это расчеты в у.е.
                    НоваяСтрока.СуммаВзаиморасчетов = Множитель*СтрокаОстатков.ВалютнаяСуммаОстаток;
                    КурсИКратностьРасчетов = МодульВалютногоУчета.ПолучитьКурсВалюты(СтрокаОстатков.ВалютаВзаиморасчетов, Дата);
                   
                    НоваяСтрока.КратностьВзаиморасчетов = КурсИКратностьРасчетов.Кратность;
                    НоваяСтрока.КурсВзаиморасчетов = ?(Множитель*СтрокаОстатков.ВалютнаяСуммаОстаток=0,0,СтрокаОстатков.СуммаОстаток/СтрокаОстатков.ВалютнаяСуммаОстаток)/?(КурсИКратностьРасчетов.Кратность = 0,1,КурсИКратностьРасчетов.Кратность);
                   
                Иначе
                    НоваяСтрока.СуммаВзаиморасчетов = Множитель*СтрокаОстатков.СуммаОстаток;   
                    НоваяСтрока.КурсВзаиморасчетов = 1;
                    НоваяСтрока.КратностьВзаиморасчетов = 1;
                КонецЕсли;
                НоваяСтрока.Сумма = Множитель*СтрокаОстатков.СуммаОстаток;
            КонецЕсли;
           
        КонецЦикла;
    
       
    КонецПроцедуры
    
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Быстрее и точнее всех на ваш вопрос вам ответит отладчик.
  3. TopicStarter Overlay
    НиколайН
    Offline

    НиколайН Опытный в 1С

    Регистрация:
    14 фев 2014
    Сообщения:
    246
    Симпатии:
    0
    Баллы:
    26
    Я уже не один и не два раза проверял отладчиком, промежуточные результаты в массивах и в параметрах, выводятся, а самый последний где запрос выполняется и выгружается
    Код:
    ТекущийРезультат = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.Прямой
    Только в этом и есть различие, что в модуле обработке он пустой, а в модуле документа, заполнен. Может при переносе процедур или в работе процедур из модулей документов в модуле внешних обработок, есть какие-то нюансы?
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Если не работает - значит отличия не только в том, что код теперь находится в модуле внешней обработки, а не в модуле документа.
    У перемещаемого кода, как правило необходимо корректировать контексты выполнения участков кода.

    Если запрос пустой, значит, данные не попадают в налагаемые отборы.
  5. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    У Вас процедура
    Процедура ЗаполнитьОстаткамиВзаиморасчетов1(ПоКонтрагенту, ВидЗадолженности, Ссылка, СуммыДолга, ВалютаДокумента, Дата, Организация) Экспорт
    там есть параметр ССЫЛКА
    У вас что передается в качестве параметра в процедуру? ссылка на документ или на внешний отчет. я так подозреваю то ссылка на объек, а объетом у вас является внешний обработка или отчет
    alexburn нравится это.
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Эх, пришёл Андрей, и как всегда раздал рыбу.....:)
  7. TopicStarter Overlay
    НиколайН
    Offline

    НиколайН Опытный в 1С

    Регистрация:
    14 фев 2014
    Сообщения:
    246
    Симпатии:
    0
    Баллы:
    26
    Передаётся ссылка на документ. Все я разобрался, была моя глупая ошибка. В качестве контрагента передавал не ссылку на него, а строку.
  8. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Вот это и есть опыт.
    +1 к экспе. По интернету оно не передается.
Похожие темы
  1. Shining ninja
    Ответов:
    8
    Просмотров:
    2.872
Загрузка...

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