Версия для печати темы (https://pro1c.org.ua/index.php?showtopic=5218)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Выборка в запросе

Автор: wmatik 28.10.11, 9:00

1С Предприятие 7.7(сетевая версия) - 7.70.027,Конфигурация: ПУБ (7.70.010)
Подскажите, что не так делаю, есть два документа, ДоговорРасх и БанковскаВыписка. В банковских выписках есть реквизит субконто3 в котором указывается ДоговорРасх.Необходимо чтобы в отчет выводило из документа ДоговорРасх следующие поля: контрагент, номердоговора,датаначала,датаокончания, коддк,сумма1, и из документа БанковскаяВыписка чтобы подсоединяло суммасндс и датадок:

Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |ОбрабатыватьДокументы Проведенные;
    |Контрагент = Документ.ДоговорРасх.Контрагент;
    |НомерДоговора = Документ.ДоговорРасх.НомерДоговора;
    |ДатаНачала = Документ.ДоговорРасх.ДатаНачала;
    |ДатаОкончания = Документ.ДоговорРасх.ДатаОкончания;
    |Сумма1 = Документ.ДоговорРасх.Сумма1;  
    |Док = Документ.БанковскаяВыписка.ТекущийДокумент;
    |Группировка Контрагент;
    |"//}}ЗАПРОС
;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);

    Док = "";

    Пока Запрос.Группировка(1) = 1 Цикл
        Док = Запрос.Док;    
        Контрагент = Запрос.Контрагент;
        НомерДоговора = Запрос.НомерДоговора;
        Сумма1 = Запрос.Сумма1;
        ДатаНачала = Запрос.ДатаНачала;
        ДатаОкончания = Запрос.ДатаОкончания;
        Если (Док.Вид() = "БанковскаяВыписка") Тогда  
            Если ПустоеЗначение ("Субконто1") = 0 Тогда
                СуммаСНДС = Док.СуммаСНДС;
            КонецЕсли;
        КонецЕсли;
        
            Таб.ВывестиСекцию("Строка");
    КонецЦикла;

    Таб.ТолькоПросмотр(1);          
    Таб.Показать("Сформировать", "");
КонецПроцедуры

из документа ДоговорРасх все поля подсоединяются,а вот из банковской выписки нет

немного неправильно указала, в документе БанковскаяВыписка в субконто1 указывается контрагент, а в субконто 3 договора расходные

Автор: nysysimara 28.10.11, 9:23

Цитата
немного неправильно указала, в документе БанковскаяВыписка в субконто1 указывается контрагент, а в субконто 3 договора расходные


уточните задачу
как я поняла: нужен бух.запрос по проводкам Документа Банковская ?

Автор: wmatik 28.10.11, 9:28

в принципе да, необходимо запрос который бы выбирал из банковских выписок строки с указанным договором, а именно нужна соответветствующая договору сумма

Автор: kalyamov 28.10.11, 10:48

Таким запросом как делаете Вы будет тяжело получить нужные данные. Субконто3 как и 1 и 2 - неопределенного типа. Ваш запрос должен был бы выглядеть примерно так :

ДокРасх = Документ.БанковскаяВыписка.Субконто3;
Контрагент = Документ.БанковскаяВыписка.Субконто3.Контрагент
ДатаОплаты = Документ.БанковскаяВыписка.ДатаДок;
СуммаОплаты = Документ.БанковскаяВыписка.СуммаСНДС
Группировка Контрагент;



Но так как Субконто3 не всегда ДокРасх , то такой запрос не получится, или делать выборку с условием, что субконто3 это Документ и уже в обходе запроса делать нужные отборки.
Можно сделать через проводки бух. Запросом. Там есть ИспользоватьСубконто() - где и будут Ваши договора. По идее это 361 счет, но там два субконто, а у Вас получается , что три.

Второй вариант проще и правильней, но хотелось бы увидеть проводки Банк.Выписки которые Вам нужны.

Автор: MATEVI 28.10.11, 11:10

Где то на форуме уже поднималась тема с банковской выпиской и с субконто неопределенного типа. Поищите. Думаю там есть ответ на Ваш вопрос.
Я честно сказать не помню, только, где точно.

Автор: alex1c 28.10.11, 12:04

Вообще-то, когда я проходил атестацию по 1С, то экзаменатор, сказал: "Никогда не делать отчеты по документам, только по движениям которые делает документ." Это как-раз тот случай.

Автор: kalyamov 28.10.11, 12:18

Они много чего говорят, не обязательно их слушать. А случай действительно тот. Если это ПУБ, то там и движения по регистрам должны быть.

Автор: alex1c 28.10.11, 12:29

Цитата(kalyamov @ 28.10.11, 13:18) *
Они много чего говорят, не обязательно их слушать. А случай действительно тот. Если это ПУБ, то там и движения по регистрам должны быть.


Целиком согласен.

Автор: Ardi 28.10.11, 13:33

Цитата(alex1c @ 28.10.11, 13:04) *
Вообще-то, когда я проходил атестацию по 1С, то экзаменатор, сказал: "Никогда не делать отчеты по документам, только по движениям которые делает документ."

Странно. А почему Абби об этом никогда не слышала?

Автор: Kutuzov 02.12.11, 16:31

Конфигурация Буха 7.7 289

Есть список для отбора в запросе

    ДокНАйти = СоздатьОбъект("Документ.ПриходнаяНакладная");
    СпПартий = СоздатьОбъект("СписокЗначений");
    Флаг=1;
    ТзДокументДанные.ВыбратьСтроки();
    Пока ТзДокументДанные.ПолучитьСтроку()=1 Цикл  
        Если Флаг=1 Тогда
            Если ДокНАйти.НайтиПоНомеру(ТзДокументДанные.НомерДокума,ТзДокументДанные.ДатаДокум,)= 1 тогда
                ДокТек =ДокНайти.ТекущийДокумент();
                СпПартий.ДобавитьЗначение(ДокТек);
                ПрошлыйНомерДокума = ТзДокументДанные.НомерДокума;
                Флаг=0;
            КонецЕсли;
        КонецЕсли;
        Если (ТзДокументДанные.НомерДокума <> ПрошлыйНомерДокума)  Тогда
            Если ДокНАйти.НайтиПоНомеру(ТзДокументДанные.НомерДокума,ТзДокументДанные.ДатаДокум,)= 1 тогда
                ДокТек = ДокНайти.ТекущийДокумент();
                СпПартий.ДобавитьЗначение(ДокТек);
                ПрошлыйНомерДокума = ТзДокументДанные.НомерДокума;
                Флаг=0;                                                                                      
            КонецЕсли;
        КонецЕсли;
  
    КонецЦикла;


Получаю в список ссылки на документы. Теперь пытаюсь в запросе выбрать документы РН в которых есть документы партии, то есть ПН из списка

пишу запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |РасходнаяНакладная = Документ.РасходнаяНакладная.ТекущийДокумент;
    |Фирма = Документ.РасходнаяНакладная.Фирма;
    |Патриот = Документ.РасходнаяНакладная.Партия.Док;
    |ДатаПартии =Документ.РасходнаяНакладная.Партия.Дата_Прих;
    |Группировка РасходнаяНакладная;
    |Группировка Патриот;
    |Группировка ДатаПартии;    
    |без Итогов;
    |Условие(Фирма в Фирма);
    |Условие(Патриот в СпПартий);
    |"


Документ.РасходнаяНакладная.Партия.Док - это ссылка на документ который мне надо

В итоге при работе запроса результат пустой или пустая строка, но если убираю условие то он нормально отрабатывая выводя все РН.
Каким макаром вылечить этот запрос???

Автор: Vofka 02.12.11, 16:37

Тема закрыта.

Kutuzov, может и название темы соответствует вашей мысли, но т.к. смысл другой, насколько я понимаю, то создавайте новую тему.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua