#0
by Любопытная
Здравствуйте. Имеется таблица значений: Номенклатура, ДатаНачалаПериода, ДатаОкончанияПериода. И еще имеется регистр сведений ЦеныНоменклатуры, независимый, с периодичностью в день. Необходимо получить периоды действия цены номенклатуры за заданный период. Т.е. если период задан датами 01.06 - 30.06, а цена номенклатуры менялась 01.06 и 10.06, то в результате получится два периода 01.06-09.06 и 10.06-30.06. Очень хочется получить эту таблицу сразу в запросе, но никак не могу понять, как это сделать. Подкиньте идею, дорогие товарищи, будьте так любезны :)
#3
by dj_serega
Хотя да :))) не туда подумал... ГДЕ ЦеныПродуктов.Период МЕЖДУ &НачалоПериода И &КонецПериода ЦеныПродуктовСрезПоследних.Продукт ЦеныПродуктовСрезПервых.Продукт
#4
by Скай
И где в твоем запросе конец периода действия? Последнюю таблицу нужно соединить саму с собой по условию ВыборкаЦен1.Период<ВыборкаЦен2.Период, И взять минимум по второму периоду. Вроде так, на вскидку.
#5
by dj_serega
Так конец периода это будет -1 секунда следующего периода :) А такой запросец учили писать на курсах на спеца по платформе :)
#6
by Любопытная
Что-то тут не так. Мне нужно в конечной таблице поиметь Начало период, конец периода, цена. Я могу получить все цены за период вместе с их датами регистрации, мне надо потом первоначально заданный период разбить на кусочки, согласно датам регистрации цен, и вот эта часть у меня не получается. Хотя может я вообще не в ту сторону думаю
#7
by Скай
То, что у тебя все отсортировано по порядку - это прекрасно, но ТС конкретно пишет, что таблицу требуемого вида(Ном, НачалоПериода, КонецПериода) нужно получить в запросе.
#9
by Enders
А получить таблицу Типа: Период,Номенклатура,Цена После чего сгруппировать по номенклатуре и цене и рассчитать Минимум(период) и Максимум(Период), вариант? Или у вас может быть заведен документ установки цен, а цена на товар не изменится?
#10
by Любопытная
Это мне страшно хочется получить все в запросе и не городить огороды с постобработкой результата. Но, если не получится, значит буду разбирать потом руками в цикле. Написала до того, как прочитала . Всем спасибо, попробуем применить советы на практике :)
#11
by Любопытная
цены в регистр пишутся напрямую в регистр. Предположим, что они не повторяются, т.е. каждая запись несет в себе изменения. Это не рабочая работа, это я учусь просто) Наткнулась на такую вот задачу, думала сделаю легко, а вот не получилось. Пришлось просить о помощи :) Спасибо за внимание и участие :)
#12
by Скай
И что даст твой запрос, если одна и та же цена была установлена на два разных периода? Оно сольет все в один?
#14
by Скай
Ну так это не ситуация, когда есть установка цен, но цена не изменилась. Ситуацию 1 июня - 10 р 5 июня - 5 р 10 июня - 10 р тоже не корректно обработает
#15
by Enders
Туплю, не до конца продумал мысль) Ну тогда как ты в писал, соединить саму с собой по периоду и взять минимум. Просто я бы саму итоговую таблицу немного по другому получал. Хотя суть та же, согласен)
#17
by Любопытная
Это конечно замечательно, но по условиям задачи у меня не одна номенклатура и один период, а целая таблица с номенклатурами и периодами. В таком варианте СрезПервых и СрезПоследних использовать не получится, если только не добавить условия, что все периоды в ТЗ укладываются в один определенный период (к примеру месяц) и изначально брать изменения за месяц. В таком случае, все равно придется обрабатывать после запроса. Выходит, мое желание собрать все в запросе невыполнимо :( Печаль
#18
by Любопытная
ДА и вообще - поствила в параметрах период 15.06-30.06, а получила две записи регистра 01.06 и 23.06, т.е. те даты, в которые действительно менялась цена, к моим параметрам это не имеет никакого отношения :(
#19
by Enders
Почему?) Выполнима У тебя может быть как-то так Ном1 01.05.2014 31.05.2014 Ном2 15.05.2014 15.06.2014?
#21
by Enders
у тебя уже есть готовая ТЗ которую ты хочешь скормить запрос? Или эта ТЗ уже рассчитана в запросе и тебе требуется его дописать?
#22
by Любопытная
Давайте считать, что в таблице может быть несколько записей по одной номенклатуре с разными периодами. Периоды по одной номенклатуре между собой не пересекаются, но укладываются в один месяц. Есть готовая ТЗ, которую я скармливаю в запрос.
#23
by Любопытная
Наверное. Но пока я не познала это Дао, для меня это что-то из области фантастики.
#24
by Скай
Ключевой момент - это связь таблицы самой с собой по условию больше/меньше, с последующим получением максимального или минимального периода. Запросы как правило тяжелые получаются.
#25
by Любопытная
Может быть так: Ном1 01.06.2014 10.06.2014 Ном1 15.06.2014 25.06.2014 Ном2 01.06.2014 30.06.2014 На Ном1 цены устанавливались 25.05 - 100; 23.06 - 200; На Ном2 цены устанавливались 01.06 - 300; 10.06 - 150; В итоге надо получить таблицу Ном1 01.06 10.06 100 Ном1 15.06 22.06 100 Ном1 23.06 25.06 200 Ном2 01.06 09.06 300 Ном2 10.06 30.06 150
#29
by Enders
Ну в таком случае я б делал как-то так: 1. рассчитать период с Выбрать Минимум(ПериодС) Из &Тз как ТЗ 2. рассчитать период по Выбрать Максимум(периодПо) Из &Тз как ТЗ. Пункты 1 и 2 использовать как параметры для запроса 3. Перевел бы вашу таблицу в вид Период Номенклатура Товар Можно получить Запросом к производственному календарю Выбрать ТЗ.Номенклатура, ТЗ.ПериодС, ТЗ.ПериодПо Поместить Таб Из &Тз как ТЗ ; Выбрать Календарь.Период, Таб.номенклатура Поместить ДатыТовары Из РегистрСведений.ПроизводственныйКалендарь(или как он там) как Календарь Внутреннее соединение Таб как Таб По Календарь.Период >=Таб.ПериодС и Календарь.Период<=Таб.ПериодПо ; Выбрать ЦеныТоваровНаНачало.Период, ЦеныТоваровНаНачало.Номенклатура, ЦеныТоваровНаНачало.Цена Поместить ЦеныЗаПериод Из регистрСведений.ЦеныТоваров.СрезПоследних(КонецПериода(&НачалоПериода,День),Номенклатурав (Выбрать Различные ДатыТовар.Номенклатура из ДатыТовар)) как ЦеныТоваровНаНачало Выбрать ЦеныТоваровЗаПериод.Период, ЦеныТоваровЗаПериод.Номенклатура, ЦеныТоваровЗаПериод.Цена Из регистрСведений.ЦеныТоваров как ЦеныТоваровЗаПериод Где Период Между НачалоПериода(ДобавитьКДате(&НачалоПериода,День,1),День) И КонецПериода(&КонецПериода) И Номенклатурав (Выбрать Различные ДатыТовар.Номенклатура из ДатыТовар) ; ВЫбрать ДатыТовар.Период, ДатыТовар.Номенклатура, Из ДатыТовар ДатыТовар.Период, ДатыТовар.Номенклатура ; выбрать АктуальныеДатыЦен.Период, АктуальныеДатыЦен.Номенклатура, Из АктуальныеДатыЦен Левое Соединение ЦеныЗаПериод По АктуальныеДатыЦен.ПериодЦен=ЦеныЗаПериод.период АктуальныеДатыЦен.Период, АктуальныеДатыЦен.Номенклатура, актуальныеДатыЦен.ПериодЦен ; Выбрать Итог.Номенклутара, Итог.Цена, Из Итог Левое Соединение Итог как Итог1 Итог.Номенклатура, Итог.Цена Кажется в конце не додумал, но проверить не могу) Или вообще бред написал)
#31
by Любопытная
Т.е. что у нас получается: 1.Получаем первую и последнюю даты из всех периодов ТЗ, будем использовать их для ограничения по периодам. 2.Для каждой номенклатуры из ТЗ получаем запись с каждой датой из периода (используем для этого производственный календарь) 3.Получаем актуальные цены на каждую дату из таблицы п.2 4.Как-то собираем периоды обратно в кучу, соединяя для этого таблицу с самой собой. В итоге, как мне кажется, данные за весь месяц по каждой номенклатуре. От этого уже можно будет отталкиваться, выкидывая лишние периоды. Вроде умозрительно так, но делать сейчас уже не возьмусь - лучше с утра на свежую голову перед работой. Спасибо большое. Всем остальным, принявшим участие в обсуждении, тоже спасибо :) Как приятно, что в мире так много умных и в тоже время добрых и отзывчивых людей :)
#32
by Enders
Суть вы уловили правильно ;) Если несложно, отпишитесь о результатах. Просто интересно:)
#33
by Любопытная
Ничего толкового не вышло. Жаль. Сейчас об этом думать не хочу, соберу циклами все, что надо для дальнейшего решения задачи, с запросом как-нибудь в следующей жизни повоюю
#35
by samozvanec
вот чето такое делал когда-то давно, но не помню точно, что и как. вроде надо соединить таблицу цен с таблицей периодов 4 раза - 2 раза по период регистрации больше даты начала, 2 раза меньше даты окончания, при этом по очереди брать даты - в первый раз вместо начала период регистрации, во второй - вместо конца. и потом как то это дело группировать и отбирать. попробуй)
#38
by Enders
А в чем проблема? Итоговую таблицу вы получили? Проблема в соединении самой к себе или в чем?
#39
by Любопытная
Ерунду получила в итоговой таблице. Просто натурально ерунду. Запрос не сохранила, запостить не удастся) Ну да, я слабак, признаю. Ну и ладно)
#40
by Wobland
ВЫБРАТЬ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры ГДЕ ЦеныНоменклатуры.Период МЕЖДУ &ДатаС И &ДатаПо И ЦеныНоменклатуры.Номенклатура В (ВЫБРАТЬ ТЧ.Номенклатура ИЗ ТЧ)
#43
by Enders
Ещё раз присоединить цены Только по условию что период второй таблицы больше периода первой таблицы цен. Потом сгруппировать и получим: Период первой таблицы это ДатаС, если она меньше чем датаДокумента - берём дату документа. а период второй таблицы это датаПо, если его нет, то берём дату из документа. Мб как, то так?)
#44
by Wobland
ступил. ГДЕ ЦеныНоменклатурыСрезПоследних.Период МЕЖДУ &ДатаС И &ДатаПо это в срезе последних цен. вроде всё как надо
#47
by Wobland
чтоб выкинуть цены, установленные в пятом году и не менявшиеся с тех пор. там же ещё измерение ТипЦены, я его тут не учитывал. да и вообще могу быть неправ ;)
#48
by Enders
а зачем их выкидывать? они ж до сих пор актуальные, просто не будут влиять на итоговый период. Может как в ?) Да и не совсем понятно, ты берёшь срез последних на 01.06.2014 00:00:00 и тут же ставишь условие на период между 01.06.2014 и 01.07.2014? или я тут не допонял?)
#49
by Wobland
перегрелся я слегка. достаточно было фильтровать по типу цены (ну регистр у меня такой ;) и никаких где
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Получить id и получить объект по id
- Цены, цены, цены.....?
- Как мне получить запросом только движения по приходу из регистра?
- Как программно получить получить пароль пользователя в текущем сеансе работ
- Как запросом получить последнюю фактуру по заказу?
- Как получить разность дат (Нужно получить количество дней)
- Как получить движения документа запросом 1с++ ?
- Как получить ГУИД элемента по OLE, записать и получить по нему ссылку?
- получить остатки по документам запросом
- v7: Перебрать запросом документы и получить цены номенклатуры из справочника цен.
В этой группе 1С
- Проблемы с подключением к SMTP
- Расчет материальной выгоды в ЗУП
- Группировка рисунков в поле табличного документа
- (8.2) к SQL через ADODB.Connection - альтернативы?
- ЗУП отработано часов по пятидневке в документе Начисление зарплаты
- выгрузка из 1с ЗУП в Сбербанк Бизнес Онлайн
- Metrologic MS 5145 Eclipse настройка функции F7
- Командная панель
- Проблема с Excel.Application на сервере
- v7: Обмен между Штрих-М:Кассир 1.9.0.3 и Торговля+Склад редакции 1.9
- Не заходит в ОбработкуВыбора
- Как разместить отчет в подменю отчеты? УТ11
- УТ11 - не открываются прикрепленные файлы
- БП3.0: разнесли не на тот договор...
- вывод значений регистра сведений на формы справочника
- Кто сам программировал FTP сервер?
- БП 3, книга продаж нет номера и даты счф
- Экзамен по программе "1С:Зарплата и управление персоналом 8"
- Спасите!!!! 1с 8.3
- Центр активации microsoft закрыт ?