8.х Помогите с запросом

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем galinnka, 4 окт 2011.

  1. TopicStarter Overlay
    galinnka
    Offline

    galinnka

    Регистрация:
    27 сен 2011
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Нужно вывести оплату по студентам по счетам 201.11 (банк) 201.34(касса) и 205.31 (расчеты с плательщиками доходов от оказания платных работ, услуг)
    написала запрос, но видимо что-то не так, помогите пожалуйста, я в этом деле новичок!
    Код:
    ТекстЗапроса = "ВЫБРАТЬ
    |	ЕПСБУОборотыДтКт.СчетДт КАК СчетДт,
    |	ЕПСБУОборотыДтКт.СубконтоДт2 КАК Контрагент,
    |	ЕПСБУОборотыДтКт.СубконтоДт3 КАК Договор,
    |	ЕПСБУОборотыДтКт.СчетКт,
    |	ЕПСБУОборотыДтКт.Регистратор,
    |	ЕПСБУОборотыДтКт.СуммаОборот,
    |	ЕПСБУОборотыДтКт.КоличествоОборотДт КАК ОборотДт,
    |	ЕПСБУОборотыДтКт.КоличествоОборотКт КАК ОборотКт
    |ИЗ
    |	РегистрБухгалтерии.ЕПСБУ.ОборотыДтКт(&ДатаНачала, &ДатаКонца, Запись, , , , , ) КАК ЕПСБУОборотыДтКт
    |ГДЕ
    |	(ЕПСБУОборотыДтКт.СчетДт В ИЕРАРХИИ (&СчетДт201)
    |			ИЛИ ЕПСБУОборотыДтКт.СчетДт = &СчетДт000)
    |	И ЕПСБУОборотыДтКт.СчетКт = &СчетКт205";				
    
    Запрос = Новый Запрос(ТекстЗапроса);
    Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(НачалоПериода));
    Запрос.УстановитьПараметр("ДатаКонца", КонецДня(КонецПериода));
    Запрос.УстановитьПараметр("СчетДт201", ПолучениеНСИ.ПолучитьСчетПоКоду("201.00"));
    Запрос.УстановитьПараметр("СчетДт000", ПолучениеНСИ.ПолучитьСчетПоКоду("000"));
    Запрос.УстановитьПараметр("СчетКт205", ПолучениеНСИ.ПолучитьСчетПоКоду("205.31"));
    мСчетаРасчетов.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ОборотДт"));
    
    //Выборка = Запрос.Выполнить().Выбрать();
    
  2. comol
    Offline

    comol Опытный в 1С

    Регистрация:
    8 сен 2011
    Сообщения:
    153
    Симпатии:
    0
    Баллы:
    26
    Запрос конечно кривой, но похож на работоспособный. "На что жалуетесь"? Не выполняется или не те данные?
  3. TopicStarter Overlay
    galinnka
    Offline

    galinnka

    Регистрация:
    27 сен 2011
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    не выполняется, не выводит данные
  4. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    а данные есть именно в промежутке НачалоПериода, КонецПериода?

    попробуйте запрос отладить в Консоли запросов
  5. TopicStarter Overlay
    galinnka
    Offline

    galinnka

    Регистрация:
    27 сен 2011
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    а консоль вроде как для управляемых приложений или я ошибаюсь, а то у меня обычное.
  6. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    консоль запросов - это обработка, подключается отдельно (на сколько я знаю)
  7. TopicStarter Overlay
    galinnka
    Offline

    galinnka

    Регистрация:
    27 сен 2011
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Да, нашла, запустила, ввела запрос. Выдал ошибку "Не задано значение параметра СчетДт201", в параметры ввела Имя параметра: Счет201, Значение:201.11, всё равно эту же ошибку и выдает
  8. TopicStarter Overlay
    galinnka
    Offline

    galinnka

    Регистрация:
    27 сен 2011
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Разобралась в консоле, всё получилось, вывел результат. Но в самом СКД пробую параметры установить по счетам, всё равно ничего не выводит
  9. svet
    Offline

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

    Регистрация:
    9 ноя 2007
    Сообщения:
    1.971
    Симпатии:
    59
    Баллы:
    54
    А если по точке останова посмотреть - параметры в запрос берутся точно такие же какие в консоли были заданы?
  10. TopicStarter Overlay
    galinnka
    Offline

    galinnka

    Регистрация:
    27 сен 2011
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Меня интересует что должно быть написано в самом низу после запроса, где
    Код:
    Запрос = Новый Запрос(ТекстЗапроса);
    Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(НачалоПериода));
    Запрос.УстановитьПараметр("ДатаКонца", КонецДня(КонецПериода));
    Запрос.УстановитьПараметр("СчетДт201", ПолучениеНСИ.ПолучитьСчетПоКоду("201.00"));
    Запрос.УстановитьПараметр("СчетДт000", ПолучениеНСИ.ПолучитьСчетПоКоду("000"));
    Запрос.УстановитьПараметр("СчетКт205", ПолучениеНСИ.ПолучитьСчетПоКоду("205.31"));
    мСчетаРасчетов.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("СуммаОборот"));
    
    //Выборка = Запрос.Выполнить().Выбрать();
    
    мСчетаРасчетов.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("СуммаОборот")) это же получается что массив, а у меня массива нет,
    а если использую вторую строку Выборка = Запрос.Выполнить().Выбрать(); то в табло выводится Ошибка чтения значения.
  11. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("СуммаОборот") - да на выходе массив будет.
    мСчетаРасчетов - у вас что? Таблица значений? Если строки предварительно не созданы, ничего туда не загрузится с использованием ЗагрузитьЗначения();

    После Выборка = Запрос.Выполнить().Выбрать();, не забывайте сделать цикл, с использованием Выборка.Следующий();.
  12. TopicStarter Overlay
    galinnka
    Offline

    galinnka

    Регистрация:
    27 сен 2011
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    попробовала написать так:
    Код:
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
    Если  Выборка.СуммаОборот = 1 Тогда
    Продолжить;
    КонецЕсли;
    Если (Выборка.СчетДт <> ПолучениеНСИ.ПолучитьСчетПоКоду("201.11"))или (Выборка.СчетДт <> ПолучениеНСИ.ПолучитьСчетПоКоду("000")) Тогда
    Продолжить;
    КонецЕсли;	
    Если Выборка.СчетКт = ПолучениеНСИ.ПолучитьСчетПоКоду("205.31") Тогда
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/иначе')">		Иначе	</span>
    Продолжить;
    КонецЕсли;	
    
    но тоже ничего не вышло, что в цикле тогда правильно написать?
  13. n.s.gnedash
    Offline

    n.s.gnedash Опытный в 1С Команда форума

    Регистрация:
    15 авг 2010
    Сообщения:
    1.359
    Симпатии:
    5
    Баллы:
    29
    А если так
    Код:
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
    Сообщить(Выборка)
    КонецЦикла;
    
    и глянуть что в выборке выдает
  14. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    все-таки проверьте в отладчике что передается в параметрах в запрос, верные ли значения (раз в консоли запрос отрабатывает

    вы не ответили
  15. TopicStarter Overlay
    galinnka
    Offline

    galinnka

    Регистрация:
    27 сен 2011
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    выдает ошибка чтения значения

    проверила, всё правильно выдает.

    мСчетаРасчетов это таблица значений
  16. svet
    Offline

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

    Регистрация:
    9 ноя 2007
    Сообщения:
    1.971
    Симпатии:
    59
    Баллы:
    54
    Попробуйте после задания параметров сразу поставить :
    ТЗ = Запрос.Выполнить().Выгрузить();
    И посмотрите в отладчике полученную таблицу. Где-то должны найтись либо нулевые данные, либо еще что-то кривое.

    Составных типов в выводимых данных нет? Может быть что-то надо выразить как определенный тип.
  17. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    Из С-П
    По всей вероятности метод ЗагрузитьЗначения доступен для СпискаЗначений, а не для ТЗ

    для ТЗ (из С-П) ЗагрузитьКолонку

  18. TopicStarter Overlay
    galinnka
    Offline

    galinnka

    Регистрация:
    27 сен 2011
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Спасибо большое дорогие друзья за ответы! Покопавшись поняла что в модуле объекта описывать и вызывать счета не нужно, а нужно с помощью СКД передать параметры счетов как указала на рисунке.
    Загвоздка теперь в соединении таблиц. Мне нужно чтобы выводилась информация о студентах из регистров сведений. Это у меня получилось, но нужно еще присоединить оплату за обучение студентов из регистра бухгалтерии ОборотыДтКт.СуммаОборот. Начинаю соединять Левым соединением выводятся все данные СуммаОборот и пустые поля по студентам, а остальными соединениями вообще ничего не выводится, помогите разобраться как лучше соединить таблицы.

    Рабочий запрос по выводу студентов
    Код:
    ВЫБРАТЬ РАЗРЕШЕННЫЕ
    СведенияОСтудентахСрезПоследних.Договор,
    СведенияОСтудентахСрезПоследних.Специальность,
    СведенияОСтудентахСрезПоследних.ФормаОбучения,
    СведенияОСтудентахСрезПоследних.Факультет,
    СведенияОСтудентахСрезПоследних.Состояние
    ПОМЕСТИТЬ Ст
    ИЗ
    РегистрСведений.СведенияОСтудентах.СрезПоследних(&КонецПериода, ) КАК СведенияОСтудентахСрезПоследних;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    СведенияОДоговорахСтудентов.ГодоваяСуммаПлатежа,
    СведенияОДоговорахСтудентов.Студент,
    Ст.Договор,
    Ст.Специальность,
    Ст.ФормаОбучения,
    Ст.Факультет,
    Ст.Состояние
    ИЗ
    РегистрСведений.СведенияОДоговорахСтудентов КАК СведенияОДоговорахСтудентов
    ЛЕВОЕ СОЕДИНЕНИЕ Ст КАК Ст
    ПО СведенияОДоговорахСтудентов.Договор = Ст.Договор
    
    И вот отдельно код по оплате
    Код:
    ВЫБРАТЬ
    ЕПСБУОборотыДтКт.СчетДт КАК СчетДт,
    ЕПСБУОборотыДтКт.СубконтоДт2 КАК Контрагент,
    ЕПСБУОборотыДтКт.СубконтоДт3 КАК Договор,
    ЕПСБУОборотыДтКт.СчетКт,
    ЕПСБУОборотыДтКт.СуммаОборот КАК СуммаОборот,
    ЕПСБУОборотыДтКт.КоличествоОборотДт КАК ОборотДт,
    ЕПСБУОборотыДтКт.КоличествоОборотКт КАК ОборотКт
    ИЗ
    РегистрБухгалтерии.ЕПСБУ.ОборотыДтКт(&НачалоПериода, &КонецПериода, Запись, , , , , ) КАК ЕПСБУОборотыДтКт
    ГДЕ
    (ЕПСБУОборотыДтКт.СчетДт В ИЕРАРХИИ (&СчетДт201)
    ИЛИ ЕПСБУОборотыДтКт.СчетДт = &СчетДт000)
    И ЕПСБУОборотыДтКт.СчетКт = &СчетКт205
    

    Вложения:

  19. TopicStarter Overlay
    galinnka
    Offline

    galinnka

    Регистрация:
    27 сен 2011
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Ура! получилось соединить таблицы.
    Код
    Код:
    ВЫБРАТЬ РАЗРЕШЕННЫЕ 
    СведенияСт.Договор КАК Договор, 
    СведенияСт.Специальность КАК Специальность, 
    СведенияСт.ФормаОбучения КАК ФормаОбучения, 
    СведенияСт.Факультет КАК Факультет, 
    СведенияСт.Состояние КАК Состояние 
    ПОМЕСТИТЬ ТаблицаПериодическихДанных 
    ИЗ 
    РегистрСведений.СведенияОСтудентах.СрезПоследних(&КонецПериода, {(Договор.Учреждение), (Договор.НаправлениеДеятельности)}) КАК СведенияСт 
    {ГДЕ 
    СведенияСт.Специальность.*, 
    СведенияСт.ФормаОбучения.*, 
    СведенияСт.Факультет.*, 
    СведенияСт.Состояние.*} 
    
    ИНДЕКСИРОВАТЬ ПО 
    Договор ; 
    
    //////////////////////////////////////////////////­////////////////////////////// 
    ВЫБРАТЬ РАЗРЕШЕННЫЕ 
    СведенияОДоговорахСтудентов.Договор КАК Договор, 
    СведенияОДоговорахСтудентов.Договор.НомерДоговора КАК НомерДоговора, 
    СведенияОДоговорахСтудентов.Договор.ДатаДоговора КАК ДатаДоговора, 
    СведенияОДоговорахСтудентов.ГодоваяСуммаПлатежа, 
    СведенияОДоговорахСтудентов.Плательщик, 
    СведенияОДоговорахСтудентов.ДатаНачалаДействия КАК НачалоДействия, 
    СведенияОДоговорахСтудентов.ДатаОкончанияДействия КАК ОкончаниеДействия, 
    СведенияОДоговорахСтудентов.Учреждение КАК Учреждение, 
    СведенияОДоговорахСтудентов.Студент КАК Студент, 
    СведенияОДоговорахСтудентов.Студент.Контрагент КАК Контрагент, 
    СведенияСт.Специальность КАК Специальность, 
    СведенияСт.ФормаОбучения КАК ФормаОбучения, 
    СведенияСт.Факультет КАК Факультет, 
    СведенияСт.Состояние КАК Состояние, 
    СведенияОДоговорахСтудентов.ГруппаСтудентов, 
    СведенияОДоговорахСтудентов.ГруппаСтудентов.НомерГруппы КАК НомерГруппы 
    ПОМЕСТИТЬ ТаблицаСведенийОСтудентах 
    ИЗ 
    РегистрСведений.СведенияОДоговорахСтудентов КАК СведенияОДоговорахСтудентов 
    ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаПериодическихДанных КАК СведенияСт 
    ПО СведенияОДоговорахСтудентов.Договор = СведенияСт.Договор 
    {ГДЕ 
    СведенияОДоговорахСтудентов.Договор.Учреждение.*, 
    СведенияОДоговорахСтудентов.Договор.НаправлениеДеятельности.*} 
    
    ИНДЕКСИРОВАТЬ ПО 
    Договор, 
    Контрагент ; 
    
    //////////////////////////////////////////////////­////////////////////////////// 
    ВЫБРАТЬ РАЗРЕШЕННЫЕ 
    ТаблицаСведенийОСтудентах.Студент КАК Студент, 
    ЕПСБУОборотыДтКт.СубконтоДт2 КАК Контрагент, 
    ЕПСБУОборотыДтКт.СубконтоДт3 КАК Договор, 
    ЕПСБУОборотыДтКт.СчетДт, 
    ЕПСБУОборотыДтКт.СчетКт, 
    "" КАК Регистратор, 
    ТаблицаСведенийОСтудентах.НомерДоговора, 
    ТаблицаСведенийОСтудентах.ДатаДоговора КАК ДатаДоговора, 
    ТаблицаСведенийОСтудентах.ГодоваяСуммаПлатежа КАК ГодоваяСуммаПлатежа, 
    ТаблицаСведенийОСтудентах.Плательщик КАК Плательщик, 
    ТаблицаСведенийОСтудентах.НачалоДействия КАК НачалоДействия, 
    ТаблицаСведенийОСтудентах.ОкончаниеДействия КАК ОкончаниеДействия, 
    ТаблицаСведенийОСтудентах.Специальность КАК Специальность, 
    ТаблицаСведенийОСтудентах.ФормаОбучения КАК ФормаОбучения, 
    ТаблицаСведенийОСтудентах.Факультет КАК Факультет, 
    ТаблицаСведенийОСтудентах.Состояние КАК Состояние, 
    ЕПСБУОборотыДтКт.СчетКт КАК СчетКредит, 
    ЕПСБУОборотыДтКт.СчетДт КАК СчетДебет, 
    СУММА(ЕПСБУОборотыДтКт.СуммаОборот) КАК Сумма, 
    СУММА(ЕПСБУОборотыДтКт.КоличествоОборотДт) КАК ОборотДт, 
    СУММА(ЕПСБУОборотыДтКт.КоличествоОборотКт) КАК ОборотКт, 
    ТаблицаСведенийОСтудентах.Студент.Код КАК СтудентКод, 
    ТаблицаСведенийОСтудентах.ГруппаСтудентов, 
    ТаблицаСведенийОСтудентах.НомерГруппы 
    {ВЫБРАТЬ 
    Контрагент.*, 
    Договор.*, 
    ДатаДоговора, 
    ГодоваяСуммаПлатежа, 
    Плательщик, 
    НачалоДействия, 
    ОкончаниеДействия, 
    Специальность, 
    ФормаОбучения, 
    Факультет, 
    Состояние, 
    СтудентКод} 
    ИЗ 
    РегистрБухгалтерии.ЕПСБУ.ОборотыДтКт(&НачалоПериода, &КонецПериода, Период, , , , , ) КАК ЕПСБУОборотыДтКт 
    ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаСведенийОСтудентах КАК ТаблицаСведенийОСтудентах 
    ПО ЕПСБУОборотыДтКт.СубконтоДт2 = ТаблицаСведенийОСтудентах.Контрагент 
    И ЕПСБУОборотыДтКт.СубконтоДт3 = ТаблицаСведенийОСтудентах.Договор 
    
    СГРУППИРОВАТЬ ПО 
    ТаблицаСведенийОСтудентах.Студент, 
    ЕПСБУОборотыДтКт.СубконтоДт2, 
    ЕПСБУОборотыДтКт.СубконтоДт3, 
    ЕПСБУОборотыДтКт.СчетДт, 
    ЕПСБУОборотыДтКт.СчетКт, 
    ТаблицаСведенийОСтудентах.НомерДоговора, 
    ТаблицаСведенийОСтудентах.ДатаДоговора, 
    ТаблицаСведенийОСтудентах.ГодоваяСуммаПлатежа, 
    ТаблицаСведенийОСтудентах.Плательщик, 
    ТаблицаСведенийОСтудентах.НачалоДействия, 
    ТаблицаСведенийОСтудентах.ОкончаниеДействия, 
    ТаблицаСведенийОСтудентах.Специальность, 
    ТаблицаСведенийОСтудентах.ФормаОбучения, 
    ТаблицаСведенийОСтудентах.Факультет, 
    ТаблицаСведенийОСтудентах.Состояние, 
    ТаблицаСведенийОСтудентах.Студент.Код, 
    ТаблицаСведенийОСтудентах.ГруппаСтудентов, 
    ТаблицаСведенийОСтудентах.НомерГруппы, 
    ЕПСБУОборотыДтКт.СчетКт, 
    ЕПСБУОборотыДтКт.СчетДт 
    
    УПОРЯДОЧИТЬ ПО 
    Факультет, 
    Специальность, 
    Студент, 
    Договор, 
    Регистратор
    

    В итоге он выводит все оплаты по разным счетам и не только со студентами, а мне нужно только с ними.
    И по счетам приравнять параметры не удалось
    Думала вот через вот этот код:
    Код
    Код:
    ГДЕ 
    (ЕПСБУОборотыДтКт.СчетДт = &СчетДт201 
    ИЛИ ЕПСБУОборотыДтКт.СчетДт = &СчетДт000) 
    И ЕПСБУОборотыДтКт.СчетКт = &СчетКт205 
    
    в итоге он выводит общую сумму оплаты со студентами.
    Как правильно передать какие мне запросы нужны?

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