Как сделать срез последних в регистре накопления
На основе данного кода можно сразу создавать отчет в УТ 10.3 (к примеру ПродажиНижеВыбраннойЦены) !!
ВЫБРАТЬ
Продажи.ДокументПродажи КАК ДокументПродажи,
Продажи.Период,
Продажи.Контрагент,
Продажи.Номенклатура,
Продажи.КоличествоОборот КАК Количество,
Продажи.СтоимостьОборот КАК Стоимость,
ЕСТЬNULL(ВЫБОР
КОГДА Продажи.КоличествоОборот > 0
ТОГДА Продажи.СтоимостьОборот / Продажи.КоличествоОборот
ИНАЧЕ 0
КОНЕЦ, 0) КАК ЦенаДок,
ЦеныНоменклатуры.Цена
ИЗ
РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК Продажи
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ПО Продажи.Номенклатура = ЦеныНоменклатуры.Номенклатура
И (ЦеныНоменклатуры.ТипЦен = &ТипЦен)
И (ЦеныНоменклатуры.Период В
(ВЫБРАТЬ
МАКСИМУМ(Цены.Период)
ИЗ
РегистрСведений.ЦеныНоменклатуры КАК Цены
ГДЕ
Цены.Период И Цены.Номенклатура = Продажи.Номенклатура
И Цены.ТипЦен = &ТипЦен))
ГДЕ
Продажи.Номенклатура.Услуга = ЛОЖЬ
Допустим, в регистре есть четыре записи (рис. 2).
Это – основная таблица регистра, т.е. таблица, содержащая записи, которые были добавлены в регистр.
Вы можете получить записи этой таблицы и, естественно, отобрать их по любому из существующих полей (рис. 3).
Теперь посмотрим на регистр сведений. Возьмем периодический регистр сведений с такой же структурой и такими же записями. Его основная таблица будет выглядеть следующим образом (рис. 6).
То есть для уникального сочетания значений измерений будет выбрана одна из существующих записей основной таблицы, в отличие от регистра накопления, в котором результатом функции являлась запись, не существующая в основной таблице (рис. 8).
Любой регистр можно представить в виде функции, возвращающей некоторое значение (значения) в зависимости от переданных параметров (параметра).
Измерения регистра описывают параметры этой функции.
Возвращаемое значение (значения) функции описываются ресурсами регистра.
Данные заносятся в регистр путем добавления записей. Реквизит — это просто некоторое поле, содержащее дополнительную информацию о записи.
Доброго времени. Обработка разработана, как показательный шаблон для выборки цен номенклатуры с отбором по номенклатуре и периоду.
1. Задаем параметры в шапке документа (Номенклатура, ДатаНачала, ДатаОкончания).
3. Табличное поле заполняется последней ценой каждого месяца периода.
Сам текст запроса:
Специальные предложения
и условие изменить получим срез первых. Я же написал, что использовал в собственных целях, а выложил как шаблон.
(3) я говорю не об этом, а о конкретной сделанной вами в запросе ОШИБКЕ.Свой шаблон вы назвали НЕПРАВИЛЬНО. В этом шаблоне определяется не срез последних , а последняя установленная в каждом месяце цена . Под срезом последних на дату подразумевается действующая на эту дату цена. И есть разница. Она в том, что если цена в данном месяце не устанавливалась, то и ваш запрос ничего в этом месяце не покажет.
Предположим, что вы действительно хотели определить последнюю установленную в каждом месяце цену. Но она определяется гораздо проще и быстрее , чем в вашем запросе. Всего два запроса в пакете. Тогда меняйте название и переписывайте запрос на более эффективный вариант.
Если нужен срез последних, то тоже нужно поменять запрос так, как я сказал. Иначе ваша ошибка будет размножаться.
(4) ildarovich, Вы даже сами назвали, это последней установленной ценой в месяце, а последняя установленная цена в период, в данном случае месяц, случайно нельзя назвать, в моем случае, "СрезПоследних за Месяц"? У 1с срез последних, за период 00010101 по "Установленную дату", если "Установленной даты" нет, то на 3999, у меня срок искусственно сокращен до месяца, так в чем проблема?!
И почему вы решили, что в запросе ошибка? Результаты верные? А на премию производительности я не претендовал!
Скажем, у меня стиль программирования такой, у вас другой и я не навязываю всем использовать этот запрос в виде получения данных, просто показал как еще можно использовать язык запросов 1с и да, кстати, читайте внимательнее что написано в начале статьи жирным шрифтом "Обработка является примером/шаблоном, для выполнения схожих задач" , если Вы не заметили продублировал в ответе!
- ничего случайно называть нельзя! Нужно называть так, чтобы было понятно, а то получается как в анекдоте "спички у нас лежат в коробке из-под сахара, на которой написано "соль". Под срезом последних все понимают одно, а именно - действующую на заданный момент цену. Если вы понимаете другое, то предупреждайте читателей КРУПНЫМИ БУКВАМИ. Иначе люди будут использовать ваше решение в соответствии с названием, в программах и отчетах будут ошибки и всем будет плохо.
Что касается шаблона, то еще лучше всего шаблон "0123456789абвгдеёжзиклмнопрст. " - из него можно вообще, что угодно составить. Здесь речь идет о конкретной задаче.
В общем, дело тут не в стиле, а в том, что если можно решить задачу проще, то огород городить не стоит. Не стоит пропагандировать громоздкие медленные шаблоны.
Если будете настаивать на своем, хотелось бы узнать про пример задачи, где это можно применить. Где и кому нужна последняя установленная в каждом месяце цена?
(4) ildarovich, Порядком мне надоело спорить с вами так как вы прицепились к наименованию темы и решения, человек написавший комментарий под номером (6) смог применить данное решение, так что кто хочет тот сможет разобраться. А по поводу ваши нескольких запросов в пакете для получения такого же результата, это еще нужно подумать об эффективности, все решается в один запрос:
(8) зря вы так упорствуете. Решение в (8) правильное для решенной задачи, его я и имел ввиду в комментарии (2), когда предлагал обойтись без временной таблицы врСчетчик. Только группировка Год вроде бы лишняя. Получается, что приведенное в статье решение содержит лишние действия, о чем я и говорил.
Автор комментария (6) не применял данное решение, а написал свое собственное, насколько я смог понять.
По-поводу названия тут кажется вы свои заблуждения больше пытаетесь отстоять, чем до истины докопаться.
Дело в том, что я задачей множественных срезов последних уже занимался. Собрал целых четыре (!) разных способа их получения. Среди них и общеизвестный классический метод из комментария (6) или из вашей ссылки http://kb.mista.ru/article.php?id=92 . И метод ровно в один запрос (без вложенных), приведенный в статье "Минимализмы" . Метод с использованием коррелированного запроса и еще один метод.
И получается, что вы решаете другую задачу, имеющую другой (меньший) порядок сложности, а называете ее так же. Поэтому и хотел вас переубедить.
Множественные срезы последних приходится получать очень часто, поскольку это жизненная задача. Ее смысл в интерполяции пропущенных в регистре сведений данных. То есть сначала производится сокращение избыточности (сжатие) за счет удаления тех данных (цен, например), которые не меняются, а потом восстановление данных на требуемые даты.
А задаче определения последних цен, установленных в каждом месяце трудно придумать реалистичный сценарий использования. Кому и когда она может быть нужна - вы так и не ответили. Хотя бы разные ситуации возникновения этих задач должны были вас убедить, что эти задачи принципиально разные.
Но в целом, наверное, если добавить к статье решение из (8), написать в аннотации, что именно понимается вами здесь под срезом последним (и еще упоминуть, что не все с таким определением согласны), то публикация может оказаться полезной.
Доброго времени. Обработка разработана, как показательный шаблон для выборки цен номенклатуры с отбором по номенклатуре и периоду.
1. Задаем параметры в шапке документа (Номенклатура, ДатаНачала, ДатаОкончания).
3. Табличное поле заполняется последней ценой каждого месяца периода.
Сам текст запроса:
Специальные предложения
и условие изменить получим срез первых. Я же написал, что использовал в собственных целях, а выложил как шаблон.
(3) я говорю не об этом, а о конкретной сделанной вами в запросе ОШИБКЕ.Свой шаблон вы назвали НЕПРАВИЛЬНО. В этом шаблоне определяется не срез последних , а последняя установленная в каждом месяце цена . Под срезом последних на дату подразумевается действующая на эту дату цена. И есть разница. Она в том, что если цена в данном месяце не устанавливалась, то и ваш запрос ничего в этом месяце не покажет.
Предположим, что вы действительно хотели определить последнюю установленную в каждом месяце цену. Но она определяется гораздо проще и быстрее , чем в вашем запросе. Всего два запроса в пакете. Тогда меняйте название и переписывайте запрос на более эффективный вариант.
Если нужен срез последних, то тоже нужно поменять запрос так, как я сказал. Иначе ваша ошибка будет размножаться.
(4) ildarovich, Вы даже сами назвали, это последней установленной ценой в месяце, а последняя установленная цена в период, в данном случае месяц, случайно нельзя назвать, в моем случае, "СрезПоследних за Месяц"? У 1с срез последних, за период 00010101 по "Установленную дату", если "Установленной даты" нет, то на 3999, у меня срок искусственно сокращен до месяца, так в чем проблема?!
И почему вы решили, что в запросе ошибка? Результаты верные? А на премию производительности я не претендовал!
Скажем, у меня стиль программирования такой, у вас другой и я не навязываю всем использовать этот запрос в виде получения данных, просто показал как еще можно использовать язык запросов 1с и да, кстати, читайте внимательнее что написано в начале статьи жирным шрифтом "Обработка является примером/шаблоном, для выполнения схожих задач" , если Вы не заметили продублировал в ответе!
- ничего случайно называть нельзя! Нужно называть так, чтобы было понятно, а то получается как в анекдоте "спички у нас лежат в коробке из-под сахара, на которой написано "соль". Под срезом последних все понимают одно, а именно - действующую на заданный момент цену. Если вы понимаете другое, то предупреждайте читателей КРУПНЫМИ БУКВАМИ. Иначе люди будут использовать ваше решение в соответствии с названием, в программах и отчетах будут ошибки и всем будет плохо.
Что касается шаблона, то еще лучше всего шаблон "0123456789абвгдеёжзиклмнопрст. " - из него можно вообще, что угодно составить. Здесь речь идет о конкретной задаче.
В общем, дело тут не в стиле, а в том, что если можно решить задачу проще, то огород городить не стоит. Не стоит пропагандировать громоздкие медленные шаблоны.
Если будете настаивать на своем, хотелось бы узнать про пример задачи, где это можно применить. Где и кому нужна последняя установленная в каждом месяце цена?
(4) ildarovich, Порядком мне надоело спорить с вами так как вы прицепились к наименованию темы и решения, человек написавший комментарий под номером (6) смог применить данное решение, так что кто хочет тот сможет разобраться. А по поводу ваши нескольких запросов в пакете для получения такого же результата, это еще нужно подумать об эффективности, все решается в один запрос:
(8) зря вы так упорствуете. Решение в (8) правильное для решенной задачи, его я и имел ввиду в комментарии (2), когда предлагал обойтись без временной таблицы врСчетчик. Только группировка Год вроде бы лишняя. Получается, что приведенное в статье решение содержит лишние действия, о чем я и говорил.
Автор комментария (6) не применял данное решение, а написал свое собственное, насколько я смог понять.
По-поводу названия тут кажется вы свои заблуждения больше пытаетесь отстоять, чем до истины докопаться.
Дело в том, что я задачей множественных срезов последних уже занимался. Собрал целых четыре (!) разных способа их получения. Среди них и общеизвестный классический метод из комментария (6) или из вашей ссылки http://kb.mista.ru/article.php?id=92 . И метод ровно в один запрос (без вложенных), приведенный в статье "Минимализмы" . Метод с использованием коррелированного запроса и еще один метод.
И получается, что вы решаете другую задачу, имеющую другой (меньший) порядок сложности, а называете ее так же. Поэтому и хотел вас переубедить.
Множественные срезы последних приходится получать очень часто, поскольку это жизненная задача. Ее смысл в интерполяции пропущенных в регистре сведений данных. То есть сначала производится сокращение избыточности (сжатие) за счет удаления тех данных (цен, например), которые не меняются, а потом восстановление данных на требуемые даты.
А задаче определения последних цен, установленных в каждом месяце трудно придумать реалистичный сценарий использования. Кому и когда она может быть нужна - вы так и не ответили. Хотя бы разные ситуации возникновения этих задач должны были вас убедить, что эти задачи принципиально разные.
Но в целом, наверное, если добавить к статье решение из (8), написать в аннотации, что именно понимается вами здесь под срезом последним (и еще упоминуть, что не все с таким определением согласны), то публикация может оказаться полезной.
Читайте также: