Заказы на доработку 1С (сервис удаленной работы)

Хранилище

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

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Отчет по валовой прибыли по типу цены , Конфигурация УТ 2.3 для Украины          
Fabri Подменю пользователя
сообщение 22.04.14, 20:24
Сообщение #1

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 188
Спасибо сказали: 55 раз
Рейтинг: 0

Ситуация такая. Очень много товара продалось в минус и соответственно списание товаров по партиям и запись в регистр накопления ПродажиСебестоимость не произошло.
Для исправления ситуации создал новый отчет - по типу цены. Идея такова - берем все данные с регистра накопления - Продажи, для каждой номенклатуры получаем цену закупки на тот момент времени. ЦенаПродажи - ЦенаЗакупки = Чистая прибыль.
Есть табличная часть Товары с реквизитами - Номенклатура, Количество, СуммаПродажи, Себестоимость, ЧистаяПрибыль.

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

        
    Запрос.УстановитьПараметр("ДатаНач", НачалоДня(ДатаНач));
    Запрос.УстановитьПараметр("ДатаКон", КонецДня(ДатаКон));
    Запрос.УстановитьПараметр("ТипЦен", ТипЦеныСебестоимости);

    Товары.Загрузить(Запрос.Выполнить().Выгрузить());
    
    Товары.Свернуть("Номенклатура","Количество,СуммаПродажи,Себестоимость,ЧистаяПрибыль");


Проблема в том что себестоимость, т.е. закупочную цену получаем не за тот момент времени когда продавался товар, а просто последнюю цену и естественно часто получаем что закупка больше чем продажа.
Ставил в запросе - ЛЕВОЕ СОЕДИНЕНИЕ - не помогло.
Дописывал
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
|        ПО Продажи.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура И Продажи.Период = ЦеныНоменклатурыСрезПоследних.Период

Но так вообще ничего не выводит.
Подскажите как правильно сформировать данный запрос. Спасибо.

Сообщение отредактировал Fabri - 22.04.14, 20:27

Vofka Подменю пользователя
сообщение 22.04.14, 20:34
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4519 раз
Рейтинг: 3641.2

http://pro1c.org.ua/index.php?showtopic=6419

Fabri Подменю пользователя
сообщение 06.05.14, 12:09
Сообщение #3

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 188
Спасибо сказали: 55 раз
Рейтинг: 0

Никак руки не доходили продолжить. Решил не брать с регистра ЦеныНоменклатуры, так как не для всей номенклатуры была указанна закупочная цена, а с регистра накопления ПартииТоваровНаСкладах, так как все оприходования, поступления и т.д. записываются в данный регистр.

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

    Запрос.УстановитьПараметр("КодОперации", КодОперации);
      Запрос.УстановитьПараметр("ДатаНач", НачалоДня(ДатаНач));
    Запрос.УстановитьПараметр("ДатаКон", КонецДня(ДатаКон));
    
   Товары.Загрузить(Запрос.Выполнить().Выгрузить());


Проблема в том что выводятся дубли записей, по 3-4 записи одной той же номенклатуры за один и тот же период.
Проблема видимо в строке
И Продажи.Период >= ПартииТоваровНаСкладах.Период
, но как записать чтобы выбиралась только одна первая по дате запись из регистра ПартииТоваровНаСкладах?

logist Подменю пользователя
сообщение 06.05.14, 12:12
Сообщение #4

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(Fabri @ 06.05.14, 12:09) *
но как записать чтобы выбиралась только одна первая по дате запись из регистра ПартииТоваровНаСкладах?

Вложенный запрос.


Signature
Личные бесплатные консультации не даю, для этого есть форум!

sava1 Подменю пользователя
сообщение 06.05.14, 12:24
Сообщение #5

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

Когда-то писал:

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


Сообщение отредактировал sava1 - 06.05.14, 12:36

Спасибо сказали: Fabri,

Fabri Подменю пользователя
сообщение 06.05.14, 13:00
Сообщение #6

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 188
Спасибо сказали: 55 раз
Рейтинг: 0

Можете подсказать на данном примере как создать вложенный запрос, а то ещё не сталкивался с таким, а по манам не очень понятно, особенно когда спешишь sad.gif
Буду очень благодарен.

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


Сообщение отредактировал Fabri - 06.05.14, 12:31

Ardi Подменю пользователя
сообщение 06.05.14, 14:02
Сообщение #7

Живет на форуме
***********
Гений телепатии и социального моделирования
Группа: Пользователи
Сообщений: 4121
Из: Киев
Спасибо сказали: 957 раз
Рейтинг: 0

Пакетные запросы+Вложенные запросы
Короткое видео:


Длинное видео:


Сообщение отредактировал Vofka - 06.05.14, 14:47


Signature
Услуги 1С программиста 8.2, 7.7 (Плохо, дорого, очередь). Киев.

Спасибо сказали: Fabri,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 19.04.24, 3:59
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!