Подсчет количества основного средства внутри запроса.

1. BuryMeInVegas 05.02.20 10:19 Сейчас в теме
Доброго времени суток. Столкнулся со странным решением программиста, который работал с конфигурацией до меня, что поставило меня в ступор. Итак, моя задача составить отчёт по драгоценным материалам (Остаток на начало/приход/расход/Остаток на конец).

Первая заковыка в том, что драг-материалы входят в состав определённых основных средств, т.е. отдельно от ОС мы принять на учёт драг-материалы не можем. Условно, в состав станка, принятого нами на учёт, входит 5 гр золота, значит вместе с ним мы приняли на учёт и эти 5 гр золота. Казалось бы, если бы к нам поступило 5 таких станков, то мы приняли бы на учёт 25 гр, и по логике вещей так и должно быть, но тут вылазит вторая заковыка: данные о количестве драг-материала лежат в табличной части справочника "Основные средства" и только там. Ни в каком регистре их нет, приём станка на учёт отражается только в регистре сведений "Состояния ОС", который содержит лишь ссылку на справочник.

Ниже прикреплю результат исполнения отчёта и сам запрос.

Вопрос в следующем: мне необходимо считать количество определённого ОС (например, сколько принято на учёт станка №1), после чего умножать это количество на количество драг-материала, содержащегося в одном таком станке. Как это можно сделать? Заранее благодарю!


ВЫБРАТЬ
    ОсновныеСредстваДрагоценныеМатериалы.Ссылка КАК Ссылка,
    ОсновныеСредстваДрагоценныеМатериалы.ДрагоценныйМатериал КАК ДрагоценныйМатериал,
    ОсновныеСредстваДрагоценныеМатериалы.Количество КАК Количество
ПОМЕСТИТЬ ВТОССДрагметаллом
ИЗ
    Справочник.ОсновныеСредства.ДрагоценныеМатериалы КАК ОсновныеСредстваДрагоценныеМатериалы

ИНДЕКСИРОВАТЬ ПО
    Ссылка,
    ДрагоценныйМатериал
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    СостоянияОСОрганизацийСрезПоследних.ОсновноеСредство КАК ОсновноеСредство
ПОМЕСТИТЬ ВТОСНаНачало
ИЗ
    РегистрСведений.СостоянияОСОрганизаций.СрезПоследних(&НачалоПериода, ) КАК СостоянияОСОрганизацийСрезПоследних
ГДЕ
    СостоянияОСОрганизацийСрезПоследних.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияОС.ПринятоКУчету)

СГРУППИРОВАТЬ ПО
    СостоянияОСОрганизацийСрезПоследних.ОсновноеСредство
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    ВТОССДрагметаллом.ДрагоценныйМатериал КАК Драгметалл,
    СУММА(ВТОССДрагметаллом.Количество) КАК КоличествоНаНачало
ПОМЕСТИТЬ ВТДрагметаллНаНачало
ИЗ
    ВТОСНаНачало КАК ВТОСНаНачало
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТОССДрагметаллом КАК ВТОССДрагметаллом
        ПО ВТОСНаНачало.ОсновноеСредство = ВТОССДрагметаллом.Ссылка

СГРУППИРОВАТЬ ПО
    ВТОССДрагметаллом.ДрагоценныйМатериал

ИНДЕКСИРОВАТЬ ПО
    Драгметалл
;

////////////////////////////////////////////////////////////­////////////////////
УНИЧТОЖИТЬ ВТОСНаНачало
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    СостоянияОСОрганизацийСрезПоследних.ОсновноеСредство КАК ОсновноеСредство
ПОМЕСТИТЬ ВТОСНаКонец
ИЗ
    РегистрСведений.СостоянияОСОрганизаций.СрезПоследних(&КонецПериода, ) КАК СостоянияОСОрганизацийСрезПоследних
ГДЕ
    СостоянияОСОрганизацийСрезПоследних.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияОС.ПринятоКУчету)

СГРУППИРОВАТЬ ПО
    СостоянияОСОрганизацийСрезПоследних.ОсновноеСредство

ИНДЕКСИРОВАТЬ ПО
    ОсновноеСредство
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    ВТОССДрагметаллом.ДрагоценныйМатериал КАК Драгметалл,
    СУММА(ВТОССДрагметаллом.Количество) КАК КоличествоНаКонец
ПОМЕСТИТЬ ВТДрагметаллНаКонец
ИЗ
    ВТОСНаКонец КАК ВТОСНаКонец
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТОССДрагметаллом КАК ВТОССДрагметаллом
        ПО ВТОСНаКонец.ОсновноеСредство = ВТОССДрагметаллом.Ссылка

СГРУППИРОВАТЬ ПО
    ВТОССДрагметаллом.ДрагоценныйМатериал

ИНДЕКСИРОВАТЬ ПО
    Драгметалл
;

////////////////////////////////////////////////////////////­////////////////////
УНИЧТОЖИТЬ ВТОСНаКонец
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    СостоянияОСОрганизаций.ОсновноеСредство КАК ОсновноеСредство
ПОМЕСТИТЬ ВТОССнятыеСУчета
ИЗ
    РегистрСведений.СостоянияОСОрганизаций КАК СостоянияОСОрганизаций
ГДЕ
    СостоянияОСОрганизаций.Период МЕЖДУ &НачалоПериода И &КонецПериода
    И СостоянияОСОрганизаций.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияОС.СнятоСУчета)

СГРУППИРОВАТЬ ПО
    СостоянияОСОрганизаций.ОсновноеСредство

ИНДЕКСИРОВАТЬ ПО
    ОсновноеСредство
;

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

СГРУППИРОВАТЬ ПО
    ВТОССДрагметаллом.ДрагоценныйМатериал

ИНДЕКСИРОВАТЬ ПО
    Драгметалл
;

////////////////////////////////////////////////////////////­////////////////////
УНИЧТОЖИТЬ ВТОССнятыеСУчета
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    СостоянияОСОрганизаций.ОсновноеСредство КАК ОсновноеСредство
ПОМЕСТИТЬ ВТОСПринятыеКУчету
ИЗ
    РегистрСведений.СостоянияОСОрганизаций КАК СостоянияОСОрганизаций
ГДЕ
    СостоянияОСОрганизаций.Период МЕЖДУ &НачалоПериода И &КонецПериода
    И СостоянияОСОрганизаций.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияОС.ПринятоКУчету)

СГРУППИРОВАТЬ ПО
    СостоянияОСОрганизаций.ОсновноеСредство

ИНДЕКСИРОВАТЬ ПО
    ОсновноеСредство
;

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

СГРУППИРОВАТЬ ПО
    ВТОССДрагметаллом.ДрагоценныйМатериал

ИНДЕКСИРОВАТЬ ПО
    ДрагоценныйМатериал
;

////////////////////////////////////////////////////////////­////////////////////
УНИЧТОЖИТЬ ВТОСПринятыеКУчету
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    ВТДрагметаллНаНачало.Драгметалл КАК Драгметалл,
    ВТДрагметаллПриход.Количество КАК Приход,
    ВТДрагметаллРасход.Количество КАК Расход,
    ВТДрагметаллНаКонец.КоличествоНаКонец КАК КоличествоНаКонец,
    ВТДрагметаллНаНачало.КоличествоНаНачало КАК КоличествоНаНачало
ИЗ
    ВТДрагметаллНаНачало КАК ВТДрагметаллНаНачало
        ЛЕВОЕ СОЕДИНЕНИЕ ВТДрагметаллПриход КАК ВТДрагметаллПриход
        ПО ВТДрагметаллНаНачало.Драгметалл = ВТДрагметаллПриход.ДрагоценныйМатериал
        ЛЕВОЕ СОЕДИНЕНИЕ ВТДрагметаллРасход КАК ВТДрагметаллРасход
        ПО ВТДрагметаллНаНачало.Драгметалл = ВТДрагметаллРасход.Драгметалл
        ЛЕВОЕ СОЕДИНЕНИЕ ВТДрагметаллНаКонец КАК ВТДрагметаллНаКонец
        ПО ВТДрагметаллНаНачало.Драгметалл = ВТДрагметаллНаКонец.Драгметалл

Показать
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
10. dhurricane 05.02.20 10:59 Сейчас в теме
(1) Если я внимательно просмотрел запроса, то запрос получения начального остатка содержит ошибку. В нем срезом последних выбираются данные на начало периода, но таблица среза последних учитывает также движения на саму дату. Следовательно в начальный остаток могут попасть данные, включенные в сам период отчета, чего быть не должно.
2. VmvLer 05.02.20 10:29 Сейчас в теме
дочитал пакеты до половины и ничего странного не увидел - хороший стиль языка запросов, текущая как ящерка по валуну логика и бла бла бла.

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

давайте обсудим странности вашего предшественника, может он курил сигары?
чес-слово, когда оправдывают свою лень предшественником хочется философить.
3. BuryMeInVegas 05.02.20 10:35 Сейчас в теме
(2) Меня мало интересует, что курил предшественник, меня интересует, как посчитать количество определённого вида ОС. Например, при поступлении тех же 5 станков №1 и 3 станков №2, я должен получить 25 гр золота и условные 6 гр палладия. В данный момент я получаю 5 гр золота и 2 гр палладия на те же 5 станков №1 и 3 станка №2. Вопрос открыт, как мне посчитать в запросе, сколько же именно у меня отдельно станков №1 и станков №2? Вопрос заключается лишь в этом.
4. dhurricane 05.02.20 10:39 Сейчас в теме
(3) К сожалению, я совершенно не разбираюсь в учете ОС, поэтому подскажите, пожалуйста, с технической стороны прием 5-ти станков №1 должен отразиться в регистре "СостоянияОСОрганизаций" пятью записями с одним и тем же ОС и статусом "ПринятКУчету"?
5. BuryMeInVegas 05.02.20 10:46 Сейчас в теме
(4) Не совсем так. Принятие на учет действительно присваивает статус для ОС "ПринятКУчету", но поскольку регистраторы, оформляющие поступление ОС, имеют табличные части, то в одной записи регистра может содержаться до n основных средств, где n - количество ОС из табличной части регистратора. В то же время, можно сформировать и 5 различных записей, указав в 5 документах по одному станку, тут уж как заказчик документы оформит. :) Такие вот дела.
6. dhurricane 05.02.20 10:48 Сейчас в теме
(5) Какую конфигурацию Вы используете? Указанное количество каким-то образом еще отражается в других регистрах?

В конце-концов быть может Вам добавить свой регистр накопления для отражения оборота драг. металлов? И формировать движения по нему документами принятия и списания ОС.
7. BuryMeInVegas 05.02.20 10:54 Сейчас в теме
(6)Бухгалтерия 3. Указанное количество д/м нигде, кроме как в табличной части справочника не отражается. Количество ОС тоже. Регистр накопления вводить так же не имеет смысла, потому что конфигурация типовая, а я занимаюсь внешним отчётом. Да, в конфигурации есть определённые корректировки, но не настолько глобальные. :)
8. dhurricane 05.02.20 10:56 Сейчас в теме
(7) Ну при таких вводных ответ очевиден: получая данные из регистра состояния ОС во всех запросах пакета посредством регистратора цепляйте табличную часть документа для получения количества.
9. BuryMeInVegas 05.02.20 10:59 Сейчас в теме
(8)Это именно тот ответ, которого я не хотел получить, но, видимо, иного выхода нет. :) Сейчас буду мучиться, большое Вам спасибо!
11. dhurricane 05.02.20 11:01 Сейчас в теме
(9) Ну так раз данные только в одном месте хранятся, а предусмотреть еще одну таблицу для их хранения возможности нет, то другого ответа быть не могло. :)
13. dhurricane 05.02.20 11:10 Сейчас в теме
(7) Уточните, пожалуйста, а возможность указания количества - Ваша (или Ваших предшественников) доработка конфигурации? Как назначаются инвентарные номера при таком подходе?
16. BuryMeInVegas 05.02.20 11:19 Сейчас в теме
(13) Указание количества д/м в табличной части справочника - это идея предшественника, не могу сказать, как это отразится на инвентарных номерах, ибо в тонкостях учёта ОС я сам не разбираюсь, поскольку я программист, и лишь дорабатываю то, что меня просят доработать.
12. VmvLer 05.02.20 11:04 Сейчас в теме
(6) Учет ОС практически идентичен в БП, ЕРП, причем даже в рамках бывших республик похож в 1С, регламенты и формы родом из СССР.

Открывайте любую БП и снимкайте, доки монстроидальные и меняют видимость элементов от ряда факторов: вид ОС, вид операции и пр.

подозреваю, что раз автор вместо 5 грамм видит 2, то кто-то сейчас ходит с колечком)
14. VmvLer 05.02.20 11:10 Сейчас в теме
по учету драг металлов есть важный нюанс - точность единиц измерений.
как-то времена 7.7. ювелиры пытались меня убедить сделать точность во всех доках до 5 знаков после запятой, отказался - муть мутнейшая.

не представляю как тс учитывает граммы без страха на округлениях потерять
15. BuryMeInVegas 05.02.20 11:17 Сейчас в теме
(14) Граммы - это пример. Как видите, в моём случае данные с точностью аж до 7 знаков после запятой. Все данные уже заложены, мне их только отобразить нужно. Как видите, запрос я написал, данные получаю, только данные эти некорректны, поскольку я не учёл, что количество д/м постоянно и хранится в таб. части справочника. Почему я ругал предшественника - потому что именно он осуществил хранение количества д/м только в ней.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот