Средняя цена номенклатуры в форме списка
По теме из базы знаний
- Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2
- Интеграция сценарного тестирования в процесс разработки
- Ценообразование. Установка, проверка и исправление цен. Контроль минимальной цены. 1С 7.7
- Как сдать экзамен 1С:Специалист по платформе?
- Движение товаров (материалов) на складах со средней ценой (для 1С.Бухгалтерии 3.0)
Найденные решения
(40) Неверно, конечно. С учетом исправленного регистра (надо накапливать общую сумму закупок, а не цену закупки) запрос может выглядеть так:
Но еще раз подчеркиваю - это правильный запрос с точки зрения корректности данных, но абсолютно неверно использовать такой запрос в динамических списках.
ВЫБРАТЬ
ОбщиеОбороты.Номенклатура КАК Номенклатура,
ОбщиеОбороты.Остаток КАК Остаток,
ВЫБОР
КОГДА ЕСТЬNULL(ОбщиеОбороты.Количество, 0) = 0
ТОГДА 0
ИНАЧЕ ОбщиеОбороты.Сумма / ОбщиеОбороты.Количество
КОНЕЦ КАК СредняяСтоимость
ИЗ
(ВЫБРАТЬ
ОстаткиТовараОстатки.Номенклатура КАК Номенклатура,
ОстаткиТовараОстатки.КоличествоОстаток КАК Остаток,
СУММА(ЗакупкиОбороты.СуммаОборот) КАК Сумма,
СУММА(ЗакупкиОбороты.КоличествоОборот) КАК Количество
ИЗ
РегистрНакопления.ОстаткиТовара.Остатки КАК ОстаткиТовараОстатки
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Закупки.Обороты КАК ЗакупкиОбороты
ПО ОстаткиТовараОстатки.Номенклатура = ЗакупкиОбороты.Номенклатура
СГРУППИРОВАТЬ ПО
ОстаткиТовараОстатки.Номенклатура,
ОстаткиТовараОстатки.КоличествоОстаток) КАК ОбщиеОбороты
ПоказатьНо еще раз подчеркиваю - это правильный запрос с точки зрения корректности данных, но абсолютно неверно использовать такой запрос в динамических списках.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Можно подцепить к справочнику Номенклатура левым соединением вложенный запрос по виртуальной таблице обороты вашего регистра накопления. Во вложенный запрос взять номенклатуру, количество расход, сумму расход.
В главный запрос вывести Сумма расход / Количество расход.
Но это большие тормоза для формы списка. И с накоплением данных тормоза будут всё тормознее.
В главный запрос вывести Сумма расход / Количество расход.
Но это большие тормоза для формы списка. И с накоплением данных тормоза будут всё тормознее.
(4) Например так. Это УТ 11. Регистр накопления взял для примера.
ВЫБРАТЬ
СправочникНоменклатура.Ссылка КАК Номенклатура,
ВЫБОР
КОГДА СуммыДвижений.Количество > 0
ТОГДА ЕСТЬNULL(СуммыДвижений.Сумма, 0) / СуммыДвижений.Количество
ИНАЧЕ 0
КОНЕЦ КАК СредняяЦена
ИЗ
Справочник.Номенклатура КАК СправочникНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот КАК Количество,
ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиБезНДСОборот КАК Сумма
ИЗ
РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты КАК ВыручкаИСебестоимостьПродажОбороты) КАК СуммыДвижений
ПО (СправочникНоменклатура.Ссылка = СуммыДвижений.Номенклатура)
ПоказатьВЫБРАТЬ
СправочникНоменклатура.Наименование,
СправочникНоменклатура.Характеристика,
ВЫБОР
КОГДА СправочникНоменклатура.ПометкаУдаления
ТОГДА 6
ИНАЧЕ 0
КОНЕЦ КАК ВариантКартинки
ИЗ
Справочник.Номенклатура КАК СправочникНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ
(ВЫБРАТЬ
Закупки.Цена КАК цена,
Закупки.Номенклатура КАК Номенклатура
ИЗ
РегистрНакопления.Закупки КАК Закупки
ПО СправочникНоменклатура.Ссылка = Закупки.Номенклатура
ПоказатьСправочникНоменклатура.Наименование,
СправочникНоменклатура.Характеристика,
ВЫБОР
КОГДА СправочникНоменклатура.ПометкаУдаления
ТОГДА 6
ИНАЧЕ 0
КОНЕЦ КАК ВариантКартинки
ИЗ
Справочник.Номенклатура КАК СправочникНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ
(ВЫБРАТЬ
Закупки.Цена КАК цена,
Закупки.Номенклатура КАК Номенклатура
ИЗ
РегистрНакопления.Закупки КАК Закупки
ПО СправочникНоменклатура.Ссылка = Закупки.Номенклатура
где я ошибаюсь подскажите
(5) Если это динамический список справочника номенклатуры, то с вероятностью 99% получишь сообщение "Обнаружено дублирование ключевых значений в колонке Ссылка", так как в РН Закупки будет несколько записей с одной и той же номенклатурой.
Соединять надо с уже сгруппированой по номенклатуре таблицей.
Соединять надо с уже сгруппированой по номенклатуре таблицей.
(5)
1. После "РегистрНакопления.Закупки КАК Закупки" скобку закрыть и псевдоним какой-то поставить, например РегистрЗакупок
2. В условии соединения "ПО..." вместо "Закупки" написать "РегистрЗакупок"
3. В "ВЫБРАТЬ" добавить собственно поле цены: РегистрЗакупок.Цена
...но этот запрос не подходит для формы списка.
Во-первых:
(9)
Во-вторых - даже если вдруг в форме списка не динамический список (что было бы очень странно), Номенклатура размножится на количество закупок: было 20 приходов "Стол письменный коричневый" - получишь в списке 20 одинаковых столов письменных коричневых.
Ну а про этот ящик Пандоры лучше даже не думать))
(8)
1. После "РегистрНакопления.Закупки КАК Закупки" скобку закрыть и псевдоним какой-то поставить, например РегистрЗакупок
2. В условии соединения "ПО..." вместо "Закупки" написать "РегистрЗакупок"
3. В "ВЫБРАТЬ" добавить собственно поле цены: РегистрЗакупок.Цена
...но этот запрос не подходит для формы списка.
Во-первых:
(9)
Если это динамический список справочника номенклатуры, то с вероятностью 99% получишь сообщение "Обнаружено дублирование ключевых значений в колонке Ссылка", так как в РН Закупки будет несколько записей с одной и той же номенклатурой.
Соединять надо с уже сгруппированой по номенклатуре таблицей.
Соединять надо с уже сгруппированой по номенклатуре таблицей.
Во-вторых - даже если вдруг в форме списка не динамический список (что было бы очень странно), Номенклатура размножится на количество закупок: было 20 приходов "Стол письменный коричневый" - получишь в списке 20 одинаковых столов письменных коричневых.
Ну а про этот ящик Пандоры лучше даже не думать))
(8)
А какая конфигурация? Потому что есть очень большой вопрос - а средняя цена для какой организации должна быть выведена?
(10)
все равно дает ошибку : Поле не найдено "Закупки.Цена"
<<?>>Закупки.Цена КАК цена,
ВЫБРАТЬ
СправочникНоменклатура.Наименование,
СправочникНоменклатура.Характеристика,
ВЫБОР
КОГДА СправочникНоменклатура.ПометкаУдаления
ТОГДА 6
ИНАЧЕ 0
КОНЕЦ КАК ВариантКартинки
ИЗ
Справочник.Номенклатура КАК СправочникНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ
(ВЫБРАТЬ
Закупки.Цена КАК цена,
Закупки.Номенклатура КАК Номенклатура
ИЗ
РегистрНакопления.Закупки) КАК РегистрЗакупок
ПО СправочникНоменклатура.Ссылка = РегистрЗакупок.Номенклатура
Показатьвсе равно дает ошибку : Поле не найдено "Закупки.Цена"
<<?>>Закупки.Цена КАК цена,
(29) А зачем нам цена? Цена не отражает объёма закупки для расчета корректной средней стоимости единицы товара. Все, что необходимо - это объемы закупок. Сумма и количество.
Вообще, я думаю, что автор со словом "средняя цена" немного намудрил. Правильнее говорить "средняя стоимость".
Вообще, я думаю, что автор со словом "средняя цена" немного намудрил. Правильнее говорить "средняя стоимость".
(33) А попробуйте такой вариант. Здесь на форме только список номенклатуры, больше ничего обработка не делает. Если взлетит в таком виде, буду ещё кое-что уточнять.
Прикрепленные файлы:
НоменклатураСредняяЦена.epf
(11) Прекрасно, осталось определить - что вы понимаете под средней ценой?
Например (по мере возрастания бесполезности):
1. Средняя цена закупки, рассчитанная по остаткам с учетом партионного учета.
2. Средняя цена закупки за определенный период (скользящая).
3. Средняя цена продажи за определенный период (скользящая).
4. Средняя цена закупки за все время учета
5. Средняя цена продажи за все время учета
По технической части:
Как вам уже сказали выше - при выводе в динамический список левого соединения по оборотам будут наблюдаться тормоза.
Способ решения зависит от того, для какой цели вам необходима данная информация.На мой взгляд никакой оперативности в данном вопросе не требуется, вполне подойдет рассчитанная цена "по состоянию на утро".
Масштабируемое решение выглядело бы так, на мой взгляд:
1. Регистр сведений с хранимыми показателями номенклатуры.
2. Регламентной задание, которое по ночам рассчитывает необходимые средние показатели.
3. Левое соединение к этому регистру в запросе динамического списка.
Например (по мере возрастания бесполезности):
1. Средняя цена закупки, рассчитанная по остаткам с учетом партионного учета.
2. Средняя цена закупки за определенный период (скользящая).
3. Средняя цена продажи за определенный период (скользящая).
4. Средняя цена закупки за все время учета
5. Средняя цена продажи за все время учета
По технической части:
Как вам уже сказали выше - при выводе в динамический список левого соединения по оборотам будут наблюдаться тормоза.
Способ решения зависит от того, для какой цели вам необходима данная информация.На мой взгляд никакой оперативности в данном вопросе не требуется, вполне подойдет рассчитанная цена "по состоянию на утро".
Масштабируемое решение выглядело бы так, на мой взгляд:
1. Регистр сведений с хранимыми показателями номенклатуры.
2. Регламентной задание, которое по ночам рассчитывает необходимые средние показатели.
3. Левое соединение к этому регистру в запросе динамического списка.
(22) Я же все написал. И вам написали. Левым соединением решить можно все. Вопрос только в тормозах.
Самый простой вариант - левое соединение с вложенным запросом, сформированного по оборотам регистра накопления закупок. Но это и самый неправильный вариант одновременно с точки зрения производительности.
Самый простой вариант - левое соединение с вложенным запросом, сформированного по оборотам регистра накопления закупок. Но это и самый неправильный вариант одновременно с точки зрения производительности.
(28)правильно, с вами согласен !!! А прикол в том что я сам являюсь предпринимателем малобюджетного предприятия. Нахожусь в Узбекистане. С бюджетом то ладно, можно найти деньги если сильно захотеть. Но я искал программистов у нас тут, нашел но у них только типовые конфигурации. мы оказываем услуги Авиакассы и продаем товары, и еще другие компьютерные услуги. Программисты предлагают варианты у которых есть авиабилеты но нету других услуг, или наоборот есть одно нету другого.))
в прежней конфигурации использовал срез последних в модуле формы документа :
В общем модуле :
Вот так и выводил закупочную цену но это было неправильно как вы знаете ) А надо оказывается считать среднюю цену так как закуп цены могут меняться
&НаКлиенте
Процедура НоменклатураПриИзменении(Элемент)
//Получение цен
Объект.ЦенаТовара = ВыводитьЦенуПродажи.УстановленнаяЦена(Объект.Дата,Объект.Номенклатура);
Объект.ЗакупочнаяЦена = ВыводитьЦенуПродажи.ЗакупочнаяЦена(Объект.Дата,Объект.Номенклатура);
//ПроверкаОстатокТовара
Объект.Остатки = ВыводитьОстатокНоменклатуры.ОстатокВСкладе(Объект.Дата,Объект.Номенклатура);
Расчёты();
КонецПроцедуры
ПоказатьВ общем модуле :
Функция УстановленнаяЦена(АктуальнаяДата, ЭлементНоменклатуры) Экспорт
Отбор = Новый Структура("Номенклатура",ЭлементНоменклатуры);
ЗначениеРесурсов = РегистрыСведений.ЦеныПродажи.ПолучитьПоследнее(АктуальнаяДата,Отбор);
Возврат ЗначениеРесурсов.УстановленнаяЦена;
КонецФункции
Функция ЗакупочнаяЦена(АктуальнаяДата, ЭлементНоменклатуры) Экспорт
Отбор = Новый Структура("Номенклатура",ЭлементНоменклатуры);
ЗначениеРесурсов = РегистрыСведений.ЦеныПоставщика.ПолучитьПоследнее(АктуальнаяДата,Отбор);
Возврат ЗначениеРесурсов.ЗакупочнаяЦена;
КонецФункции
ПоказатьВот так и выводил закупочную цену но это было неправильно как вы знаете ) А надо оказывается считать среднюю цену так как закуп цены могут меняться
(23)
Понять бы еще, что там за Остаток в складе() и Расчёты(). (За букву Ё в коде надо отдельно пороть)
&НаКлиенте
Процедура НоменклатураПриИзменении(Элемент)
НоменклатураПриИзмененииНаСервере();
Расчёты();
КонецПроцедуры
&НаСервере
Процедура НоменклатураПриИзмененииНаСервере()
//Получение цен
Объект.ЦенаТовара = ВыводитьЦенуПродажи.УстановленнаяЦена(Объект.Дата,Объект.Номенклатура);
Объект.ЗакупочнаяЦена = ВыводитьЦенуПродажи.ЗакупочнаяЦена(Объект.Дата,Объект.Номенклатура);
//ПроверкаОстатокТовара
Объект.Остатки = ВыводитьОстатокНоменклатуры.ОстатокВСкладе(Объект.Дата,Объект.Номенклатура);
КонецПроцедуры
ПоказатьПонять бы еще, что там за Остаток в складе() и Расчёты(). (За букву Ё в коде надо отдельно пороть)
(39) Это еще что такое!!! Ты решил в оборотах хранить цену? Тут в ресурсах должна быть Сумма и Количество. Цена - это не оборот, это просто характеристика сделки, образно говоря. Её нельзя накапливать (суммировать с течением времени).
Исходя из твоей конфигурации происходит следующее:
1. Покупка 10 стульев по 50 рублей. Итого Количество = 0+10 = 10. Итого Цена = 0+50 = 50.
2. Покупка 15 стульев по 50 рублей. Итого Количество = 10+15 = 25. Итого Цена = 50+50 = 100.
А должно быть
1. Покупка 10 стульев по 50 рублей. Итого Количество = 0+10 = 10. Итого Сумма = 0+500 = 500.
2. Покупка 15 стульев по 50 рублей. Итого Количество = 10+15 = 25. Итого Сумма = 500+750 = 1250.
Исходя из твоей конфигурации происходит следующее:
1. Покупка 10 стульев по 50 рублей. Итого Количество = 0+10 = 10. Итого Цена = 0+50 = 50.
2. Покупка 15 стульев по 50 рублей. Итого Количество = 10+15 = 25. Итого Цена = 50+50 = 100.
А должно быть
1. Покупка 10 стульев по 50 рублей. Итого Количество = 0+10 = 10. Итого Сумма = 0+500 = 500.
2. Покупка 15 стульев по 50 рублей. Итого Количество = 10+15 = 25. Итого Сумма = 500+750 = 1250.
Прикрепленные файлы:
Добрые люди ! В принципе разобрался с помощью ваших советов. Сделал так с помощью конструктора запроса :
только вопрос в том, правильно ли будет учет товаров при таком раскладе ? Конструктор Запросов сам высчитывает среднее, А НЕ ТАК КАК : СУММА( Закупки.Себестоимость) / СУММА(Закупки.Количество).
Уточнительный вопрос:
Где у нас тут математики ?) помогите ))
ВЫБРАТЬ
Номенклатура.Ссылка КАК Ссылка
ПОМЕСТИТЬ СправочникНоменклатура
ИЗ
Справочник.Номенклатура КАК Номенклатура
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
Закупки.Номенклатура КАК Номенклатура,
Закупки.Цена КАК Цена
ПОМЕСТИТЬ РегистрЗакупок
ИЗ
РегистрНакопления.Закупки КАК Закупки
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ОстаткиТовараОстатки.Номенклатура КАК Номенклатура,
ОстаткиТовараОстатки.КоличествоОстаток КАК КоличествоОстаток
ПОМЕСТИТЬ Остатки
ИЗ
РегистрНакопления.ОстаткиТовара.Остатки КАК ОстаткиТовараОстатки
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
СправочникНоменклатура.Ссылка КАК Номенклатура,
Остатки.КоличествоОстаток КАК КоличествоОстаток,
СРЕДНЕЕ(РегистрЗакупок.Цена) КАК Цена
ИЗ
СправочникНоменклатура КАК СправочникНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ Остатки КАК Остатки
ПО СправочникНоменклатура.Ссылка = Остатки.Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрЗакупок КАК РегистрЗакупок
ПО СправочникНоменклатура.Ссылка = РегистрЗакупок.Номенклатура
СГРУППИРОВАТЬ ПО
СправочникНоменклатура.Ссылка,
Остатки.КоличествоОстаток
Показатьтолько вопрос в том, правильно ли будет учет товаров при таком раскладе ? Конструктор Запросов сам высчитывает среднее, А НЕ ТАК КАК : СУММА( Закупки.Себестоимость) / СУММА(Закупки.Количество).
Уточнительный вопрос:
СУММА( Закупки.Себестоимость) / СУММА(Закупки.Количество)
- в таком раскладе Имеется ввиду Оборотное количество ИЛИ Количество Остатков ????
Где у нас тут математики ?) помогите ))
(40) Неверно, конечно. С учетом исправленного регистра (надо накапливать общую сумму закупок, а не цену закупки) запрос может выглядеть так:
Но еще раз подчеркиваю - это правильный запрос с точки зрения корректности данных, но абсолютно неверно использовать такой запрос в динамических списках.
ВЫБРАТЬ
ОбщиеОбороты.Номенклатура КАК Номенклатура,
ОбщиеОбороты.Остаток КАК Остаток,
ВЫБОР
КОГДА ЕСТЬNULL(ОбщиеОбороты.Количество, 0) = 0
ТОГДА 0
ИНАЧЕ ОбщиеОбороты.Сумма / ОбщиеОбороты.Количество
КОНЕЦ КАК СредняяСтоимость
ИЗ
(ВЫБРАТЬ
ОстаткиТовараОстатки.Номенклатура КАК Номенклатура,
ОстаткиТовараОстатки.КоличествоОстаток КАК Остаток,
СУММА(ЗакупкиОбороты.СуммаОборот) КАК Сумма,
СУММА(ЗакупкиОбороты.КоличествоОборот) КАК Количество
ИЗ
РегистрНакопления.ОстаткиТовара.Остатки КАК ОстаткиТовараОстатки
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Закупки.Обороты КАК ЗакупкиОбороты
ПО ОстаткиТовараОстатки.Номенклатура = ЗакупкиОбороты.Номенклатура
СГРУППИРОВАТЬ ПО
ОстаткиТовараОстатки.Номенклатура,
ОстаткиТовараОстатки.КоличествоОстаток) КАК ОбщиеОбороты
ПоказатьНо еще раз подчеркиваю - это правильный запрос с точки зрения корректности данных, но абсолютно неверно использовать такой запрос в динамических списках.
(45)я как новичок конечно глубоко не понимаю. Но я думал в принципе Динамический список не хранит полученные (суммы, себестоимость, остатки), только выводит при открытие форму списка врем таблицу где можно узнать сколько остатков в наличии . а Среднюю цену позже узнал в динамическом списке выводить не нужно, так как она тут вообще не надо
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот