Продвинутый курс. Домашнее задание №8

Третье задание по 1-му блоку продвинутого курса.

Для выполнения рекомендуется изучить следующие главы 1-го блока.
Глава 6. Построитель отчета и построитель запроса.
Глава 7. Запросы.

В этой же теме необходимо написать отчет о выполнении задания.

К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте — залогиньтесь. Если Вы оплачивали курс, у Вас активирован токен доступа, Вы залогинены, но Вы видите эту запись — напишите нам на e-mail поддержки.

комментариев 28 на “Продвинутый курс. Домашнее задание №8”

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

  2. Евгений не знаю насколько по теме, заинтересовался разложением запроса ко временной таблице в профойлере. Вчастности делаю запрос к таблице остатки и обороты взаиморасчетов.  В профайлере отлавливаю два запроса, один понятный к таблице _AccumReg9157, а вот втрой к какой-то талице #tt1 как ни пытался не нашел я такой таблицы в базе и не нашел как формируется эта таблица. Понятно, что она виртуальная, но где же все-таки хранит или формирует 1с?

    • Это временная таблица, которая формируется, при обращении к ВТ Остатки и обороты.
      По идее она должна формироваться в этом же запросе.
      Посмотрите результат запроса к СУБД в технологическом журнале.
      Я думаю там будет более понятная информация.

      • да забыл самое важно упомянуть, я это дело исследовал на платформе  8.0 )))

        • Понятно, ТЖ там нет :)

          Рекомендую исследовать последние версии платформы ;)

          • да эт понятно, учусь на последней, а вот наш Торговый Дом на 8.0 вот и приходиться ковырять.

            • В целом логика построения ВТ не должна была измениться.
              Поэтому можно подсмотреть в 8.2.

  3. Задание выполнил.

    Создал внешнюю обработку. На форме разместил реквизиты формы Период (тип СтандартныйПериод),  График (тип СправочникСсылка.ТипыГрафиков) и ТаблицаРезультат (ТаблицаЗначений). Добавил команду формы СкоростьПродаж и соответсвующую ей кнопку. При нажатии на кнопку  выполняется пакетный запрос, результат которого выводится в таблицу ТаблицаРезультат.

    Текст модуля формы:
    <code>
     &НаКлиенте
    Процедура СкоростьПродаж(Команда)
                   СкоростьПродажСервер();
    КонецПроцедуры
     
    &НаСервере
    Процедура СкоростьПродажСервер()
                Запрос = Новый Запрос;
                Запрос.Текст =
    “////////////////////////////////////////////////////////////////////////////////
                           |// формируем временную таблицу продаж
                           |ВЫБРАТЬ
                           |           ПродажиОбороты.Номенклатура КАК Номенклатура,
                           |           ПродажиОбороты.КоличествоОборот КАК КоличествоПродажа
                           |ПОМЕСТИТЬ Продажи
                           |ИЗ
                           |           РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, , ) КАК ПродажиОбороты
                           |
                           |СГРУППИРОВАТЬ ПО
                           |           ПродажиОбороты.Номенклатура,
                           |           ПродажиОбороты.КоличествоОборот
                           |
                           |ИНДЕКСИРОВАТЬ ПО
                           |           Номенклатура
                           |;
                           |
                           |////////////////////////////////////////////////////////////////////////////////
                           |// формируем временную таблицу рабочих дней по графику, соединенную с таблицей РегистрНакопления.ОстаткиТоваров.ОстаткиИОбороты.
                           |// по каждой номенклатуре каждому дню графика ставится в соответствие день последнего предыдущего движения по регистру ОстаткиТоваров по данной номенклатуре
                           |ВЫБРАТЬ
                           |           ГрафикиРаботы.Дата,
                           |           МАКСИМУМ(ОстаткиТоваровОстаткиИОбороты.Период) КАК Период,
                           |           ОстаткиТоваровОстаткиИОбороты.Номенклатура КАК Номенклатура
                           |ПОМЕСТИТЬ Даты
                           |ИЗ
                           |           РегистрСведений.ГрафикиРаботы КАК ГрафикиРаботы
                           |                       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.ОстаткиИОбороты(
                           |                                              &ДатаНачала,
                           |                                              &ДатаОкончания,
                           |                                              День,
                           |                                              ДвиженияИГраницыПериода,
                           |                                              Номенклатура В
                           |                                                          (ВЫБРАТЬ
                           |                                                                      Продажи.Номенклатура
                           |                                                          ИЗ
                           |                                                                      Продажи КАК Продажи)) КАК ОстаткиТоваровОстаткиИОбороты
                           |                       ПО ГрафикиРаботы.Дата >= ОстаткиТоваровОстаткиИОбороты.Период
                           |ГДЕ
                           |           ГрафикиРаботы.ТипГрафика = &ТипГрафика
                           |           И ГрафикиРаботы.Значение = 1
                           |           И ГрафикиРаботы.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
                           |
                           |СГРУППИРОВАТЬ ПО
                           |           ГрафикиРаботы.Дата,
                           |           ОстаткиТоваровОстаткиИОбороты.Номенклатура
                           |
                           |ИНДЕКСИРОВАТЬ ПО
                           |           Номенклатура,
                           |           Период
                           |;
                           |
                           |////////////////////////////////////////////////////////////////////////////////
                           |// к временной таблице Даты добавляем колонки с остатками товара, формируем временную таблицу Остатки
                           |ВЫБРАТЬ
                           |           Даты.Дата КАК Дата,
                           |           Даты.Номенклатура КАК Номенклатура,
                           |           Даты.Период КАК Период,
                           |           ОстаткиТоваровОстаткиИОбороты.КоличествоНачальныйОстаток КАК НачальныйОстаток,
                           |           ОстаткиТоваровОстаткиИОбороты.КоличествоКонечныйОстаток КАК КонечныйОстаток
                           |ПОМЕСТИТЬ Остатки
                           |ИЗ
                           |           Даты КАК Даты
                           |                       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.ОстаткиИОбороты(
                           |                                              &ДатаНачала,
                           |                                              &ДатаОкончания,
                           |                                              День,
                           |                                              ,
                           |                                              Номенклатура В
                           |                                                          (ВЫБРАТЬ
                           |                                                                      Продажи.Номенклатура
                           |                                                          ИЗ
                           |                                                                      Продажи КАК Продажи)) КАК ОстаткиТоваровОстаткиИОбороты
                           |                       ПО Даты.Период = ОстаткиТоваровОстаткиИОбороты.Период
                           |                                   И Даты.Номенклатура = ОстаткиТоваровОстаткиИОбороты.Номенклатура
                           |
                           |ИНДЕКСИРОВАТЬ ПО
                           |           Номенклатура,
                           |           Дата,
                           |           Период
                           |;
                           |
                           |////////////////////////////////////////////////////////////////////////////////
                           |// в таблице Остатки оставляем только дни, в которые по номенклатуре был не нулевой остаток – формируем ВТ ОстаткиИтог
                           |ВЫБРАТЬ
                           |           Остатки.Дата КАК Дата,
                           |           Остатки.Номенклатура КАК Номенклатура,
                           |           Остатки.НачальныйОстаток,
                           |           Остатки.КонечныйОстаток
                           |ПОМЕСТИТЬ ОстаткиИтог
                           |ИЗ
                           |           Остатки КАК Остатки
                           |ГДЕ
                           |           Остатки.КонечныйОстаток > 0
                           |
                           |ОБЪЕДИНИТЬ ВСЕ
                           |
                           |// добавляем дни, на конец которых остатка нет, но в этот день были движения
                           |ВЫБРАТЬ
                           |           Остатки.Дата,
                           |           Остатки.Номенклатура,
                           |           Остатки.НачальныйОстаток,
                           |           Остатки.КонечныйОстаток
                           |ИЗ
                           |           Остатки КАК Остатки
                           |                       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Остатки КАК Остатки1
                           |                       ПО Остатки.Дата = Остатки1.Период
                           |                                   И Остатки.Дата = Остатки1.Дата
                           |                                   И Остатки.Номенклатура = Остатки1.Номенклатура
                           |ГДЕ
                           |           Остатки.НачальныйОстаток >= 0
                           |           И Остатки.КонечныйОстаток <= 0
                           |
                           |ИНДЕКСИРОВАТЬ ПО
                           |           Дата,
                           |           Номенклатура
                           |;
                           |
                           |////////////////////////////////////////////////////////////////////////////////
                           |// формируем временную таблицу с количеством дней за период, когда товар был на складе – формируем ВТ ВТКоличествоДней
                           |ВЫБРАТЬ
                           |           ОстаткиИтог.Номенклатура КАК Номенклатура,
                           |           КОЛИЧЕСТВО(ОстаткиИтог.Дата) КАК КоличествоДней
                           |ПОМЕСТИТЬ ВТКоличествоДней
                           |ИЗ
                           |           ОстаткиИтог КАК ОстаткиИтог
                           |
                           |СГРУППИРОВАТЬ ПО
                           |           ОстаткиИтог.Номенклатура
                           |
                           |ИНДЕКСИРОВАТЬ ПО
                           |           Номенклатура
                           |;
                           |
                           |////////////////////////////////////////////////////////////////////////////////
                           |// итоговый запрос
                           |ВЫБРАТЬ
                           |           Продажи.Номенклатура КАК Номенклатура,
                           |           Продажи.КоличествоПродажа,
                           |           ВТКоличествоДней.КоличествоДней,
                           |           Продажи.КоличествоПродажа / ВТКоличествоДней.КоличествоДней КАК СкоростьПродажи
                           |ИЗ
                           |           Продажи КАК Продажи
                           |                       ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТКоличествоДней КАК ВТКоличествоДней
                           |                       ПО Продажи.Номенклатура = ВТКоличествоДней.Номенклатура
                           |
                           |УПОРЯДОЧИТЬ ПО
                           |           Продажи.Номенклатура.Наименование”;
     
                Запрос.УстановитьПараметр(“ДатаНачала”, Период.ДатаНачала);    
                Запрос.УстановитьПараметр(“ДатаОкончания”, Период.ДатаОкончания);  
                Запрос.УстановитьПараметр(“ТипГрафика”, График); 
                Результат = Запрос.Выполнить();
               
                ТаблицаРезультат.Загрузить(Результат.Выгрузить());
     
    КонецПроцедуры
    </code>
     
    2.  В форму обработки добавил команду формы УровеньДебиторки и соответсвующую ей кнопку. При нажатии на кнопку  выполняется пакетный запрос, результат которого выводится в виде сообщений пользователю.
     <code>
    &НаКлиенте
    Процедура УровеньДебиторки(Команда)
                УровеньДебиторкиСервер();
     КонецПроцедуры
     &НаСервере
    Процедура УровеньДебиторкиСервер()
                 Запрос = Новый Запрос;
                Запрос.Текст =
                           “ВЫБРАТЬ
                           |           ВзаиморасчетыОстаткиИОбороты.Регистратор,
                           |           ВзаиморасчетыОстаткиИОбороты.Контрагент КАК Контрагент,
                           |           ВзаиморасчетыОстаткиИОбороты.СуммаКонечныйОстаток,
                           |           ВзаиморасчетыОстаткиИОбороты.ПериодДень КАК День,
                           |           МИНИМУМ(ВзаиморасчетыОстаткиИОбороты1.ПериодДень) КАК День1
                           |ПОМЕСТИТЬ Взаиморасчеты
                           |ИЗ
                           |           РегистрНакопления.Взаиморасчеты.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, Авто, , ) КАК ВзаиморасчетыОстаткиИОбороты
                           |                       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Взаиморасчеты.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, Авто, , ) КАК ВзаиморасчетыОстаткиИОбороты1
                           |                       ПО ВзаиморасчетыОстаткиИОбороты.Контрагент = ВзаиморасчетыОстаткиИОбороты1.Контрагент
                           |                                   И ВзаиморасчетыОстаткиИОбороты.ПериодДень < ВзаиморасчетыОстаткиИОбороты1.ПериодДень
                           |
                           |СГРУППИРОВАТЬ ПО
                           |           ВзаиморасчетыОстаткиИОбороты.Регистратор,
                           |           ВзаиморасчетыОстаткиИОбороты.Контрагент,
                           |           ВзаиморасчетыОстаткиИОбороты.СуммаКонечныйОстаток,
                           |           ВзаиморасчетыОстаткиИОбороты.ПериодДень
                           |;
                           |
                           |////////////////////////////////////////////////////////////////////////////////
                           |ВЫБРАТЬ
                           |           Взаиморасчеты.Контрагент,
                           |           СУММА(ВЫБОР
                           |                                   КОГДА Взаиморасчеты.СуммаКонечныйОстаток > 0
                           |                                              ТОГДА Взаиморасчеты.СуммаКонечныйОстаток * РАЗНОСТЬДАТ(Взаиморасчеты.День, Взаиморасчеты.День1, ДЕНЬ)
                           |                                   ИНАЧЕ 0
                           |                       КОНЕЦ) КАК Дебиторка,
                           |           СУММА(ВЫБОР
                           |                                   КОГДА Взаиморасчеты.СуммаКонечныйОстаток < 0
                           |                                              ТОГДА -Взаиморасчеты.СуммаКонечныйОстаток * РАЗНОСТЬДАТ(Взаиморасчеты.День, Взаиморасчеты.День1, ДЕНЬ)
                           |                                   ИНАЧЕ 0
                           |                       КОНЕЦ) КАК Кредит
                           |ИЗ
                           |           Взаиморасчеты КАК Взаиморасчеты
                           |
                           |СГРУППИРОВАТЬ ПО
                           |           Взаиморасчеты.Контрагент
                           |
                           |УПОРЯДОЧИТЬ ПО
                           |           Взаиморасчеты.Контрагент
                           |ИТОГИ ПО
                           |           ОБЩИЕ”;
     
                Запрос.УстановитьПараметр(“ДатаНачала”, Период.ДатаНачала);    
                Запрос.УстановитьПараметр(“ДатаОкончания”, Период.ДатаОкончания);  
                Результат = Запрос.Выполнить();
                ВыборкаОбщийИтог = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
     
                ВыборкаОбщийИтог.Следующий();                     // Общий итог
     
                Сообщить(“ИТОГ: Уровень дебиторки: ” + ВыборкаОбщийИтог.Дебиторка + “; уровень кредитов: ” + ВыборкаОбщийИтог.Кредит);
     
                ВыборкаДетальныеЗаписи = ВыборкаОбщийИтог.Выбрать();
     
                Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
                           Сообщить(“” + ВыборкаДетальныеЗаписи.Контрагент + ” уровень дебиторки: ” + ВыборкаДетальныеЗаписи.Дебиторка + “; уровень кредитов: ” + ВыборкаДетальныеЗаписи.Кредит);
                КонецЦикла;                                                
    КонецПроцедуры // УровеньДебиторкиСервер()
    </code>
     
     
     

  4. Просмотрел свой код, и увидел, что практически во всех таблицах (кроме ИтогДебеторка) для оптимизации условия ГДЕ, можно перенести в условия соединения таблиц.

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

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

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ИнтервалыНачКон.Период КАК ПериодНач,
    МИНИМУМ(ИнтервалыНачКон1.Период) КАК ПериодКон,
    ИнтервалыНачКон.Номенклатура
    ПОМЕСТИТЬ Интервалы
    ИЗ
    ИнтервалыНачКон КАК ИнтервалыНачКон
    ЛЕВОЕ СОЕДИНЕНИЕ ИнтервалыНачКон КАК ИнтервалыНачКон1
    ПО ИнтервалыНачКон.Период <= ИнтервалыНачКон1.Период
    И (ИнтервалыНачКон1.КонИнтервала)
    И ИнтервалыНачКон.Номенклатура = ИнтервалыНачКон1.Номенклатура
    ГДЕ
    ИнтервалыНачКон.НачИнтервала

    СГРУППИРОВАТЬ ПО
    ИнтервалыНачКон.Период,
    ИнтервалыНачКон.Номенклатура
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    СУММА(ЕСТЬNULL(ГрафикиРаботы.Значение, 0)) КАК КолВоДней,
    Интервалы.Номенклатура
    ПОМЕСТИТЬ КолВоРабДней
    ИЗ
    Интервалы КАК Интервалы
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикиРаботы КАК ГрафикиРаботы
    ПО (ГрафикиРаботы.Дата >= Интервалы.ПериодНач)
    И (ГрафикиРаботы.Дата <= Интервалы.ПериодКон)
    ГДЕ
    ГрафикиРаботы.ТипГрафика = &ТипГрафика

    СГРУППИРОВАТЬ ПО
    Интервалы.Номенклатура
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    КолВоРабДней.Номенклатура,
    ПродажиОбороты.КоличествоОборот,
    КолВоРабДней.КолВоДней,
    ПродажиОбороты.КоличествоОборот / КолВоРабДней.КолВоДней КАК СкоростьПродажи
    ИЗ
    КолВоРабДней КАК КолВоРабДней
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(&НачПериода, &КонПериода, , ) КАК ПродажиОбороты
    ПО КолВоРабДней.Номенклатура = ПродажиОбороты.Номенклатура
    Задача 2. Привожу пример только для уровня дебеторки (уровень кредиторки получается аналогично, а затем внешнее соедиение двух таблиц)
    ВЫБРАТЬ
    ВзаиморасчетыОстаткиИОбороты.Контрагент,
    ВзаиморасчетыОстаткиИОбороты.Период,
    ВЫБОР
    КОГДА ВзаиморасчетыОстаткиИОбороты.СуммаКонечныйОстаток > 0
    ТОГДА ВзаиморасчетыОстаткиИОбороты.СуммаКонечныйОстаток
    ИНАЧЕ 0
    КОНЕЦ КАК Дебеторка,
    ВЫБОР
    КОГДА ВзаиморасчетыОстаткиИОбороты.СуммаКонечныйОстаток < 0
    ТОГДА -ВзаиморасчетыОстаткиИОбороты.СуммаКонечныйОстаток
    ИНАЧЕ 0
    КОНЕЦ КАК Кредиторка
    ПОМЕСТИТЬ Взаиморасчеты
    ИЗ
    РегистрНакопления.Взаиморасчеты.ОстаткиИОбороты(&НачПериода, &КонПериода, День, ДвиженияИГраницыПериода, ) КАК ВзаиморасчетыОстаткиИОбороты
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    Взаиморасчеты.Контрагент,
    Взаиморасчеты.Период,
    Взаиморасчеты.Дебеторка
    ПОМЕСТИТЬ ТабДебеторка
    ИЗ
    Взаиморасчеты КАК Взаиморасчеты
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ТабДебеторка.Контрагент КАК Контрагент,
    ТабДебеторка.Период КАК ПериодНач,
    МИНИМУМ(ТабДебеторка1.Период) КАК ПериодКон,
    ТабДебеторка.Дебеторка
    ПОМЕСТИТЬ ИтогДебеторка
    ИЗ
    ТабДебеторка КАК ТабДебеторка
    ЛЕВОЕ СОЕДИНЕНИЕ ТабДебеторка КАК ТабДебеторка1
    ПО ТабДебеторка.Контрагент = ТабДебеторка1.Контрагент
    И ТабДебеторка.Период < ТабДебеторка1.Период
    ГДЕ
    ТабДебеторка1.Период <> ДАТАВРЕМЯ(1, 1, 1)
    И ТабДебеторка.Дебеторка > 0

    СГРУППИРОВАТЬ ПО
    ТабДебеторка.Контрагент,
    ТабДебеторка.Период,
    ТабДебеторка.Дебеторка
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ИтогДебеторка.Контрагент,
    СУММА(РАЗНОСТЬДАТ(ИтогДебеторка.ПериодНач, ИтогДебеторка.ПериодКон, ДЕНЬ) * ИтогДебеторка.Дебеторка) КАК УровеньДебеторки
    ИЗ
    ИтогДебеторка КАК ИтогДебеторка

    СГРУППИРОВАТЬ ПО
    ИтогДебеторка.Контрагент

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

  7. 1.Создал обработку 4 реквизита (2 даты, СправочникСсылка.ТипыГрафиков и справочникСсылка.Контрагент) и 2 кнопки (Запрос1,запрос2), 2 процедуры на клиенте, которые вызывают 2 серверных процедуры в которых и выполняется запрос.
    2.Запрос №1 деле по учебной базе. План реализации запроса1(более чем уверен, что очень неоптимально):
    2.1.Отбираю из регистар продаж всю номенклатуру и объёмы продаж (группировка по номенклатуре) и отправляю во временную таблицу Товары.
    2.2.Внутренним соединением Товары и регистр Остатки (+ для каждого из товары начало периода и конецпериода+1(2 допзапроса)) создаю временную таблицу ОтдедельныеДаты
    2.3.ОтдельныеДаты саму на себя (беру ОтдельныеДаты м Мин(ОтдельныеДаты1-1), группировка по ОтдельныеДаты) условие ОтдельныеДаты<Мин(ОтдельныеДаты1 создаю временную таблицу Периоды.
    2.4.Соединяю Периоды, Остатки и ГрафикиРабот – получаю по каждому периоду номенклатуру  и дней по гарфику с учётом остатка создаю временную таблицу ИтогоПоПериоду
    2.5.Группирую по номеклатуре временную таблицу ИтогоПоПериоду создаю временную таблицу ИтогоПоНоменклатуре
    2.6.Соединяю временную таблицы ИтогоПоНоменклатуре и Товары (беру из неё объём продаж) и получаю искомое!

    3.Т.к. никаких полноценных данных для задачи №2 в учебной базе не было – звял то что было по рукою (ничего проще упп не нашёл). Задача даже проще чем №1 и очень похожа. План реализации запроса2:
    3.1.Отбираю из регистра ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов всех контрагентов и складываю их во временную таблицу ПереченьКонтрагентов.
    3.2.Внутренним соединением Перечень контрагентов и регистр ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов (+ для каждого из контрагентов начало периода и конецпериода+1(двумя допзапросами котторые объединить все)) создаю временную таблицу ОтдедельныеДаты
    3.3.ОтдельныеДаты саму на себя (беру ОтдельныеДаты м Мин(ОтдельныеДаты1-1), группировка по ОтдельныеДаты и контрагенты) условие ОтдельныеДаты<Мин(ОтдельныеДаты1 создаю временную таблицу Периоды в разрезе каждого контрагента.
    3.4.Соединяю Периоды, и ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов  – получаю по каждому периоду контрагент, сальдона началопериода(дебет/кредит), длина периода в днях – складываю во временную таблицу ИтогиПоПериодам
    3.5.Группирую ИтогиПоПериодам в разрезе контрагентов и до кучи формирую общий итог.

    По итогам написания вижу, что до 3.1 из ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов нужно было выгрузить во временную таблицу все записи требуемого периода (только тем полям которые нам нужны а не вся та куча что в упп) и проиндексировать по контрагенту.

    Примечание1: естественно на каждом из этапов описаны только ключевые моенты без всех условий, связей и т.п..
    Примечание2: ДЗ одно из самых сложных за весь базовый и пройденый продвинутый, времени убито море, хотя после задачи №1 задача №2 прошла на ура.
    Есть несколько вопросов и одно пожелание:
    1.ни как не могу найти текстов запросов, что были анонсирвоаны в главе запросы.
    2.до сих пор не могу понять почему 1эснеки избегают букву “ё”.
    и пожаление: тема для некоторых (например, для меня) довольно сложная, может добавить типа для жедлающих ещё хоть с пяток задачек (вне ДЗ, исключительно для тех кто считает что нужно дополнительно потренироваться)?

    • Тексты запросов попытаюсь разыскать в ближайшее время.
      По поводу буквы “ё” не совсем понял, приведите пример.

      Доп. задачи по запросам пока не планировались. Старайтесь на работе любую выборку данных делать с помощью запроса – вот текущие доп. задачи :)

      • Про “ё”:  даже если провести глобальный поиск во всем модулях ну например в преславутой УПП то можно заметить что в названиях объектов, именах переменных, функций и т.п. буква “ё” не встречается, хотя по правилам правописания обязана там быть, например по русски правильно писать “Регламентированная отчётность” или “Расчёт” и ни  как по другому.

        • Интересный вопрос :)
          Может быть они заранее готовятся к отмене буквы “ё”? :)

          • Это ещё ну по крайней мере с 7.70.015 и сопуствующих типовых конф тянется… и где-то у Вас при работе с конфигуратором точно такое-же заметил – думал что-то такое многие знают и поинтересовался…

  8. Выполнил.
    Решение задачи 1:  В первую ВТ выгружаю номенклатуру из РН ПродажиОбороты за указанный период.
    Во второй ВТ получаю на каждый рабочий день дату остатков номенклатуры из РН. Для чего использую левое соединение РС ГрафикиРаботы к РН ОстаткиТоваровОстаткиИОбороты по условию Дата из РС >= Период из РН. На РН накладываю условие по номенклатуре из первой ВТ, периоду, периодичности (День). На РС – условие по периоду, типу графика и значению = 1. Выходные поля – дата из РС, период и номенклатура из РН. Группировка по дате, номенклатуре, Максимум(Период).
    В третьей ВТ получаю количество дней, когда товар был на складе, и количество проданной номенклатуры.
    Для этого применяю левое соединение второй ВТ с РН ОстаткиТоваровОстаткиИОбороты по номенклатуре и периоду, а также с РН ПродажиОбороты по номенклатуре и ВТ2.Дата=РН.Период.
    Признак того, что товар был в определенный день на складе – (ОстаткиТоваровОстаткиИОбороты. КоличествоКонечныйОстаток + ПродажиОбороты.КоличествоОборот)>0. 
    Далее группировка по номенклатуре с суммированием показателей. Следующим этапом вычисляется скорость продажи.
    Решение задачи 2:  Из задания по базовому курсу выдернул документ Выписка и РН Взаиморасчеты. Из ВзаиморасчетыОстаткиИОбороты за указанный период с периодичностью в день получаю Период, Контрагент, СуммаКонечныйОстаток и помещаю в ВТ. Далее левым соединением ее с самой собой по контрагенту и условию ВТ1.Период<ВТ2.Период получаю количество дней до следующей записи из регистра через МИНИМУМ(РАЗНОСТЬДАТ(ВТ1.Период, ВТ2.Период, ДЕНЬ)) КАК КолвоДней. Результат в виде полей из 1-й ВТ и КолвоДней сохраняю во 2-й ВТ. Далее вычисляется величина задолженности как КолвоДней*СуммаКонечныйОстаток и в зависимости от знака суммы конечного остатка заносится в колонку дебета или кредита. Группировка – по контрагенту + общие итоги.

  9. Задача № 1
    Порядок построения запроса я выбрал следующий сначала обращаясь к регистру Продаж я получал Товар, Количество продаж за период и здесь же остаток на начало периода.
    Второй запрос пакета заключался в выборе рабочих дней из регистра сведений Графики работы для заданного в параметре типа графика за заданный период.
    Третьим запросом пакета я получал декартово произведение Товаров и Дат, т.е. все комбинации Товаров и Дат плюс добавил поле остаток на начало периода из 1-го запроса по каждому товару (это понадобиться в дальнейшем).
    Четвертый запрос пакета предназначался для получения оборотов для каждого товара за каждую дату, этот запрос необходим для последующего расчета начального остатка Товара на каждую рабочую дату. Обращение в запросе производилось к физической таблице ОстаткиТоваров, при этом из нее выбирались записи период которых был меньше соответствующей даты из таблицы 3 запроса пакета, при этом поле Оборот рассчитывалось следующим образом если Вид движения в регистре расход, то количество добавлялось с минусом, иначе с плюсом. Результатом запроса получилась таблица с данными Товар, Дата, Оборот.
    Для правильного расчета количества дней которые товар находился на складе, наличие только не отрицательного начального остатка на начало соответствующей даты не является достаточным, поскольку товар может прийти и быть проданным в один день и начальный остаток на этот день, впрочем как и конечный остаток будет нулевым. А день должен быть посчитан. Для обработки данной ситуации создал 5-й запрос пакета, который присоединял к результату 3-его запроса записи физической таблицы Остатки товаров пи этом условием связи выступало условие вида
    ТоварыПоДням.Номенклатура = ОстаткиТоваров.Номенклатура И (ОстаткиТоваров.Период >= НАЧАЛОПЕРИОДА(ТоварыПоДням.Дата, ДЕНЬ)) И (ОстаткиТоваров.Период <= КОНЕЦПЕРИОДА(ТоварыПоДням.Дата, ДЕНЬ)) для отбора только записей за один день. При этом расчетное поле запроса заполнялось только если вид движения регистра был приход.
    Шестой запрос пакета объединял результаты 4 и 5 запроса, рассчитывая начальный остаток для каждой даты  (добавляя к обороту из 4 запроса остаток на начало периода из 3 запроса) и оставляя только те записи, у которых либо начальный остаток больше нуля либо был приход в этот день.
    Седьмой запрос пакета обрабатывал результаты 6 запроса, подсчитывая количество строк по каждой номенклатуре. Выходом этого запроса была таблица Товар, КолДней.
    Последний запрос пакета тривиален, используя результаты 1-го запроса пакета и 7-го он рассчитывал скорость продажи для каждого товара.
    Чувствую, что перемудрил, можно было решить проще, но переделывать не стал, для тренировки пойдет.
    Задача 2
    Создал регистр накопления Взаиморасчеты типа Остатки с одним измерением Контрагент и одним ресурсом Сумма и с помощью конструкторов обеспечил проведение по нему документов Реализация и Поступление для построения запроса достаточно.
    Схема запроса получилась следующая: обращаясь к виртуальной таблице ВзаиморасчетыОстаткиИОбороты получал долг по каждому документу. Затем для определения  даты следующей операции, чтобы в последствии посчитать разность дат, использовал левое соединение таблицы ВзаиморасчетыОстаткиИОбороты с ней же самой. При этом в качестве условия связи указал, что Период присоединяемой таблицы должен быть больше основной, а затем с помощью агрегатной функции Минимум находил дату ближайшей к текущей строке следующей операции.  В этом же запросе разбивал сумму долга по следующим правилам если ВзаиморасчетыОстаткиИОбороты.СуммаКонечныйОстаток > 0, то это УровеньКредитов, иначе УровеньДебиторки. Таким образом, результатом запроса была таблица следующей структуры: Период, Контрагент, УровеньКредитов, УровеньДебиторки, ДатаСледующейОперации.
    Второй запрос  пакета был тривиален. С помощью функции языка запросов РАЗНОСТЬДАТ получал количество дней между двумя датами, которую умножал на УровеньКредитов и УровеньДебиторки с последующей группировкой данных по контрагенту и суммированием значения уровней.
    Для получения итоговых показателей по всей компании использовал Общие итоги.

  10. ДЗ выполнено. Как описать решение, чтобы было понятно – не представляю, но попробую. )))

    Решение 1 задачи:
    Многовато у меня временных таблиц получилось. 5 штук.
    В первой ВТ объединением двух запросов выбираю все дни, когда были движения по РН Остатки товаров. Первый запрос – по входящим остаткам  номенклатуры, второй по движениям за месяц. Если вид движения Расход, то остаток выбирается со знаком минус.
    Во второй ВТ соединяю данные из РС ГрафикиРаботы с номенклатурой из первой таблицы. Накладываю фильтры по датам графика, а также по типу графика.
    В третьей ВТ ко второй ВТ левым соединением по периоду добавляю первую ВТ, для того, чтобы получить для связки день графика + номенклатура
    количество движения товара. Если движения не было, то количество равно нулю.
    В четвертой ВТ я выбираю третью ВТ и к ней левым соединением добавляю ту же самую третью ВТ по условию, что Дата ВТ3_1 > Дата ВТ3_2.  Получается, что для каждой связки дата+товар собираются все предыдущие движения. Если сделать группировку по дате и номенклатуре, то получим остаток на каждый день (т.к. поступления товара со знаком “+”, а реализация со знаком “-“). Все это пакую во вложенный запрос (хотя применять вложенные запросы не очень хорошо) и выбираю только ту номенклатуру, у которой остаток по количеству не нулевой. Для этих записей добавляю новое поле ЕстьТоварНаСкладе со значением 1.
    В пятой ВТ выполняю запрос к графику, накладываю условие по периоду, типу графика и значение=1 (чтобы отсечь выходные). Внутренним соединением по дате добавляю четвертую ВТ, и группирую  по номенклатуре поле  ЕстьТоварНаСкладе, получая таким образом количество дней, когда товар был на складе.
    Ну, и наконец в последнем запросе выбираю количество реализованного товара из оборотного РН Продажи по каждой номенклатуре и соединяю левым соединением с пятой ВТ. Остается только для каждой номенклатуры разделить количество реализованного товара на количество дней, когда этот товар был в наличии на складе.

    Решение 2й задачи:
    Добавил оборотный регистр для учета взаиморасчетов. Дебиторку отражал со знаком “+”, кредиторку со знаком “-“. Внес изменения в модули  проведения документов Поступление и реализация товаров и услуг. Добавил два простеньких документа ПоступлениеДенежныхСредств и
    СписаниеДенежныхСредств для того, чтобы была возможность отразить предоплату поставщику или аванс от покупателя. Сформировал движения для проведения тестов.
    В первой ВТ выбираю все даты анализируемого периода из РС Графики работы для пятидневки (хотя тип графика не важен, берутся все дни за период) и левым соединением по дате добавляю движения за период из физической таблицы Взаиморасчеты, получая движения по констрагентам в разрезе дат.
    Во второй ВТ выбираю записи из первой ВТ и объединяю их с записами той же ВТ по условию: ДатаДень ВТ1_1 < ДатаДень ВТ1_2, после чего группирую (по дате из ВТ1_1 и контрагенту) полученную дату из ВТ1_2 используя функцию МИНИМУМ.
    В третьей ВТ выполняю запрос к ВТ2 и левым соединением по ВТ2.ДатаСледИзменения = ВТ1.Дата добавляю данные по суммам на каждый день.
    Наконец в последнем запросе пакета Выбираю записи из ВТ3, вычисляю при помощи РАЗНОСТЬДАТ количество дней между датой и датой следующего изменения и умножаю на суммы, после чего группирую данные по контрагентам за период.

  11. Разбор 1-ой задачи (реализована в виде отчета на СКД):
     
    Пошаговый алгоритм:

    1)  Получаем данные о продажах и помещаем их в ВТПродажи (также используется в качестве параметра в условии на вхождение номенклатуры в выборку из данной ВТ при получении остатков)
    <CODE>
    ВЫБРАТЬ
    ПродажиОбороты.Номенклатура КАК Номенклатура,
    СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоПродано
    ПОМЕСТИТЬ ВТПродажи
    ИЗ
    РегистрНакопления.Продажи.Обороты(&НачДата, &КонДата, , (НЕ Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))) КАК ПродажиОбороты
     
    СГРУППИРОВАТЬ ПО
    ПродажиОбороты.Номенклатура
     
    ИНДЕКСИРОВАТЬ ПО
    Номенклатура
    ; </CODE>
     
    2)  Получаем данные об остатках и оборотах  проданной номенклатуры и помещаем их в ВТОстатки (т.е. на этом этапе пока получаем остатки на даты, в которых были движения, а следующим шагом будем связывать эту таблицу саму с собой со смещением дат, для получения уже периодов, в течение которых остатки не менялись)
    <CODE>
    ВЫБРАТЬ
    ОстаткиТоваровОстаткиИОбороты.Период КАК Дата,
    ОстаткиТоваровОстаткиИОбороты.Номенклатура КАК Номенклатура,
    ОстаткиТоваровОстаткиИОбороты.КоличествоКонечныйОстаток КАК Количество,
    ВЫБОР
    КОГДА ОстаткиТоваровОстаткиИОбороты.КоличествоПриход = 0
    ТОГДА ОстаткиТоваровОстаткиИОбороты.КоличествоРасход
    ИНАЧЕ ОстаткиТоваровОстаткиИОбороты.КоличествоПриход
    КОНЕЦ КАК Оборот
    ПОМЕСТИТЬ ВТОстатки
    ИЗ
    РегистрНакопления.ОстаткиТоваров.ОстаткиИОбороты(
    &НачДата,
    &КонДата,
    День,
    ДвиженияИГраницыПериода,
    Номенклатура В
    (ВЫБРАТЬ
    ВТПродажи.Номенклатура
    ИЗ
    ВТПродажи КАК ВТПродажи)) КАК ОстаткиТоваровОстаткиИОбороты
     
    ИНДЕКСИРОВАТЬ ПО
    Номенклатура
    ; </CODE>
     
    3)  Получаем данные о периодах изменений остатков номенклатуры и помещаем их в ВТОстаткиПоПериодам (т.е. мы берем первый период из первой таблицы и связываем его с ближайшим следующим периодом из второй таблицы, данный прием подсмотрел на мисте http://www.kb.mista.ru/article.php?id=579)
    <CODE>
    ВЫБРАТЬ
    ВТОстатки1.Дата КАК ДатаС,
    МИНИМУМ(ВЫБОР
    КОГДА ВТОстатки2.Дата ЕСТЬ NULL
    ТОГДА КОНЕЦПЕРИОДА(&КонДата, ДЕНЬ)
    ИНАЧЕ КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(ВТОстатки2.Дата, ДЕНЬ, -1), ДЕНЬ)
    КОНЕЦ) КАК ДатаПо,
    ВТОстатки1.Номенклатура,
    ВТОстатки1.Количество,
    ВТОстатки1.Оборот
    ПОМЕСТИТЬ ВТОстаткиПоПериодам
    ИЗ
    ВТОстатки КАК ВТОстатки1
    ЛЕВОЕ СОЕДИНЕНИЕ ВТОстатки КАК ВТОстатки2
    ПО ВТОстатки1.Дата < ВТОстатки2.Дата
    И ВТОстатки1.Номенклатура = ВТОстатки2.Номенклатура
     
    СГРУППИРОВАТЬ ПО
    ВТОстатки1.Дата,
    ВТОстатки1.Номенклатура,
    ВТОстатки1.Количество,
    ВТОстатки1.Оборот
    ; </CODE>
     
    4)  Получаем данные об остатках номенклатуры на каждую рабочую дату графика и помещаем их в ВТОстаткиПоДатам (на этом этапе мы связываем данные по периодам с графиком работы (ГрафикиРаботы.Дата МЕЖДУ ВТОстаткиПоПериодам.ДатаС И ВТОстаткиПоПериодам.ДатаПо) и таким образом получаем остатки уже на каждую рабочую (т.к. накладываем условие ГрафикиРаботы.Значение > 0) дату. Также мы проверяем, был ли оборот (берем из регистра отдельно приход или расход, т.к. они могут быть равны и оборот соответственно будет равным 0, что нас не устраивает) за указанную дату, и если был – то считаем, что остатки за этот день нужно считать. Это необходимо учитывать, т.к. за один день весь пришедший товар мог быть продан и остаток в целом по дате будет равен 0)
    <CODE>
    ВЫБРАТЬ
    ГрафикиРаботы.Дата,
    ВТОстаткиПоПериодам.Номенклатура КАК Номенклатура,
    ВЫБОР
    КОГДА ВТОстаткиПоПериодам.Количество > 0
    ТОГДА 1
    ИНАЧЕ ВЫБОР
    КОГДА ВТОстаткиПоПериодам.Оборот = 0
    ТОГДА 0
    ИНАЧЕ ВЫБОР
    КОГДА НАЧАЛОПЕРИОДА(ГрафикиРаботы.Дата, ДЕНЬ) = НАЧАЛОПЕРИОДА(ВТОстаткиПоПериодам.ДатаС, ДЕНЬ)
    ТОГДА 1
    ИНАЧЕ 0
    КОНЕЦ
    КОНЕЦ
    КОНЕЦ КАК БылОстаток
    ПОМЕСТИТЬ ВТОстаткиПоДатам
    ИЗ
    РегистрСведений.ГрафикиРаботы КАК ГрафикиРаботы
    ЛЕВОЕ СОЕДИНЕНИЕ ВТОстаткиПоПериодам КАК ВТОстаткиПоПериодам
    ПО (ГрафикиРаботы.Дата МЕЖДУ ВТОстаткиПоПериодам.ДатаС И ВТОстаткиПоПериодам.ДатаПо)
    ГДЕ
    ГрафикиРаботы.Дата МЕЖДУ &НачДата И &КонДата
    И ГрафикиРаботы.Значение > 0
    И ГрафикиРаботы.ТипГрафика = &ТипГрафика
     
    ИНДЕКСИРОВАТЬ ПО
    Номенклатура
    ; </CODE>
     
    5)  Заключительный этап. Выбираем данные о продажах по номенклатуре и связываем их с данными по остаткам, вычисляем показатель «Скорость продажи» (для получения количества дней на остатках каждой номенклатуры производим группировку во вложенном запросе к таблице ВТОстаткиПоДатам)
    </CODE>
    ВЫБРАТЬ
    ВТПродажи.Номенклатура,
    ВТПродажи.КоличествоПродано / ДнейНаОстатках.ОстатокВсегоДней КАК СоростьПродажи,
    ВТПродажи.КоличествоПродано,
    ДнейНаОстатках.ОстатокВсегоДней
    ИЗ
    ВТПродажи КАК ВТПродажи
    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    ВТОстаткиПоДатам.Номенклатура КАК Номенклатура,
    СУММА(ВТОстаткиПоДатам.БылОстаток) КАК ОстатокВсегоДней
    ИЗ
    ВТОстаткиПоДатам КАК ВТОстаткиПоДатам
     
    СГРУППИРОВАТЬ ПО
    ВТОстаткиПоДатам.Номенклатура) КАК ДнейНаОстатках
    ПО ВТПродажи.Номенклатура = ДнейНаОстатках.Номенклатура
    </CODE>
    В самом отчете настраиваем быстрый доступ к параметрам (Начало периода, Конец периода, Тип графика) и вывод данных в таблицу отчета.

    • Решение 2-ой задачи:
      Ну тут на мой взгляд все оказалось несколько проще:
      1) Получаем данные из регистра Взаиморасчеты и загоняем их в ВТВзаиморасчеты, индексируем по контрагенту и по периоду.
      2) Соединяем  ВТВзаиморасчеты саму с собой со смещением периодов как в первой задаче. Получаем ВТВзаиморасчетыПоПериодам с полями ДатаС, ДатаПо, Контрагент, Сумма (конечное сальдо, если минусовое – нам должны, если плюсовое – мы должны).
      3) Получаем разность дат между ДатаС и ДатаПо, это будет длительность кредита, умножаем этот показатель на сумму и получаем уровень кредита.
      4) Добавляем поле УровеньКредита в ресурсы СКД (чтобы автоматом считались итоги)
      5) Настраиваем отборы по периоду и вывод таблицы в отчет.

  12. MashkaRomashkina 09.03.2011 в 20:30

    Задачу 1 решила след. образом:
    1-я ВТ – соединение регистров Продажи и Графики работ. На выходе получаю связку дата-номенклатура, где дата – это все рабочие даты за период и номенклатура – все позиции, которые продавались.
    ДАТА  | НОМЕНКЛАТУРА
    Т.к. остатки на каждый день получить не удалось – выводятся только даты, в которых были изменения, то 2-я ВТ – соединение 1-й ВТ и регистра ОстаткиТоваров.ОстаткиИОбороты (периодичность день) по номенклатуре и по дате. Период из регистров остатки<=Дата из 1-й ВТ.  И беру период, который находится ближе всего к нужной дате. Т.е МАКСИМУМ(ОстаткиТоваровОстаткиИОбороты.ПериодДень).  Т.о. к 1-й таблице добавляю колонку ДатаОстатков. Например, если на 22 декабря движения не было, то ближайшая дата, на которую получаю остатки – это 20 декабря.
    ДАТА  | НОМЕНКЛАТУРА | ДАТА ОСТАТКОВ
    В 3-ей ВТ уже получаю остатки на конец дня на все даты. Есть остаток – 1, нет – 0.
    ДАТА  | НОМЕНКЛАТУРА | Признак_БылОстатокНаКонецДня
    В 4-ой объединяю данные из 3-ей ВТ и РегистрН.Продажи.Обороты.
    Получаю продажи за день и признак, была ли продажа. Он нужен для того, чтобы учесть те дни, в которые была продажа и остаток на конец дня был 0. Раз продажа была, значит этот день тоже добавляем в дни, в кот. товар был на складе.
    ДАТА  | НОМЕНКЛАТУРА |Признак_БылОстатокВТеченииДня | КВОПРОДАЖ
    Заключительный этап – Сумма(КвоПродаж)/Сумма(Признак_БылОстатокВТеченииДня)

    • MashkaRomashkina 10.03.2011 в 12:51

      Решение задачи 2:
      Создала остаточный регистр накопления Взаиморасчеты с измерением Контрагент и ресурсом Сумма; простейший документ, который делает движения по этому этому регистру.
      В 1-й ВТ работаю с таблицей Взаиморасчеты.ОстаткиИОбороты с периодичностью по дням. Получаю таблицу с датами, в которых происходили измения по взаиморасчетам.
      ДАТА | КОНТРАГЕНТ | СУММАКОНОСТАТКА
      Во 2-ой ВТ мне надо получить в каждой строке дату следующего ближайшего изменения. Соединяю 1-ую таблицу и такую же таблицу по взаиморасчетом с условием, что День во второй таблице >День в первой таблице и День из второй таблицы – минимальный.
      ДАТА | ДАТАСЛЕДУЮЩАЯ|КОНТРАГЕНТ | СУММАКОНОСТАТКА
      В 3-ей ВТ вычисляю количество дней с помощью функции Разность дат, а также дебет и кредит определяю по разным колонкам в зависимости от знака СуммыКонОстатка.
      КОНТРАГЕНТ | ДНЕЙ| ДЕБЕТ| КРЕДИТ
      Затем вычисляю уровень дебиторки и кредиторки, вывожу общие итоги и итоги по контрагентам.

  13. А для первого блока можно выложить конфигурацию с разбираемыми задачами в видоуроках? В конфигурации с примерами вроде нет кода по запросам, которые разбираются в видеоуроках

    • Вы использовали конфигурацию с этой страницы:
      https://mg.spec8.ru/1cdevadv-block1/
      ?
      Там ведь есть документ “Реализация товаров и услуг”.

      • странно я первый блок не видел, что выложили и в темах продвинутого курса его нет.
         

        • Проблема понятна, спасибо за информацию.