INFOSTART EVENT 2018 EDUCATION

Второй тур голосования за доклады.
Окончание 5 сентября.

Круткина Оксана | Начальник бюро ОИТ | ПАО "Амурский судостроительный завод"

«Автоматизация закупочной и договорной деятельности предприятия в 1С: Бухгалтерия (223-ФЗ, 44-ФЗ)»

1. Закупочная деятельность. 1.1 Формирование годовой потребности центрами затрат. 1.2 Создание Плана закупок предприятия центрами финансовой ответственности (ЦФО) 1.3 Корректировка Плана закупок в течении года. 1.4 Проведение и контроль Закупочной процедуры на основе утвержденного Плана закупок. 1.5 Заключение договора по результату проведения закупочной процедуры. 2. Договорная деятельность 2.1 Электронное согласование и заключение договора. 2.1.1 Различия в процедуре согласования договора для конкурентного, не конкурентного и малого способов закупки. 2.2 Контроль лимитов БДР и БДДС. 2.3 Контроль исполнения договора.

1. ghostrid3r 08.08.18 12:08 Сейчас в теме

История цен номенклатуры

Добрый день.
Подскажите пож-та. как можно в запросе выбрать историю цен, но не просто вытянуть ту цену которая была установлена документом "Установка цен номенклатуры", но и предыдущую цену.
т.е. нужно что то в виде
товар, тип цены, цена текущая, цена предыдущая
итак если у нас было за выбранный период 10 документов установок цен номенклатуры по товару, то мы должны вывести все 10 строк с текущей ценой и ее предыдущей ценой.
Пример
Товар1 Типцен1 20 18
Товар1 типцен1 18 19
Товар1 типцен1 19 22
и т.д.

Помогите пож-та не могу сообразить как сделать.
Найденные решения
14. user627612_petroa 08.08.18 16:27 Сейчас в теме
(10)
ВЫБРАТЬ
	ЦеныНоменклатурыСрезПоследних.Период КАК ДатаАктуальнойЦены,
	ЦеныНоменклатурыСрезПоследних.Номенклатура,
	ЦеныНоменклатурыСрезПоследних.ВидЦены,
	ЦеныНоменклатурыСрезПоследних.Цена
ПОМЕСТИТЬ вт_ПериодАктуальныхЦен
ИЗ
	РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
ГДЕ
	ЦеныНоменклатурыСрезПоследних.Цена <> 0
;

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

СГРУППИРОВАТЬ ПО
	вт_ПериодАктуальныхЦен.ВидЦены,
	вт_ПериодАктуальныхЦен.Номенклатура,
	вт_ПериодАктуальныхЦен.ДатаАктуальнойЦены
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ЦеныНоменклатуры.Период КАК ДатаПредыдущийЦены,
	вт_ДляРасчетаПредыдущейЦены.Номенклатура,
	вт_ДляРасчетаПредыдущейЦены.ВидЦены,
	ЦеныНоменклатуры.Цена КАК ПредыдущаяЦена
ПОМЕСТИТЬ вт_ПредыдущиеЦены
ИЗ
	вт_ДляРасчетаПредыдущейЦены КАК вт_ДляРасчетаПредыдущейЦены
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
		ПО вт_ДляРасчетаПредыдущейЦены.Номенклатура = ЦеныНоменклатуры.Номенклатура
			И вт_ДляРасчетаПредыдущейЦены.ВидЦены = ЦеныНоменклатуры.ВидЦены
			И вт_ДляРасчетаПредыдущейЦены.КрайняяДатаКАктуальной = ЦеныНоменклатуры.Период
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	вт_ПериодАктуальныхЦен.Номенклатура,
	вт_ПериодАктуальныхЦен.ВидЦены,
	вт_ПериодАктуальныхЦен.Цена КАК АктуальнаяЦена,
	вт_ПредыдущиеЦены.ПредыдущаяЦена
ИЗ
	вт_ПериодАктуальныхЦен КАК вт_ПериодАктуальныхЦен
		ЛЕВОЕ СОЕДИНЕНИЕ вт_ПредыдущиеЦены КАК вт_ПредыдущиеЦены
		ПО вт_ПериодАктуальныхЦен.Номенклатура = вт_ПредыдущиеЦены.Номенклатура
			И вт_ПериодАктуальныхЦен.ВидЦены = вт_ПредыдущиеЦены.ВидЦены
ГДЕ
	вт_ПредыдущиеЦены.ПредыдущаяЦена <> 0
Показать
Остальные ответы
Сортировка: Древо
11. alex-l19041 11 08.08.18 16:08 Сейчас в теме
(1)
все 10 строк с текущей ценой
- уточните, как может быть 10(!) текущих цен?
12. ghostrid3r 08.08.18 16:14 Сейчас в теме
(11) имелось ввиду что на ту дату переоценки установленая цена является текущей. пример в (10)
2. user769014 08.08.18 12:36 Сейчас в теме
Например, выбрать из регистра сведений цен (срез последних) с периодом на 1 сек меньшим, чем в текущем регистраторе
3. user627612_petroa 08.08.18 13:30 Сейчас в теме
Найти максимальный период по типу цены, который, в свою очередь, меньше периода текущей цены.
Потом просто соединить по виду цены и этому периоду, тем самым получить срез последних, который меньше текущей цены.
4. ghostrid3r 08.08.18 14:02 Сейчас в теме
(3) если я делаю максимальный период, то получаю 1 строку по данному периоду и все.
5. user627612_petroa 08.08.18 14:54 Сейчас в теме
(4)
Нет под рукой базы, на которой смог бы наглядно запрос написать.

Сначала получаете текущие цены в разрезе товара и типа цены. Помещаете в ВТ.
Склеиваете эту ВТ с регистром цен по товару и виду цены, с условием, что дата меньше, чем дата текущей цены. Делаете группировку и берете максимум по дате.

Пример, что на выходе:
Товар1 Вид1 10 06.04.2001
Товар2 Вид1 5 08.06.2001

Помещаете в ВТ, и склеиваете еще раз (левым соединением), только уже по товару, виду цены, и периоду.

Товар1 Вид1 10 12
Товар2 Вид1 5 7
6. user627612_petroa 08.08.18 14:57 Сейчас в теме
(5)
Сначала нужно высчитать, какая дата ближайшая к дате текущей цены. Так сказать, срез последних, но для меньшей даты.
Зная предыдущую дату, вы уже можете соединить две таблицы и из второй взять цену. Она-то и будет ближайшей к текущей.
8. ghostrid3r 08.08.18 15:04 Сейчас в теме
так выбирается только текущая дата цены и предыдущая дата цены. а таких дат за период может быть много

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

СГРУППИРОВАТЬ ПО
	ЦеныНоменклатуры.Номенклатура,
	ЦеныНоменклатуры.ТипЦен
;

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

СГРУППИРОВАТЬ ПО
	ВТДатыПоследнихПереоценок.Номенклатура,
	ВТДатыПоследнихПереоценок.ТипЦен
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТДатыПоследнихПереоценок.Номенклатура,
	ВТДатыПоследнихПереоценок.ТипЦен,
	ВТДатыПоследнихПереоценок.ДатаПереоценки  ДатаПереоценкиТек,
	ВТДатыПредПереоценки.ДатаПереоценки КАК ДатаПереоценкиПред
ИЗ
	ВТДатыПоследнихПереоценок КАК ВТДатыПоследнихПереоценок
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТДатыПредПереоценки КАК ВТДатыПредПереоценки
		ПО ВТДатыПоследнихПереоценок.Номенклатура = ВТДатыПредПереоценки.Номенклатура
			И ВТДатыПоследнихПереоценок.ТипЦен = ВТДатыПредПереоценки.ТипЦен
Показать
9. user627612_petroa 08.08.18 15:14 Сейчас в теме
(8)
Может быть я вас не правильно понял?
Вам требуется вывести текущую цену, и цену, которая была предыдущей или же в одну строку вы хотите всю историю по цене вывести?
alex-l19041; +1 Ответить
10. ghostrid3r 08.08.18 15:22 Сейчас в теме
(9) я хочу вывести так
Товар, цена новая, цена старая, дата переоценки
пример
товар1, 25руб, 22руб, 01/08/18
товар1, 22руб, 28руб 07/07/18
товар1, 28руб, 25руб 02/07/18
13. alex-l19041 11 08.08.18 16:26 Сейчас в теме
(10) тогда из регистра выбираете всю историю цены и в одну строку выводите по две строки данных
14. user627612_petroa 08.08.18 16:27 Сейчас в теме
(10)
ВЫБРАТЬ
	ЦеныНоменклатурыСрезПоследних.Период КАК ДатаАктуальнойЦены,
	ЦеныНоменклатурыСрезПоследних.Номенклатура,
	ЦеныНоменклатурыСрезПоследних.ВидЦены,
	ЦеныНоменклатурыСрезПоследних.Цена
ПОМЕСТИТЬ вт_ПериодАктуальныхЦен
ИЗ
	РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
ГДЕ
	ЦеныНоменклатурыСрезПоследних.Цена <> 0
;

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

СГРУППИРОВАТЬ ПО
	вт_ПериодАктуальныхЦен.ВидЦены,
	вт_ПериодАктуальныхЦен.Номенклатура,
	вт_ПериодАктуальныхЦен.ДатаАктуальнойЦены
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ЦеныНоменклатуры.Период КАК ДатаПредыдущийЦены,
	вт_ДляРасчетаПредыдущейЦены.Номенклатура,
	вт_ДляРасчетаПредыдущейЦены.ВидЦены,
	ЦеныНоменклатуры.Цена КАК ПредыдущаяЦена
ПОМЕСТИТЬ вт_ПредыдущиеЦены
ИЗ
	вт_ДляРасчетаПредыдущейЦены КАК вт_ДляРасчетаПредыдущейЦены
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
		ПО вт_ДляРасчетаПредыдущейЦены.Номенклатура = ЦеныНоменклатуры.Номенклатура
			И вт_ДляРасчетаПредыдущейЦены.ВидЦены = ЦеныНоменклатуры.ВидЦены
			И вт_ДляРасчетаПредыдущейЦены.КрайняяДатаКАктуальной = ЦеныНоменклатуры.Период
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	вт_ПериодАктуальныхЦен.Номенклатура,
	вт_ПериодАктуальныхЦен.ВидЦены,
	вт_ПериодАктуальныхЦен.Цена КАК АктуальнаяЦена,
	вт_ПредыдущиеЦены.ПредыдущаяЦена
ИЗ
	вт_ПериодАктуальныхЦен КАК вт_ПериодАктуальныхЦен
		ЛЕВОЕ СОЕДИНЕНИЕ вт_ПредыдущиеЦены КАК вт_ПредыдущиеЦены
		ПО вт_ПериодАктуальныхЦен.Номенклатура = вт_ПредыдущиеЦены.Номенклатура
			И вт_ПериодАктуальныхЦен.ВидЦены = вт_ПредыдущиеЦены.ВидЦены
ГДЕ
	вт_ПредыдущиеЦены.ПредыдущаяЦена <> 0
Показать
17. ghostrid3r 08.08.18 16:31 Сейчас в теме
(14) (16) огромное спасибо, буду пробовать.
19. user627612_petroa 08.08.18 16:34 Сейчас в теме
(14)
Только я тут условия накладывал, так как пробовал на демо-базе, там много было записей с пустой ценой
16. user627612_petroa 08.08.18 16:29 Сейчас в теме
15. ghostrid3r 08.08.18 16:29 Сейчас в теме
Пример еще один, постараюсь детальней описать
Итак
Есть номенклатура Товар1 и созданные по ней документы:
Установка цен номенклатуры №20 от 12.01.18 - цена для Товар 1 - 45 руб
Установка цен номенклатуры №50 от 05.05.18 - цена для Товар 1 - 40 руб
Установка цен номенклатуры №78 от 05.07.18 - цена для Товар 1 - 41 руб
Установка цен номенклатуры №90 от 01.08.18 - цена для Товар 1 - 20 руб
Установка цен номенклатуры №95 от 05.08.18 - цена для Товар 1 - 22 руб
Установка цен номенклатуры №97 от 06.08.18 - цена для Товар 1 - 25 руб
Установка цен номенклатуры №98 от 07.08.18 - цена для Товар 1 - 30 руб

Пользователь выбирает данные за 01.08.18-08.08.18 и получает следующие документы
Установка цен номенклатуры №90 от 01.08.18 - цена для Товар 1 - 20 руб
Установка цен номенклатуры №95 от 05.08.18 - цена для Товар 1 - 22 руб
Установка цен номенклатуры №97 от 06.08.18 - цена для Товар 1 - 25 руб
Установка цен номенклатуры №98 от 07.08.18 - цена для Товар 1 - 30 руб

Теперь по этим данным необходимо вывести отчет в таком формате:
Товар Цена новая Цена старая Дата переоценки
Товар1 30 25 07.08.18
Товар1 25 22 06.08.18
Товар1 22 20 05.08.18
Товар1 20 41 01.08.18
(для последней строки он взял предыдущую цену которая даже не входит в выбранный период)
18. user627612_petroa 08.08.18 16:31 Сейчас в теме
(15)
Запрос, который я предоставил выше, немного адаптировать. Что бы он в рамках периода брал ближайшую дату к актуальной.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Одесса (Украина)
зарплата от 40 000 руб.
Полный день

Программист 1С
Санкт-Петербург
Полный день

Аналитик 1С
Москва
зарплата от 80 000 руб. до 120 000 руб.
Полный день

1С Developer
Одесса (Украина)
зарплата от 60 000 руб. до 120 000 руб.
Полный день

Бизнес-аналитик 1С
Санкт-Петербург
зарплата от 70 000 руб. до 90 000 руб.
Полный день