Анализ продаж от закупочных цен ТиС 9.2 (7.7)

В стандартный анализ продаж добавлена возможность заменять себестоимость товаров на значения цен любого типа.

Это позволяет получить значения прибыли, приближенные к реальным в случае плохого состояния регистра «Партии наличие» и, как следствие, себестоимости товаров в отчёте. А также можно оценить отклонения от базовой цены (например, розничной или оптовой), то есть сделанные скидки и/или дополнительные наценки.

 

Кратко поясню реализованный механизм:

На форму добавляется реквизит ВыбТипЦен.

Добавляется функция вычисления по типу цены:

Функция ПоТипуЦен(Номенклатура, Количество, ТекДок)
Цена = глПолучитьЦену(Номенклатура, ВыбТипЦен, ТекДок.ДатаДок, Номенклатура.БазоваяЕдиница, Константа.ВалютаУпрУчета);
Возврат Цена * Количество;
КонецФункции

 

В запросе отчета заменяются функции вычисления сумм стоимости:

Если ВыбТипЦен.Выбран() = 0 Тогда // стандартное вычисление
ТекстЗапроса = ТекстЗапроса + "
|Функция СуммаСебест      = Сумма(Себест);
|Функция СуммаСебестВ     = Сумма(СебестВ);";
Иначе // расчёт по типу цены
ТекстЗапроса = ТекстЗапроса + "
|ТекДок     = Регистр.Продажи.ТекущийДокумент;
|Функция СуммаСебест      = Сумма(ПоТипуЦен(Номенклатура, Количество, ТекДок));
|Функция СуммаСебестВ     = Сумма(ПоТипуЦен(Номенклатура, КоличествоВ, ТекДок));";
КонецЕсли;

 

Подобным образом можно выполнять массу полезных вычислений в запросах, недостаток, пожалуй, только один: при использовании внешних функций в запросе сильно возрастает время его выполнения.

14 Comments

  1. Tatar_Ed

    Полезная вещь. будем пробовать. автору спасибо. Особая благодарность за описание процесса реализации.

    Reply
  2. Tatar_Ed

    выдает ошибку.

    //*******

    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда

    {Отчет.АнализПродаж.Форма.Модуль(511)}: Функция СуммаСебест = Сумма(ПоТипуЦен(Номенклатура, Количество <<?>> , ТекДок));

    Запрос[13] : Ошибка в выражении ‘Количество’

    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда

    {Отчет.АнализПродаж.Форма.Модуль(511)}: Функция СуммаСебестВ = Сумма(ПоТипуЦен(Номенклатура, КоличествоВ <<?>> , ТекДок));

    Запрос[14] : Ошибка в выражении ‘КоличествоВ’

    Reply
  3. Yury1001

    (2) Tatar_Ed, значит у вас не торговля и склад 9.2 для России

    Reply
  4. Tatar_Ed

    (3) уверен на все 100% у меня торговля и склад 9.2 и точно для России.

    брал не готовый «Анализ», а пытаюсь сделать самостоятельно, по Вашей инструкции. Ну видать напутал что-то

    Reply
  5. Yury1001

    (4) Tatar_Ed, тогда в вашем отчете не хватает строки

    КоличествоВ = Регистр.Продажи.КоличествоВ;

    Reply
  6. Tatar_Ed

    (5) Спасибо, буду пробовать.

    Reply
  7. Tatar_Ed

    теперь такая ошибка

    КОЛИЧЕСТВО<<?>>

    Переменная не определена (КОЛИЧЕСТВО)

    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда

    {Отчет.АнализПродаж.Форма.Модуль(517)}: Функция СуммаСебест = Сумма(ПоТипуЦен(Номенклатура, Количество <<?>> , ТекДок));

    Запрос[13] : Ошибка в выражении ‘Количество’

    ((((((((((((

    Reply
  8. Tatar_Ed

    КОЛИЧЕСТВО<<?>>

    Переменная не определена (КОЛИЧЕСТВО)

    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда

    {Отчет.АнализПродаж.Форма.Модуль(517)}: Функция СуммаСебест = Сумма(ПоТипуЦен(Номенклатура, Количество <<?>> , ТекДок));

    Запрос[13] : Ошибка в выражении ‘Количество’

    Reply
  9. Tatar_Ed

    //********

    КОЛИЧЕСТВО<<?>>

    Переменная не определена (КОЛИЧЕСТВО)

    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда

    {Отчет.АнализПродаж.Форма.Модуль(517)}: Функция СуммаСебест = Сумма(ПоТипуЦен(Номенклатура, Количество <<?>> , ТекДок));

    Запрос[13] : Ошибка в выражении ‘Количество’

    Reply
  10. Tatar_Ed

    (5) Есть какие нибудь мысли?

    Reply
  11. Yury1001

    (10) Tatar_Ed, надо обработку и базу, а так никто не скажет, ну хотя бы скриншот.

    Reply
  12. Tatar_Ed

    (11) а скриншот чего? Кода или ошибки?

    Reply
  13. Yury1001

    (12) Tatar_Ed, ошибки

    Reply
  14. anna3388

    спасибо…даже в наше время оказалось актуальным и работает)))

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *