Если партионного учета нет, но очень хочется, то можно . Развитие систем 1с сейчас идет по пути отказа от партионного учета, но среди клиентов иногда встречаются ярые его сторонники. Таким бывает лучше сделать, чем объяснить, что это невозможно. Так появился данный отчет. Он показывает документы поступлений товаров, вычисленные с учетом всех перемещений товара между складами по методу ФИФО.
Отчет построен на регистрах ТоварыНаСкладах и ТоварыВРознице. От ТоваровОрганизаций пришлось отказаться по причине РЛС по организациям и доработок в проекте. Характиристики и серии номенклатуры не учитываются. Отчет основан на шаблоне типового отчета, входящего в состав КА и УПП. Основная СКД формируется из таблицыЗначений, вычисляемой внутри отчета.
Алгоритм формирования отчета:
1. Берем специальную СКД для вычисления положительных остатков товаров на складах и скопировав туда отбор из настройки отчета получаем таблицу значений с остатками товара. На этом этапе отбрасываются минуса, поэтому отчет не сойдется со стандартными отчетами по остаткам на количество отрицательных остатков.
2. Вычисляется из каких приходных (увеличивающих количество) документов состоит данный остаток. Вычисляется одним запросом. Документы определяются по методу ФИФО. Методика распределения остатка на приходные документы есть на инфостарте. К исходной таблице добавляются колонки Документ и СкладОтправитель. Последняя заполняется в случае, если документ - перемещение товаров. Строк тоже, естественно, прибавляется.
3. Тут начинается ноу-хау
В цикле ограниченном 10 или полностью пустой колонкой СкладОтправитель надо вычислить из каких партий образовались остающиеся в таблице перемещения. Вычисляется это все одним запросом примерно так:
- Отобрать по каким складам и номенклатурам требуется уточнение (перемещения одной номенклатуры могут придти с разных складов)
- Построить ФИФО цепочку движений по документам данным складамОтправителям\номенклатурам с вычислением остатка на начало и окончания каждого документа
- Соединив таблицы вычислить в основной таблице остаток на моменты перемещений на складе отправителе
- Построив ФИФО для каждого перемещения вычислить из каких документов эти перемещения взяли свое количество
- Уничтожить временные таблицы и соединить результат вычислений с данными, поданными на вход пп3 по которым вычислений не требуется. Полученную таблицу обозвать так же как и поданная на вход. В этом случае на любой итерации получаем унифицированные данные и запрос\код не изменяется.
4. Как и говорилось выход по достижении максимального числа итераций=10 или если вычислять уже нечего - перемещений нет.
5. К получившейся таблице цепляем цену из табличной части документа поступлениеТоваровУслуг дабы вычислить сумму. Ориентировочно. Прихоть клиента.
6. Результат подаем на вход основной компоновке данных и отчет формируется дальше уже сам.
Замечания:
В пп3 при получении цепочек надо учитывать, что остаток склада на дату отчета может быть не нулевым.
Для построения фифо используются таблицы с нарастающими итогами. Подобные вычисления обычно вгоняют сервера в штопор, но не в данном случае. Вычисления оптимизированы по периодам. Сначала вычисляется по месяцам, а затем уже по документам внутри месяца. Т.е. соединения каждый с каждым есть только внутри месяца.
В пп3 при вычислении документов из которых взялись перемещения ФИФО не строиться. Данные вычисляются соединив таблицу с вычисленным остатком на момент перемещения и таблицу цепочек на отправителе за один проход. Для этого в цеопчках был вычислен хитрый показатель (тоже нарастающим итогом). Классическое ФИФО заняло бы 3-4 подзапроса.
Демо версия с закрытым кодом и ограничением на количество номенклатуры не более 3. Остальное отбрасывается на первом этапе.