Ребят может кто подскажет как можно получить остатки на каждый день согласно производственного календаря, ну тоесть получается надо делать запрос на каждую дату из заданного периода по регистру взаиморасчетыподокументамостатки. Можно ли это как-то реализовать в СКД?
(1) Формируешь запрос с периодичностью на каждый день.
ВЫБРАТЬ
ТоварыНаСкладах2Обороты.Период,
ТоварыНаСкладах2Обороты.ХарактеристикаНоменклатуры,
ТоварыНаСкладах2Обороты.КоличествоОборот,
ТоварыНаСкладах2Обороты.СуммаОборот
ПОМЕСТИТЬ Движения
ИЗ РегистрНакопления.ТоварыНаСкладах2.Обороты(&НачалоПериода, &КонецПериода, День,) КАК ТоварыНаСкладах2Обороты
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), ДЕНЬ, -1),
ТоварыНаСкладах2Остатки.ХарактеристикаНоменклатуры,
ТоварыНаСкладах2Остатки.КоличествоОстаток,
ТоварыНаСкладах2Остатки.СуммаОстаток
ИЗ РегистрНакопления.ТоварыНаСкладах2.Остатки(&НачалоПериода,) КАК ТоварыНаСкладах2Остатки ;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
ДвиженияДенежныхСредствОбороты.Период КАК Период
ПОМЕСТИТЬ Дни
// Тут не важно, откуда брать дни, но это необходимо, поскольку в регистре накопления есть только те дни, в которые были движения. А нам хочется знать остатки, даже если в течении дня они не менялись. Выбирайте способ построения этой таблицы, наиболее быстрый для вашей конфигурации.
ИЗ РегистрНакопления.ДвиженияДенежныхСредств.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК ДвиженияДенежныхСредствОбороты ;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Дни.Период КАК Период,
Движения.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
СУММА(Движения.КоличествоОборот) КАК КоличествоОборот,
Движения.СуммаОборот ПОМЕСТИТЬ ОстаткинаНачалоДня
ИЗ Дни КАК Дни
ЛЕВОЕ СОЕДИНЕНИЕ Движения КАК Движения
ПО (Движения.Период < Дни.Период)
СГРУППИРОВАТЬ ПО
Дни.Период,
Движения.ХарактеристикаНоменклатуры,
Движения.СуммаОборот
(1) создаешь 2 набора записей
в первом по производственному календарю собираешь свои даты (псевдоним поля например ДатаПроизводственногоКалендаря)
Во втором наборе твой регистр с нужными данными , так же во второй набор добавляешь свое поля например &ДатаПроизводственногоКалендаря , и это же поле используешь как параметр виртуальной таблицы остатки.
Соединяешь наборы по этому полю в колонке "Параметр" выбираешь ДатаПроизводственногоКалендаря - Готово , Теперь по каждой дате из первого набора будут получены остатки
(8) Сурово :)
Срезы последних этим способом считает шустрее, чем можно предположить, хотя и медленнее, чем если самому "резать".
А вот получение остатков, боюсь, просядет значительно больше.
(9) Ну не знаю , по мне так способ достаточно простой и понятный. на счет скорости - тут вопрос на сколько она важна - если например в компании 50,100, 200 , 500 человек -и все работаю с 1с - то да критично , а если 3 - 5 человек и формируют этот отчет не часто то думаю что скоростью можно немного пренебречь
(10) Фиг его знает. У меня так и не дошли руки запрофайлить, как именно СКД разруливает такую конструкцию и насколько эффективные оптимизации применяет. Потому как похоже, что она все-таки как-то это оптимизирует. Но все равно пугающая конструкция.
Так как мне в основном приходится с большими нагруженными базами работать, то держусь от нее подальше на всякий случай :)
(1) Формируешь запрос с периодичностью на каждый день.
ВЫБРАТЬ
ТоварыНаСкладах2Обороты.Период,
ТоварыНаСкладах2Обороты.ХарактеристикаНоменклатуры,
ТоварыНаСкладах2Обороты.КоличествоОборот,
ТоварыНаСкладах2Обороты.СуммаОборот
ПОМЕСТИТЬ Движения
ИЗ РегистрНакопления.ТоварыНаСкладах2.Обороты(&НачалоПериода, &КонецПериода, День,) КАК ТоварыНаСкладах2Обороты
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), ДЕНЬ, -1),
ТоварыНаСкладах2Остатки.ХарактеристикаНоменклатуры,
ТоварыНаСкладах2Остатки.КоличествоОстаток,
ТоварыНаСкладах2Остатки.СуммаОстаток
ИЗ РегистрНакопления.ТоварыНаСкладах2.Остатки(&НачалоПериода,) КАК ТоварыНаСкладах2Остатки ;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
ДвиженияДенежныхСредствОбороты.Период КАК Период
ПОМЕСТИТЬ Дни
// Тут не важно, откуда брать дни, но это необходимо, поскольку в регистре накопления есть только те дни, в которые были движения. А нам хочется знать остатки, даже если в течении дня они не менялись. Выбирайте способ построения этой таблицы, наиболее быстрый для вашей конфигурации.
ИЗ РегистрНакопления.ДвиженияДенежныхСредств.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК ДвиженияДенежныхСредствОбороты ;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Дни.Период КАК Период,
Движения.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
СУММА(Движения.КоличествоОборот) КАК КоличествоОборот,
Движения.СуммаОборот ПОМЕСТИТЬ ОстаткинаНачалоДня
ИЗ Дни КАК Дни
ЛЕВОЕ СОЕДИНЕНИЕ Движения КАК Движения
ПО (Движения.Период < Дни.Период)
СГРУППИРОВАТЬ ПО
Дни.Период,
Движения.ХарактеристикаНоменклатуры,
Движения.СуммаОборот
Можно запросом, ну а СКД то:
1. В параметрах виртуальной таблицы устанавливает "Периодичность".
2. В настройках отчета, добавляем группировку по полю "ПериодДень" . тип Дополнения "День",
2.1. начальную дату периода очищаем, выбирает поле компоновки данных и указываем НачалоПериода. аналогично с конечной датой
3. Указываем в параметрах период
(13)Хороший вариант, но не подходит, в дальнейшем надо делать вычисляемое поле которое на каждый день вычисляет коэффицент, и там где нет движений не считает. Так же в группировку по конце периода надо сумму кон.ост делить на кол-во дней, тоже не работает.
Здравствуйте, мы внедряем на работе 1С Предприятие 8.3, у нас тут возникли разногласия по поводу отрицательных остатков товаров на складе на каждый день, я уверена, что нельзя допускать этого, а некоторые говорят, чтобы главное на конец месяца были положительные остатки , а на каждый день не обязательно соблюдать положительные остатки. Кто из нас прав ?