Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
17 Дек 2017, 20:58
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Дополнить запрос данными регистра сведений по всему периоду  (Прочитано 9294 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Jazz1

  • *
  • Сообщений: 11
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2013-04-10
  • Сайт: 
  • Профессия: Ученик 1С
Здравствуйте.
Есть созданный регистр сведений,  хранящий данные о коэффициенте(ресурс), контрагенте(измерение) и дате. Регистр периодический с периодом день. Возьмем период 1.01.2013 - 10.01.2013. Например 01.01.2013 я установил контрагенту коэффициент 0,5, а 05.01.2013 коэффициент 0,7. Сделал запрос по контрагенту с полями дата, контрагент, коэффициент - он отобразил коэффициенты только а 01 и 05 число. А можно сделать как-то что если коэффициент если не менялся, то заполнять по датам значением этого коэффициента. Т.е. чтобы этот коэф заполнялся по всем датам?


Оффлайн MuI_I_Ika

  • Гончаров Михаил
  • Администратор
  • *****
  • Сообщений: 6558
  • РЕПУТАЦИЯ: 775
  • КПД: 12%
  • Регистрация: 2012-08-15
    • Skype: MuI_I_Ika
  • Сайт: 
  • Профессия: Программист 1С
Можно посмотреть текст запроса, который не получился?

Оффлайн Jazz1

  • *
  • Сообщений: 11
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2013-04-10
  • Сайт: 
  • Профессия: Ученик 1С
Вот запрос


ВЫБРАТЬ
   Выборка.Дата КАК Дата,
   СУММА(Выборка.КоличествоПришло) КАК КоличествоПришло,
   СУММА(Выборка.СуммаПришло) КАК СуммаПришло,
   СУММА(Выборка.КоличествоПродано) КАК КоличествоПродано,
   СУММА(Выборка.СуммаПродано) КАК СуммаПродано,
   СУММА(Выборка.КоличествоВозвращеноПокупателем) КАК КоличествоВозвращеноПокупателем,
   СУММА(Выборка.СуммаВозвращеноПокупателем) КАК СуммаВозвращеноПокупателем,
   СУММА(Выборка.КоличествоВозвращеноПоставщику) КАК КоличествоВозвращеноПоставщику,
   СУММА(Выборка.СуммаВозвращеноПоставщику) КАК СуммаВозвращеноПоставщику,
   СУММА(Выборка.СуммаОплачено) КАК СуммаОплачено,
   МАКСИМУМ(Выборка.Коэффициент) КАК Коэффициент
ИЗ
   (ВЫБРАТЬ
      НАЧАЛОПЕРИОДА(ПартииТоваровНаСкладахОбороты.Период, ДЕНЬ) КАК Дата,
      СУММА(ПартииТоваровНаСкладахОбороты.КоличествоПриход) КАК КоличествоПришло,
      СУММА(ПартииТоваровНаСкладахОбороты.СтоимостьПриход) КАК СуммаПришло,
      0 КАК КоличествоПродано,
      0 КАК СуммаПродано,
      0 КАК КоличествоВозвращеноПокупателем,
      0 КАК СуммаВозвращеноПокупателем,
      0 КАК КоличествоВозвращеноПоставщику,
      0 КАК СуммаВозвращеноПоставщику,
      0 КАК СуммаОплачено,
      0 КАК Коэффициент
   ИЗ
      РегистрНакопления.ПартииТоваровНаСкладах.Обороты(
            &ДатаНачала,
            &ДатаОкончания,
            РЕГИСТРАТОР,
            СтатусПартии = ЗНАЧЕНИЕ(Перечисление.СтатусыПартийТоваров.НаКомиссию)
               И Склад.Поставщик = &Контрагент) КАК ПартииТоваровНаСкладахОбороты
   ГДЕ
      ПартииТоваровНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
   
   СГРУППИРОВАТЬ ПО
      НАЧАЛОПЕРИОДА(ПартииТоваровНаСкладахОбороты.Период, ДЕНЬ)
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
      ДАТАВРЕМЯ(1, 1, 1),
      СУММА(ПартииТоваровНаСкладахОстатки.КоличествоОстаток),
      СУММА(ПартииТоваровНаСкладахОстатки.СтоимостьОстаток),
      0,
      0,
      0,
      0,
      0,
      0,
      0,
      0
   ИЗ
      РегистрНакопления.ПартииТоваровНаСкладах.Остатки(
            &ДатаНачала,
            СтатусПартии = ЗНАЧЕНИЕ(Перечисление.СтатусыПартийТоваров.НаКомиссию)
               И Склад.Поставщик = &Контрагент) КАК ПартииТоваровНаСкладахОстатки
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
      ДАТАВРЕМЯ(1, 1, 1),
      0,
      0,
      0,
      ВЫБОР
         КОГДА &ДатаНачала = ДАТАВРЕМЯ(1, 1, 1)
            ТОГДА 0
         ИНАЧЕ СУММА(ПартииТоваровНаСкладахОбороты.СтоимостьРасход)
      КОНЕЦ,
      0,
      0,
      0,
      0,
      0,
      0
   ИЗ
      РегистрНакопления.ПартииТоваровНаСкладах.Обороты(
            ,
            &ДатаНачала,
            РЕГИСТРАТОР,
            СтатусПартии = ЗНАЧЕНИЕ(Перечисление.СтатусыПартийТоваров.НаКомиссию)
               И Склад.Поставщик = &Контрагент) КАК ПартииТоваровНаСкладахОбороты
   ГДЕ
      НЕ ПартииТоваровНаСкладахОбороты.Регистратор ССЫЛКА Документ.ВозвратТоваровПоставщику
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
      НАЧАЛОПЕРИОДА(ПартииТоваровНаСкладахОбороты.Период, ДЕНЬ),
      0,
      0,
      СУММА(ПартииТоваровНаСкладахОбороты.КоличествоРасход),
      СУММА(ПартииТоваровНаСкладахОбороты.СтоимостьРасход),
      0,
      0,
      0,
      0,
      0,
      0
   ИЗ
      РегистрНакопления.ПартииТоваровНаСкладах.Обороты(
            &ДатаНачала,
            &ДатаОкончания,
            РЕГИСТРАТОР,
            СтатусПартии = ЗНАЧЕНИЕ(Перечисление.СтатусыПартийТоваров.НаКомиссию)
               И Склад.Поставщик = &Контрагент) КАК ПартииТоваровНаСкладахОбороты
   ГДЕ
      НЕ ПартииТоваровНаСкладахОбороты.Регистратор ССЫЛКА Документ.ВозвратТоваровПоставщику
   
   СГРУППИРОВАТЬ ПО
      НАЧАЛОПЕРИОДА(ПартииТоваровНаСкладахОбороты.Период, ДЕНЬ)
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
      НАЧАЛОПЕРИОДА(ПартииТоваровНаСкладахОбороты.Период, ДЕНЬ),
      0,
      0,
      0,
      0,
      СУММА(ПартииТоваровНаСкладахОбороты.КоличествоПриход),
      СУММА(ПартииТоваровНаСкладахОбороты.СтоимостьПриход),
      0,
      0,
      0,
      0
   ИЗ
      РегистрНакопления.ПартииТоваровНаСкладах.Обороты(
            &ДатаНачала,
            &ДатаОкончания,
            РЕГИСТРАТОР,
            СтатусПартии = ЗНАЧЕНИЕ(Перечисление.СтатусыПартийТоваров.НаКомиссию)
               И Склад.Поставщик = &Контрагент) КАК ПартииТоваровНаСкладахОбороты
   ГДЕ
      НЕ ПартииТоваровНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
   
   СГРУППИРОВАТЬ ПО
      НАЧАЛОПЕРИОДА(ПартииТоваровНаСкладахОбороты.Период, ДЕНЬ)
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
      НАЧАЛОПЕРИОДА(ПартииТоваровНаСкладахОбороты.Период, ДЕНЬ),
      0,
      0,
      0,
      0,
      0,
      0,
      СУММА(ПартииТоваровНаСкладахОбороты.КоличествоРасход),
      СУММА(ПартииТоваровНаСкладахОбороты.СтоимостьРасход),
      0,
      0
   ИЗ
      РегистрНакопления.ПартииТоваровНаСкладах.Обороты(
            &ДатаНачала,
            &ДатаОкончания,
            РЕГИСТРАТОР,
            СтатусПартии = ЗНАЧЕНИЕ(Перечисление.СтатусыПартийТоваров.НаКомиссию)
               И Склад.Поставщик = &Контрагент) КАК ПартииТоваровНаСкладахОбороты
   ГДЕ
      ПартииТоваровНаСкладахОбороты.Регистратор ССЫЛКА Документ.ВозвратТоваровПоставщику
   
   СГРУППИРОВАТЬ ПО
      НАЧАЛОПЕРИОДА(ПартииТоваровНаСкладахОбороты.Период, ДЕНЬ)
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
      НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиОбороты.Период, ДЕНЬ),
      0,
      0,
      0,
      0,
      0,
      0,
      0,
      0,
      СУММА(ВзаиморасчетыСКонтрагентамиОбороты.СуммаУпрПриход),
      0
   ИЗ
      РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(
            &ДатаНачала,
            &ДатаОкончания,
            РЕГИСТРАТОР,
            ДоговорКонтрагента.Владелец = &Контрагент
               И ДоговорКонтрагента.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СКомитентом)) КАК ВзаиморасчетыСКонтрагентамиОбороты
   ГДЕ
      ВзаиморасчетыСКонтрагентамиОбороты.Регистратор ССЫЛКА Документ.ПлатежноеТребованиеПолученное
   
   СГРУППИРОВАТЬ ПО
      НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиОбороты.Период, ДЕНЬ)
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
      ДАТАВРЕМЯ(1, 1, 1),
      0,
      0,
      0,
      0,
      0,
      0,
      0,
      0,
      ВЫБОР
         КОГДА &ДатаНачала = ДАТАВРЕМЯ(1, 1, 1)
            ТОГДА 0
         ИНАЧЕ СУММА(ВзаиморасчетыСКонтрагентамиОбороты.СуммаУпрПриход)
      КОНЕЦ,
      0
   ИЗ
      РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(
            ,
            &ДатаНачала,
            РЕГИСТРАТОР,
            ДоговорКонтрагента.Владелец = &Контрагент
               И ДоговорКонтрагента.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СКомитентом)) КАК ВзаиморасчетыСКонтрагентамиОбороты
   ГДЕ
      ВзаиморасчетыСКонтрагентамиОбороты.Регистратор ССЫЛКА Документ.ПлатежноеТребованиеПолученное
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
      НАЧАЛОПЕРИОДА(КоэффициентыКомитентов.Период, ДЕНЬ),
      0,
      0,
      0,
      0,
      0,
      0,
      0,
      0,
      0,
      КоэффициентыКомитентов.Коэффициент
   ИЗ
      РегистрСведений.КоэффициентыКомитентов КАК КоэффициентыКомитентов) КАК Выборка

СГРУППИРОВАТЬ ПО
   Выборка.Дата

УПОРЯДОЧИТЬ ПО
   Выборка.Дата

Оффлайн SlazZy

  • ***
  • Сообщений: 149
  • РЕПУТАЦИЯ: 15
  • КПД: 10%
  • Регистрация: 2012-04-28
  • Сайт: 
  • Профессия: Программист 1С
В самом запросе это сделать нельзя, тут варианта два - если у вас просто запрос(не отчет), то добавляете итог по полю ДАТА

		|ИТОГИ ПО
| Дата ПЕРИОДАМИ(ДЕНЬ, &ДатаНачала, &ДатаОкончания)"; //параметры не обязательны

Результат = Запрос.Выполнить();

ВыборкаПериод = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Дата", "Все");

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



Если же у вас отчет, то в СКД надо сделать группировку по полю Дата(но лучше изначально дату привести к началу дня) и сделать метод дополнения "день"

Оффлайн Jazz1

  • *
  • Сообщений: 11
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2013-04-10
  • Сайт: 
  • Профессия: Ученик 1С
У меня в отчет идут эти данные.

Добавил в код строку:
ВыборкаПериод = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Дата", "Все");

Выдало ошибку {ВнешнийОтчет.ОтчетКомитенту.МодульОбъекта(287)}: Ошибка при вызове метода контекста (Выбрать)
   Результат = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Дата", "Все");
по причине:
Измерение не найдено "Дата"


Дата у меня приведена к началу. Я не совсем понимаю как запомнить в переменной коэффициент, например если задан период, в котором коэффициент не определен (т.е. определен датой раньше или позже, а с этой даты он пустой получается)?

Отчет не на СКД...

Оффлайн SlazZy

  • ***
  • Сообщений: 149
  • РЕПУТАЦИЯ: 15
  • КПД: 10%
  • Регистрация: 2012-04-28
  • Сайт: 
  • Профессия: Программист 1С
получить пустые записи нельзя, но можно дополнить период пустыми записями дат и для этих дат заполнять коэффициент, ну не заполнять, а выводить его в отчет.
например вы имеете на данный момент такие строки
01012013    1
05012013    2


Будете же иметь
01012013    1
02012013    null
03012013    null
04012013    null
05122013    2

Соответственно при обходе этой выборки вы можете в отчет выводить прошлое значение. (интересно Null или 0, но конечно же склоняюсь к null, проверять времени нет)


Ошибка видимо потому, что в этом методе указывают поля итогов, у меня это поле дата, у вас не знаю как вы назвали поле :)

Оффлайн Jazz1

  • *
  • Сообщений: 11
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2013-04-10
  • Сайт: 
  • Профессия: Ученик 1С
Я к тому что могу иметь:

01012013    null
05012013    2
 
А за дату например 20122012 1
Вот как мне взять эту 1 от 20122012 и растянуть до 05012013, если значение 01012013  - null ?

Оффлайн SlazZy

  • ***
  • Сообщений: 149
  • РЕПУТАЦИЯ: 15
  • КПД: 10%
  • Регистрация: 2012-04-28
  • Сайт: 
  • Профессия: Программист 1С
А за дату например 20122012 1
Вот как мне взять эту 1 от 20122012 и растянуть до 05012013, если значение 01012013  - null ?


покажите код как вы выводите эти значения в отчет

Оффлайн Jazz1

  • *
  • Сообщений: 11
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2013-04-10
  • Сайт: 
  • Профессия: Ученик 1С
Если коротко, то так:

Запрос.УстановитьПараметр("Контрагент", Контрагент);
Запрос.УстановитьПараметр("ДатаНачала", ?(ДатаНачала = Дата("00010101000000"), Дата("20130101000000"), ДатаНачала));
Запрос.УстановитьПараметр("ДатаОкончания", ?(ДатаОкончания = Дата("00010101000000"), ДатаОкончания, КонецДня(ДатаОкончания)));

Результат = Результат.Выбрать();
//Результат = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Дата", "Все");
   
Область = Макет.ПолучитьОбласть("Строка");
      
Пока Результат.Следующий() Цикл
   Коэффициент = Результат.Коэффициент;
        Область.Параметры.Коэффициент = Коэффициент;
   ТабличныйДокумент.Вывести(Область);
КонецЦикла;

Оффлайн SlazZy

  • ***
  • Сообщений: 149
  • РЕПУТАЦИЯ: 15
  • КПД: 10%
  • Регистрация: 2012-04-28
  • Сайт: 
  • Профессия: Программист 1С
Пока Результат.Следующий() Цикл
   Коэффициент = Результат.Коэффициент;
        Область.Параметры.Коэффициент = Коэффициент;
   ТабличныйДокумент.Вывести(Область);
КонецЦикла;

Что вам мешает сделать вот так?

Коэффициент =0;
Пока Результат.Следующий() Цикл
   Если Результат.Коэфициент<>null Тогда
       Коэффициент = Результат.Коэффициент;
   КонецЕсли;

   Область.Параметры.Коэффициент = Коэффициент;

   ТабличныйДокумент.Вывести(Область);
КонецЦикла;


Теги:
 

Запрос Параметры для "ИЗ"

Автор БерезинРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 3009
Последний ответ 15 Май 2013, 23:27
от Березин
Что быстрее: Загрузить табличную часть в запрос и там добавить колонки, или пробежаться циклом по ТЧ и добавить значения в колонки

Автор ZeedРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 990
Последний ответ 11 Июл 2016, 09:00
от vitasw
Запрос по обработке "Согласование заявок"

Автор DenielAkreedРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 0
Просмотров: 693
Последний ответ 29 Сен 2016, 02:39
от DenielAkreed
Отличие проводки по регистру сведений от проводки по регистру накопления?

Автор DirecTwiXРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 4857
Последний ответ 18 Апр 2012, 02:19
от Dethmontt
8.2 Бух. Запрос с условием "комментарий содержит текст"

Автор bolobolРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 13
Просмотров: 16582
Последний ответ 02 Сен 2011, 01:14
от bolobol

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
145 Сообщений
AIFrame
64 Сообщений
ilyay ilyay
63 Сообщений
alex0402
50 Сообщений
andron81_81
44 Сообщений
oleg-x
42 Сообщений
BuhRust
32 Сообщений
MuI_I_Ika MuI_I_Ika
31 Сообщений
Golickoff Golickoff
28 Сообщений
Dima Dddd Dima Dddd
24 Сообщений

* Кто онлайн

  • Точка Гостей: 273
  • Точка Скрытых: 0
  • Точка Пользователей: 4
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal