8.х УТ Помогите составить запрос

Тема в разделе ""1С:Управление торговлей УТ"", создана пользователем atm779, 17 сен 2009.

  1. TopicStarter Overlay
    atm779
    Offline

    atm779 Опытный в 1С

    Регистрация:
    19 авг 2009
    Сообщения:
    133
    Симпатии:
    0
    Баллы:
    26
    Ситуация такая, мне надо получить список документов "ПриходныйКассовыйОрдер" , в период с 01.08.2009 по 01.09.2009, в которых указан Контрагент = "ООО Амикрон". Я никогда раньше не писал 1С запросы. Как правильно его написать?

    Код:
    
    ТК = Справочники.Контрагенты.НайтиПоНаименованию(" Контрагент А").ПолучитьОбъект();
    Запрос = Новый Запрос;
    Запрос.Текст =		
    "ВЫБРАТЬ
    |	ПриходныйКассовыйОрдер.Номер,
    |	ПриходныйКассовыйОрдер.Дата,
    |	ПриходныйКассовыйОрдер.Контрагент.Наименование,
    |	ПриходныйКассовыйОрдер.СуммаДокумента
    |ИЗ
    |	Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
    |ГДЕ
    |	ПриходныйКассовыйОрдер.Контрагент.Наименование = &ТК";
    
    
    Получаю сообщение об ошибке
    Код:
    шибка при вызове метода контекста (Выполнить): {(9, 51)}: Не задано значение параметра "ТК"
    ПриходныйКассовыйОрдер.Контрагент.Наименование = <<?>>&ТК
    выборка = Запрос.Выполнить();	
    по причине:
    {(9, 51)}: Не задано значение параметра "ТК"
    ПриходныйКассовыйОрдер.Контрагент.Наименование = <<?>>&ТК
    
    
  2. TopicStarter Overlay
    atm779
    Offline

    atm779 Опытный в 1С

    Регистрация:
    19 авг 2009
    Сообщения:
    133
    Симпатии:
    0
    Баллы:
    26
    Разобрался. Спасибо

    Код:
    		// считаем сумму по ПриходныйКассовыйОрдер
    ТК = Справочники.Контрагенты.НайтиПоНаименованию(ЭлементыФормы.Контрагент.Значение).ПолучитьОбъект().Наименование;
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ТК", ТК);
    Запрос.Текст =		
    "ВЫБРАТЬ
    |	ПриходныйКассовыйОрдер.Номер,
    |	ПриходныйКассовыйОрдер.Дата,
    |	ПриходныйКассовыйОрдер.Контрагент.Наименование,
    |	ПриходныйКассовыйОрдер.СуммаДокумента
    |ИЗ
    |	Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
    |ГДЕ
    |	ПриходныйКассовыйОрдер.Контрагент.Наименование = &ТК";
    
    выборка = Запрос.Выполнить().Выбрать();
    ОбщаяСумма = 0;
    Пока выборка.Следующий() = 1 Цикл
    ОбщаяСумма = ОбщаяСумма + выборка.СуммаДокумента;
    КонецЦикла;
    Сообщить(ОбщаяСумма);
    
  3. mialord
    Offline

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

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Здраствуйте!

    Исходя из последнего вашего сообщения осмелюсь предположить что Вам надо было написать примерно так.


    Код:
     Функция ПолучитьРезультатЗапроса_atm779(Организация, Контрагент, Период)
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    ДвиженияДенежныхСредствОбороты.Организация,
    |    ДвиженияДенежныхСредствОбороты.Контрагент,
    |    ДвиженияДенежныхСредствОбороты.СуммаОборот,
    |    ДвиженияДенежныхСредствОбороты.СуммаУпрОборот
    |ИЗ
    |    РегистрНакопления.ДвиженияДенежныхСредств.Обороты(&ДатаНачала, &ДатаОкончания, День, ) КАК ДвиженияДенежныхСредствОбороты
    |ГДЕ
    |    ДвиженияДенежныхСредствОбороты.Организация = &Организация
    |    И ДвиженияДенежныхСредствОбороты.Контрагент = &Контрагент";
    //Параметры запроса
    Запрос.УстановитьПараметр("ДатаНачала", Период.ДатаНачала);// Дата
    Запрос.УстановитьПараметр("ДатаОкончания", Период.датаОкончания);// Дата
    Запрос.УстановитьПараметр("Контрагент", Контрагент);// Справочник ссылка: Контрагенты
    Запрос.УстановитьПараметр("Организация", Организация);// Справочник ссылка: Организации
    Результат = Запрос.Выполнить().Выгрузить();
    
    Если Результат.Количество() <> 0 Тогда
    Список = Новый СписокЗначений;
    Список.Вставить(, Результат.СуммаОборот,      "СуммаОборот");
    Список.Вставить(, Результат.СуммаУпрОборот, "СуммаУпрОборот");
    Иначе
    Список = Новый СписокЗначений;
    Список.Вставить(, 0, "СуммаОборот");
    Список.Вставить(, 0, "СуммаУпрОборот");
    КонецЕсли;
    
    Возврат Список;
    
    КонецФункции //ПолучитьРезультатЗапроса_atm779
    
    
    зы:
    1. Старайтесь избегать лишних циклов
    2. Данные желательно выбирать не из документов а из регистров
  4. TopicStarter Overlay
    atm779
    Offline

    atm779 Опытный в 1С

    Регистрация:
    19 авг 2009
    Сообщения:
    133
    Симпатии:
    0
    Баллы:
    26

    Мне нужно делать выборку и рассчитывать сумму по следующей формуле
    Код:
    ( ПриходноКассовыйОрдер + ПлатежноеПоручениеВходящее - ВозвратыТоваровОтПокупателей ) по заданному Контрагенту за Заданный период.
    
    
    В каком регистре сведений хранится такая информация ?
  5. mialord
    Offline

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

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Здраствуйте!

    Давайте для начала рассмотрим наиболее часто используемые регистры накопления, для которых, нужные для Вас объекты являются регистраторами:

    1. ПриходныйКассовыйОрдер (основные регистры накопления)
    1.1 ВзаиморасчетыСконтрагентами
    1.2 ВзаиморасчетыСконтрагентамиПоДокументамРасчетов
    1.3 ВзаиморасчетыСПодотчетнымиЛицами
    1.4 ДвиженияДенежныхСредств
    1.5 РасчетыСКонтрагентами

    2. ПлатежноепоручениеВходящее
    2.1 ВзаиморасчетыСконтрагентами
    2.2 ДвиженияДенежныхСредств
    2.3 Затраты
    2.4 РасчетыСКонтрагентами

    3. ВозвратыТоваровОтПокупателей
    3.1 ВзаиморасчетыСконтрагентами
    3.2 ВзаиморасчетыСконтрагентамиПоДокументамРасчетов
    3.3 ЗаказыПокупателей
    3.4 Продажи
    3.5 ПродажиСебестоимость
    3.6 ПартииТоваровНаСкладах
    3.7 РеализованныеТовары
    3.8 РасчетыСКонтрагентами
    3.9 ТоварыОрганизации
    3.10 ТоварыНаСкладах

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

    Я бы предложил взять регистр ВзаиморасчетыСконтрагентами, как наиболее адекватный для данной задачи, т.к. в этом регистре не заполняется информация, нам не нужная. Например: Документ ЗаказПокупателя не записывается в регистр накопления ВзаиморасчетыСконтрагентами, однако те же данные заказа заносятся в регистр накопления РасчетыСКонтрагентами.

    Для рассчета данных, по формуле указанной Вами не нужно использовать как таковую саму формулу, для этого можно использовать виртуальную таблицу регистра накопления ВзаиморасчетыСконтрагентамиОстаткиИОбороты.

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

    Пробуйте, эксперементируйте. Удачи!!!

    Вложения:

    • 111.JPG
      111.JPG
      Размер файла:
      18,7 КБ
      Просмотров:
      12

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