helpf.pro
Регистрация

v8.3: Создание отчета Оценка валовой прибыли по документам. для УТ 11.1

Taekun
25.06.2014 18:36Прочитано: 3120

Доброе время суток. Уважаемые знатоки возникла задача в УТ 11.1 реализовать вот такой вот отчет: 

картинка (внешний вид отчета)

я не сильно силен в запросах и отчетах (обычно я в своей практике стараюсь их обходить) но тут возникла острая потребность, и мне нужен ваш совет: как лучше это реализовать. Ход нубских мыслей: Так как в базе не настроена себестоимость. (ну не надо им было) Себестоимость берется из Документов поступленияТоваровУслуг.Соответственно мне нужно два регистра накопления.

- СебестоимостьИВыручка

- Закупки

Пока вот что у меня получилось: ocvalprib.erf мне нужен совет с логикой правильно ли я рассуждаю в построении отчета или нет. (ну в смысле данные формирую верно или где то можно оптимизировать) ? Заранее благодарен. (сильно не пинать за нубство).

Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
26.06.2014 03:05Ответ № 1

 А почему не хотите изменить использовать штатный механизм себестоимость?

Taekun
26.06.2014 10:27Ответ № 2

Во первых многое в конфе изменено в плане документов и прочего. Не тронуты разве что регистры. А во вторых когда я попытался объяснить мне было сказано что не нужно этого! Так что приходиться работать с тем что имеем. 

Taekun
27.06.2014 22:21Ответ № 3

Видимо помощь в данном вопросе на данном ресурсе мне не дождаться.

DJ_Serega
28.06.2014 20:10Ответ № 4

У меня обработка не качается.

Taekun
29.06.2014 22:00Ответ № 5
Код 1C v 8.3
 Странно файл пропал. Хотя по началу работало.Вообщем вот по пунктам: берем регистр накопления Закупки и формируем временную таблицу: ВЫБРАТЬ
Закупки.Период,
Закупки.Регистратор КАК Документ,
Закупки.Организация,
Закупки.Менеджер,
Закупки.АналитикаУчетаНоменклатуры КАК Номенклатура,
Закупки.Склад,
Закупки.Количество,
Закупки.Сумма,
Закупки.Стоимость,
Закупки.СуммаДопРасходов,
Закупки.СуммаВВалютеДокумента,
ВЫРАЗИТЬ(Закупки.Стоимость / Закупки.Количество КАК ЧИСЛО(15, 2)) КАК СебестоимостьЕденицы
ПОМЕСТИТЬ РеестрСебестоимостиПоНоменклатуре
ИЗ
РегистрНакопления.Закупки КАК Закупки

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


Теперь осталось сделать связь по периоду и номеклатуре, условие по периоду Но почему то не срабатывает.
DJ_Serega
29.06.2014 23:55Ответ № 6

По периоду (возможно) не срабатывает, так как нужно совпадение до секунды. Лучше брать "НачалоПериода(ТвояДата, День). Но и так могут данные не совпасть. Поэтому нужно проверять на Null.

Taekun
30.06.2014 07:46Ответ № 7

Немного переделал в итоге получается что для начала нужно сформировать Список номенклатуры по закупкам.Своего рода срезпоследних.

Только в СКД он не срабатывает: 

Код 1C v 8.3
 ВЫБРАТЬ   
Код 1C v 8.3
 ВложенныйЗапрос.Номенклатура,   
Код 1C v 8.3
 Закупки.Количество,   
Код 1C v 8.3
 ВЫБОР   
Код 1C v 8.3
 КОГДА Закупки.Количество = 0   
Код 1C v 8.3
 ТОГДА 0   
Код 1C v 8.3
 ИНАЧЕ ВЫРАЗИТЬ(Закупки.Стоимость / Закупки.Количество КАК ЧИСЛО(15, 2))   
Код 1C v 8.3
 КОНЕЦ КАК Цена,   
Код 1C v 8.3
 ВложенныйЗапрос.Период КАК Период,   
Код 1C v 8.3
 Закупки.Стоимость,   
Код 1C v 8.3
 Закупки.СуммаДопРасходов,   
Код 1C v 8.3
 Закупки.СуммаВВалютеДокумента   
Код 1C v 8.3
 ИЗ   
Код 1C v 8.3
 (ВЫБРАТЬ   
Код 1C v 8.3
 Закупки.АналитикаУчетаНоменклатуры КАК Номенклатура,   
Код 1C v 8.3
 МАКСИМУМ(Закупки.Период) КАК Период   
Код 1C v 8.3
 ИЗ   
Код 1C v 8.3
 РегистрНакопления.Закупки КАК Закупки   
Код 1C v 8.3
 СГРУППИРОВАТЬ ПО   
Код 1C v 8.3
 Закупки.АналитикаУчетаНоменклатуры) КАК ВложенныйЗапрос   
Код 1C v 8.3
 ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Закупки КАК Закупки   
Код 1C v 8.3
 ПО ВложенныйЗапрос.Период = Закупки.Период   
Код 1C v 8.3
 И ВложенныйЗапрос.Номенклатура = Закупки.АналитикаУчетаНоменклатуры   
Код 1C v 8.3
 СГРУППИРОВАТЬ ПО   
Код 1C v 8.3
 ВложенныйЗапрос.Номенклатура,   
Код 1C v 8.3
 Закупки.Количество,   
Код 1C v 8.3
 Закупки.Стоимость,   
Код 1C v 8.3
 Закупки.СуммаДопРасходов,   
Код 1C v 8.3
 Закупки.СуммаВВалютеДокумента,   
Код 1C v 8.3
 ВложенныйЗапрос.Период   

Но он мне все равно дубли кидает в ответ. Хотя стоит МАКСИМУМ.

E_Migachev
30.06.2014 12:15Ответ № 8

так возьми просто с регистра закупок или поступление на склад список последней номенклатуры, для чего по периоду отбираешь?

Taekun
30.06.2014 12:39Ответ № 9

Мне нужно сформировать таблицу в которой будет Номенклатура ее цена (цена должна быть с последнего поступления) Вот я и делаю отбор по периоду что бы он был как можно ближе к дате формирования запроса. Или я ошибаюсь?

E_Migachev
30.06.2014 13:48Ответ № 10

Логика такова:

1. выбираешь в одну таблицу всю номенклатуру, цену и дату документа

2. в другую из первой только номенклатура и дату

3. далее соединяешь по макс периоду

примеры

Код 1C v 8.х
 ВЫБРАТЬ
ВложенныйЗапрос.Номенклатура,
СУММА(Закупки.Стоимость) / СУММА(Закупки.Количество) КАК Цена
ИЗ
(ВЫБРАТЬ
ВложенныйЗапрос.Номенклатура КАК Номенклатура,
МАКСИМУМ(Закупки.Регистратор) КАК Регистратор
ИЗ
(ВЫБРАТЬ
Закупки.Номенклатура КАК Номенклатура,
МАКСИМУМ(Закупки.Период) КАК Период
ИЗ
РегистрНакопления.Закупки КАК Закупки

СГРУППИРОВАТЬ ПО
Закупки.Номенклатура) КАК ВложенныйЗапрос
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Закупки КАК Закупки
ПО ВложенныйЗапрос.Номенклатура = Закупки.Номенклатура
И ВложенныйЗапрос.Период = Закупки.Период

СГРУППИРОВАТЬ ПО
ВложенныйЗапрос.Номенклатура) КАК ВложенныйЗапрос
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Закупки КАК Закупки
ПО ВложенныйЗапрос.Номенклатура = Закупки.Номенклатура
И ВложенныйЗапрос.Регистратор = Закупки.Регистратор

СГРУППИРОВАТЬ ПО
ВложенныйЗапрос.Номенклатура
Код 1C v 8.х
 ВЫБРАТЬ
    ПоступлениеТоваровУслугТовары.Ссылка,
    ПоступлениеТоваровУслугТовары.Номенклатура,
    ПоступлениеТоваровУслугТовары.ХарактеристикаНоменклатуры,
    ПоступлениеТоваровУслугТовары.Ссылка.СкладОрдер,
    ПоступлениеТоваровУслугТовары.Ссылка.Организация
ПОМЕСТИТЬ ТоварыПоступления
ИЗ
    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
ГДЕ
    ПоступлениеТоваровУслугТовары.Ссылка = &ДокументПоступления
;


////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПартииТоваровНаСкладахОбороты.Номенклатура,
    МАКСИМУМ(ПартииТоваровНаСкладахОбороты.Период) КАК Период,
    ПартииТоваровНаСкладахОбороты.Склад,
    ПартииТоваровНаСкладахОбороты.ХарактеристикаНоменклатуры,
    ПартииТоваровНаСкладахОбороты.Организация
ПОМЕСТИТЬ МаксПериод
ИЗ
    РегистрНакопления.ПартииТоваровНаСкладах.Обороты(
            ,
            ,
            Регистратор,
            Номенклатура В
                    (ВЫБРАТЬ
                        ТоварыПоступления.Номенклатура
                    ИЗ
                        ТоварыПоступления КАК ТоварыПоступления)
                И Склад В
                    (ВЫБРАТЬ
                        ТоварыПоступления.СкладОрдер
                    ИЗ
                        ТоварыПоступления КАК ТоварыПоступления)) КАК ПартииТоваровНаСкладахОбороты


СГРУППИРОВАТЬ ПО
    ПартииТоваровНаСкладахОбороты.Номенклатура,
    ПартииТоваровНаСкладахОбороты.Склад,
    ПартииТоваровНаСкладахОбороты.ХарактеристикаНоменклатуры,
    ПартииТоваровНаСкладахОбороты.Организация
;


////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    МаксПериод.Номенклатура,
    МаксПериод.Период,
    МаксПериод.Склад,
    МаксПериод.ХарактеристикаНоменклатуры,
    МаксПериод.Организация,
    МАКСИМУМ(ПартииТоваровНаСкладахОбороты.ДокументОприходования) КАК ДокументОприходования
ПОМЕСТИТЬ МаксДокумент
ИЗ
    МаксПериод КАК МаксПериод
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Обороты(
                ,
                ,
                Регистратор,
                Номенклатура В
                        (ВЫБРАТЬ
                            ТоварыПоступления.Номенклатура
                        ИЗ
                            ТоварыПоступления КАК ТоварыПоступления)
                    И Склад В
                        (ВЫБРАТЬ
                            ТоварыПоступления.СкладОрдер
                        ИЗ
                            ТоварыПоступления КАК ТоварыПоступления)) КАК ПартииТоваровНаСкладахОбороты
        ПО МаксПериод.Номенклатура = ПартииТоваровНаСкладахОбороты.Номенклатура
            И МаксПериод.Период = ПартииТоваровНаСкладахОбороты.Период
            И МаксПериод.Склад = ПартииТоваровНаСкладахОбороты.Склад
            И МаксПериод.Организация = ПартииТоваровНаСкладахОбороты.Организация
            И МаксПериод.ХарактеристикаНоменклатуры = ПартииТоваровНаСкладахОбороты.ХарактеристикаНоменклатуры


СГРУППИРОВАТЬ ПО
    МаксПериод.Номенклатура,
    МаксПериод.Период,
    МаксПериод.Склад,
    МаксПериод.ХарактеристикаНоменклатуры,
    МаксПериод.Организация
;


////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТоварыПоступления.Ссылка,
    ТоварыПоступления.Номенклатура,
    ТоварыПоступления.ХарактеристикаНоменклатуры,
    ТоварыПоступления.СкладОрдер,
    ТоварыПоступления.Организация,
    МаксДокумент.Период,
    МаксДокумент.ДокументОприходования
ИЗ
    ТоварыПоступления КАК ТоварыПоступления
        ЛЕВОЕ СОЕДИНЕНИЕ МаксДокумент КАК МаксДокумент
        ПО ТоварыПоступления.Номенклатура = МаксДокумент.Номенклатура
            И ТоварыПоступления.ХарактеристикаНоменклатуры = МаксДокумент.ХарактеристикаНоменклатуры
            И ТоварыПоступления.СкладОрдер = МаксДокумент.Склад
;


////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ТоварыПоступления
;


////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ максДокумент
;


////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ МаксПериод
Taekun
30.06.2014 19:53Ответ № 11

Толи лыжи не едут то ли что то еще! Он все равно мне выдает дубли.Основная задача получить таблицу в которой будет Номенклатура с ценой закупки (цена последнего поступления)Как описано у Хрусталева - отбор ... МАКСИМУМ(<Регистр>.Период) КАК Период, <Регистр>.Номенклатура, <Регистр>.Цена ...

выводит по максимальной дате из всего регистра, номенклатуру(без повторений) и ее цену (по последней дате поступления). Но почему то не срабатывает. 

Taekun
30.06.2014 20:15Ответ № 12

А если так? но тогда придется его делать вложенным запросом:

Код 1C v 8.3
 ВЫБРАТЬ ПЕРВЫЕ 1
Закупки.Период,
Закупки.АналитикаУчетаНоменклатуры,
Закупки.Количество,
Закупки.Стоимость,
Закупки.МоментВремени
ИЗ
РегистрНакопления.Закупки КАК Закупки
ГДЕ
Закупки.АналитикаУчетаНоменклатуры = &Номенклатура


УПОРЯДОЧИТЬ ПО
Закупки.МоментВремени УБЫВ
E_Migachev
30.06.2014 20:41Ответ № 13

(12) так долго будет формироваться )

а от чего дубли? из-за разных дат?

Taekun
30.06.2014 20:51Ответ № 14

Дак да. 

E_Migachev
30.06.2014 21:02Ответ № 15

приводи все к Началу дня

Taekun
01.07.2014 06:33Ответ № 16

МАКСИМУМ(НАЧАЛОПЕРИОДА(Закупки.Период, День)) КАК Период - сделал так, итог тот же. Не срабатывает.

DJ_Serega
01.07.2014 10:53Ответ № 17

а какие могут быть дубли по строкам?

Taekun
01.07.2014 11:24Ответ № 18

вот: 

красным выделена последняя цена поступления все остальные за другие даты. А в итоге должна быть одна строка с последней ценой поступления.

E_Migachev
01.07.2014 17:04Ответ № 19

соединение ПОЛНОЕ?

Taekun
01.07.2014 19:28Ответ № 20

Я раздербанил запрос на две части одна выдергивает из ВыручкаИСебестоимостьПродаж - там все просто выбор по Периоду и все.А вот вторая часть это это как раз работа с регистром Закупки.Вот тут как раз и трудности.

Код 1C v 8.3
 

ВЫБРАТЬ
МАКСИМУМ(НАЧАЛОПЕРИОДА(Закупки.Период, ДЕНЬ)) КАК Поле1,
Закупки.АналитикаУчетаНоменклатуры,
Закупки.Количество,
Закупки.Стоимость,
Закупки.СуммаДопРасходов
ИЗ
РегистрНакопления.Закупки КАК Закупки


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

Вот тут у меня и возникает трудностьСделал вторую часть самостоятельно и вывожу в таблицу: Номенклатура, Стоимость, ЦенаЗаЕденицувот результат: 

Он вместо того что бы вывести Одну позицию номенклатуры с Ценой из последнего прихода. Он выводит номенклатуру по всем ценам за все время работы.

E_Migachev
01.07.2014 21:36Ответ № 21

этот запрос и выведет всю номенклатуру из регистра

где запрос по периодам? соединение этого запроса с запросом по периодам?

Taekun
02.07.2014 19:44Ответ № 22

Вот полностью отчет на последний момент (рабочий но не корректно) Файл отчета

Taekun
03.07.2014 21:46Ответ № 23

Немного переделал отчет теперь он практически как нужно работает но опять остается одно но. Не по всей номенклатуре формируется себестоимость.Внешний отчет

Taekun
10.07.2014 19:00Ответ № 24

Вопрос остался не решенным. 

Подсказка: Вы можете добавить любую страничку в Избранное щелкнув по значку
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.