Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
31 мая 2024, 07:19

СКД и получение данных из табличной части

Автор dimanuga, 07 фев 2019, 14:49

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

dimanuga

Здравствуйте !
Подскажите новичку по формированию отчета в СКД:

Есть справочник у него есть реквизит наименование и табличная часть, допустим в ней есть следующие реквизиты: Дата и Значение

Необходимо при формировании отчета выводить наименование и рассчитывать на текущую дату Значение1 = (ЗначениеПоследнееВТабличномЗначении - ЗначениеПредыдущееВТабличномЗначении)/(ДатаПоследняяВТабличномЗначении-ДатаПредыдущаявТабличномЗначении)*(ДатаТекущая-ДатаПоследняяВТабличномЗначении)+ЗначениеПоследнееВТабличномЗначении

Т.е. если русским языком - необходимо найти прогнозное значение на текущую даты, основанное на среднем прибавлении значения между двумя последними датами
Дата               Значение
01.02.2018         500
02.03.2018         800
05.04.2018         1400

Итого на текущую дату (например сегодня 02.05.2018) Значение будет = 600/34*27+1400 = 1876,47
Как написать вычисляемое поле в СКД?

LexaK

в СКД такое рассчитывать это для самых продвинутых,
а вот по проще в обычном запросе выполните (а запрос в СКД потом вставите), попробуйте так
проверил, даже результат совпал :)

//эмуляция ТЧ справочника
ВЫБРАТЬ 1000 как Ссылка, ДатаВремя(2018,2,1) как Дата, 500 как Значение Поместить Таб
объединить все ВЫБРАТЬ 1000, ДатаВремя(2018,3,2), 800
объединить все ВЫБРАТЬ 1000, ДатаВремя(2018,4,5), 1400
;

//Выбрать * из таб

Выбрать
    //для проверки полученных значений
Таб0.*, //последние значения
Таб1.*, //предыдущие значения
//сам расчет
(Таб0.Значение - Таб1.Значение)
/ РазностьДат(Таб1.Дата, Таб0.Дата, День)
* РазностьДат(Таб0.Дата, &Дата, День)
+ Таб0.Значение как Результат
из
Таб таб0
левое соединение Таб Таб1 //данные для предыдущей записи
по Таб0.Ссылка = Таб1.Ссылка //для отбора в рамках одно элемента справончика
и Таб0.Дата > Таб1.Дата

левое соединение Таб Таб2 //для отсечки прошлого значения
по Таб0.Ссылка = Таб2.Ссылка //для отбора в рамках одно элемента справончика
и Таб0.Дата > Таб2.Дата
и Таб1.Дата < Таб2.Дата

левое соединение Таб Таб3 //для отсечки первого значения
по Таб0.Ссылка = Таб3.Ссылка //для отбора в рамках одно элемента справончика
и Таб0.Дата < Таб3.Дата
и Таб3.Дата <= &Дата

где
Таб0.Дата <= &Дата
и Таб2.Ссылка есть Null
и Таб3.Ссылка есть Null

если помогло нажмите: Спасибо!

dimanuga

Спасибо ! Но я честно не совсем понял :(
Я еще совсем на ранней стадии изучения 1С...

Вот есть у меня код по кнопке

        Количество = Объект.Привесы.Количество();
   
   Если Количество = 0 Тогда
      Сообщить("Данных нет ! Введите данные по весу.");
   КонецЕсли;
   
   Если Количество = 1 Тогда
      Сообщить("Данных для подсчета недостаточно ! Введите данные по весу.");
   КонецЕсли;
   
   Если Количество > 1 Тогда
      РазницаВес = (Объект.Привесы[Количество-1].ВесЖивотного-Объект.Привесы[Количество-2].ВесЖивотного);
      РазницаДней = (НачалоДня(Объект.Привесы[Количество-1].ДатаВзвешивания) - НачалоДня(Объект.Привесы[Количество-2].ДатаВзвешивания))/(60*60*24);
      СреднееВес = РазницаВес / РазницаДней;
      Значение = Окр((Объект.Привесы[Количество-1].ВесЖивотного-Объект.Привесы[Количество-2].ВесЖивотного)/
      ((НачалоДня(Объект.Привесы[Количество-1].ДатаВзвешивания) - НачалоДня(Объект.Привесы[Количество-2].ДатаВзвешивания))/(60*60*24))*
      ((НачалоДня(ТекущаяДата())- НачалоДня(Объект.Привесы[Количество-1].ДатаВзвешивания))/(60*60*24))+ Объект.Привесы[Количество-1].ВесЖивотного);
      Сообщить("Cредний расчетный вес в день: " + СреднееВес + " Прогнозный вес на текущую дату: " + Значение);
   КонецЕсли;

Как мне получить "Значение" при открытии отчета для каждого животного ? Можно ли все таки это сделать с помощью расчета в СКД ?

LexaK

ЦитироватьМожно ли все таки это сделать с помощью расчета в СКД ?
Вам ответили что можно! прислали пример! что-то еще?

если помогло нажмите: Спасибо!

dimanuga

Цитата: LexaK от 08 фев 2019, 10:12
ЦитироватьМожно ли все таки это сделать с помощью расчета в СКД ?
Вам ответили что можно! прислали пример! что-то еще?

Вам спасибо огромное !
Я уточнил вопрос - может все-таки кто-то подскажет как это сделать с помощью вычисляемых полей и ресурсов в СКД - если это возможно?!

Я просто не совсем понял описанный Вами метод - разобраться не смог - не пойму как его записать в моем случае!

Выбрать
   (Таб0.ВесЖивотного - Таб1.ВесЖивотного)
   / РазностьДат(Таб1.ДатаВзвешивания, Таб0.ДатаВзвешивания, День)
   * РазностьДат(Таб0.Дата, &Дата, День)
   + Таб0.ВесЖивотного как Результат
из
   Справочник.Животные.Привесы Таб0
     
левое соединение Справочник.Животные.Привесы Таб1
   по Таб0.Ссылка = Таб1.Ссылка
   и Таб0.ДатаВзвешивания > Таб1.ДатаВзвешивания

левое соединение Справочник.Животные.Привесы Таб2
   по Таб0.Ссылка = Таб2.Ссылка
   и Таб0.ДатаВзвешивания > Таб2.ДатаВзвешивания
   и Таб1.ДатаВзвешивания < Таб2.ДатаВзвешивания

левое соединение Справочник.Животные.Привесы Таб3
   по Таб0.Ссылка = Таб3.Ссылка
   и Таб0.ДатаВзвешивания < Таб3.ДатаВзвешивания
   и Таб3.ДатаВзвешивания <= &Дата      

где
   Таб0.ДатаВзвешивания <= &Дата      
и    Таб2.Ссылка есть Null   
и    Таб3.Ссылка есть Null   

Правильно я записал?

И потом куда этот запрос вставлять? Делать в Схеме второй набор данных или добавить в основной ? :dfbsdfbsdf:
Добавлено: 08 фев 2019, 12:04


В результате вставил вот такой запрос:

ВЫБРАТЬ
   (Таб0.ВесЖивотного - Таб1.ВесЖивотного) / РАЗНОСТЬДАТ(Таб1.ДатаВзвешивания, Таб0.ДатаВзвешивания, ДЕНЬ) * РАЗНОСТЬДАТ(Таб0.ДатаВзвешивания, &Дата, ДЕНЬ) + Таб0.ВесЖивотного КАК Результат
ИЗ
   Справочник.Животные.Привесы КАК Таб0
      ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Животные.Привесы КАК Таб1
      ПО Таб0.Ссылка = Таб1.Ссылка
         И Таб0.ДатаВзвешивания > Таб1.ДатаВзвешивания
      ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Животные.Привесы КАК Таб2
      ПО Таб0.Ссылка = Таб2.Ссылка
         И Таб0.ДатаВзвешивания > Таб2.ДатаВзвешивания
         И (Таб1.ДатаВзвешивания < Таб2.ДатаВзвешивания)
      ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Животные.Привесы КАК Таб3
      ПО Таб0.Ссылка = Таб3.Ссылка
         И Таб0.ДатаВзвешивания < Таб3.ДатаВзвешивания
         И (Таб3.ДатаВзвешивания <= &Дата)
ГДЕ
   Таб0.ДатаВзвешивания <= &Дата
   И Таб2.Ссылка ЕСТЬ NULL
   И Таб3.Ссылка ЕСТЬ NULL

И в отчете пусто !!! Данные в ТЧ есть !

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск