Остатки, Обороты и ОстаткиИОбороты в 1С
У регистра остатков три виртуальные таблицы: Остатки на дату, Обороты за период и ОстаткиИОбороты сразу всё вместе. На собесе спрашивают, какую взять для ведомости, что делает периодичность и почему в отчёте не видно дней без движений. Результат ниже сверен на PostgreSQL.
// Так спрашивают: «Чем Остатки отличается от ОстаткиИОбороты?» «Как получить остаток до и после каждого документа?» «Почему в отчёте по дням нет дней без движений?» «Как посчитать остатки на каждый день года?»
Три таблицы
Остатки() без даты берёт текущие итоги и работает быстрее всего. Остаток на дату документа берут на МоментВремени(): тогда документы той же секунды учитываются в правильном порядке, а на голую дату порядок внутри секунды теряется.
Периодичность
Третий параметр ОстаткиИОбороты задаёт периодичность: день, месяц, регистратор, запись. С периодичностью «день» таблица отдаёт строку на каждый день с движениями, с начальным и конечным остатком этого дня. Молоко с 5 по 7 октября, на начало 10 штук:
Строки за 6 октября нет: движений в этот день не было. Так работает метод дополнения по умолчанию «Движения». ДвиженияИГраницыПериода добавит строки на границы периода, а остатки на каждый день без движений собирают соединением с таблицей дат.
Периодичность «Регистратор» даёт строку на каждый документ с остатком до и после него. Это готовая ведомость движения товара по документам, без отдельных запросов.
ВЫБРАТЬ
О.Период,
О.КоличествоНачальныйОстаток КАК Начало,
О.КоличествоПриход КАК Приход,
О.КоличествоРасход КАК Расход,
О.КоличествоКонечныйОстаток КАК Конец
ИЗ
РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
&Начало, &Конец, День, , Номенклатура = &Молоко) КАК О
УПОРЯДОЧИТЬ ПО
О.ПериодВместо цикла по дням
365 запросов к остаткам заменяет одна ОстаткиИОбороты с периодичностью «день». Дни без движений берут остаток предыдущего дня с движениями: его даёт соединение с таблицей дат и выбор последнего конечного остатка не позже даты.
Проверка остатков при проведении на момент документа пропускает минус у последующих расходов: если документ проводят задним числом, на его момент товара хватает, а позже расход уже ушёл в минус. Для контроля берут итоговые остатки.
Как отвечать: «Нужна ведомость по складу за месяц: начальный остаток, приход, расход, конечный. Какую таблицу возьмёшь?»
ОстаткиИОбороты с периодом месяца, она отдаёт все четыре показателя за один проход. Склад ставлю в условие параметра. Если нужна разбивка по дням, ставлю периодичность «день», но помню, что дни без движений туда не попадут, и при необходимости добавляю их соединением с таблицей дат. Если нужна разбивка по документам, беру периодичность «Регистратор».
Кандидат выбирает таблицу под задачу, ставит отбор в параметр и заранее знает про пропущенные дни. Регистратор как периодичность показывает опыт с ведомостями.
На чём валят
- −Строят остатки на каждый из 365 дней циклом. Одна ОстаткиИОбороты по дням считает всё за проход.
- −Ждут строки на каждый день от периодичности «день». Дни без движений не появятся. Нужны ДвиженияИГраницыПериода и таблица дат.
- −Проверяют остатки на момент документа при проведении задним числом. Минус у последующих расходов пропускается. Контроль по итоговым остаткам.
- −Берут остаток на голую дату документа. Порядок документов внутри секунды теряется. Берут МоментВремени().
Проверь себя
Пять вопросов из банка по этой подтеме. Всего их 12, остальные разбираются в тренажёре.
- Какие параметры у
ОстаткиИОбороты?A)Начало, Конец и РегистраторB)Только Период и Условие, как у таблицы ОстаткиC)Начало, Конец, Периодичность, МетодДополнения, УсловиеD)Период и список измеренийпоказать ответ и разбор
+C)Начало, Конец, Периодичность, МетодДополнения, Условие// разбор: ОстаткиИОбороты принимает начало и конец периода, периодичность разбиения (Запись, Регистратор, День, Месяц и другие), метод дополнения и условие на измерения. Период и Условие — параметры таблицы Остатки. Регистратор появляется как поле при периодичности Регистратор.
- Нужен отчёт по дням: остаток на начало, приход, расход, остаток на конец. Какая таблица?A)
Остаткина каждый день в циклеB)ОстаткиИОборотыс периодичностью «День»C)Оборотыбез периодичностиD)Таблица движений и расчёт в кодепоказать ответ и разбор
+B)`ОстаткиИОбороты` с периодичностью «День»// разбор: ОстаткиИОбороты с периодичностью День за один запрос даёт начальный остаток, приход, расход и конечный остаток в разрезе дней. Остатки в цикле — 30 запросов вместо одного, Обороты без периодичности — один итог за период без остатков.
- Отчёт по дням через
ОстаткиИОбороты(..., День, Движения): в днях без движений строк нет. Как получить строку на каждый день?A)ДвиженияИГраницыПериода и календарьB)Периодичность «Запись» вместо «День»C)Убрать условие из параметров таблицыD)Периодичность «Месяц» вместо «День»показать ответ и разбор
+A)ДвиженияИГраницыПериода и календарь// разбор: Метод «Движения» даёт строки только в периодах с движениями. «ДвиженияИГраницыПериода» добавляет строки на границах периода отчёта. Строку на каждый день без движений получают соединением с таблицей дней (календарём) и протягиванием остатка, СКД умеет это дополнением периодов.
- Чем
Остатки(&Дата)отличается отОстатки()без параметра?A)На последний момент учётаB)Без параметра — остатки на начало текущего дняC)Без параметра — ошибка выполненияD)Различий нетпоказать ответ и разбор
+A)На последний момент учёта// разбор: Без даты таблица отдаёт остатки на последний момент учёта и берёт их из текущих итогов, это быстро. С датой платформа считает остаток на этот момент от ближайшего сохранённого итога и движений. Для «сколько сейчас» дату не передают.
- Остатки на начало периода и обороты за период по товару. Можно ли взять одну таблицу?A)Нет: нужен расчёт в коде по движениямB)Нет, нужны два запросаC)Да: Обороты с полем НачальныйОстатокD)Да, таблица ОстаткиИОбороты
показать ответ и разбор
+D)Да, таблица ОстаткиИОбороты// разбор: ОстаткиИОбороты за период отдаёт начальный остаток, приход, расход и конечный остаток в одной строке на сочетание измерений. Две таблицы и соединение дают то же самое, но сложнее и с риском потерять товары, у которых есть остаток без оборотов.
дальше
Теорию прочитал. Навык ставится повторением
В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, бесплатная часть практики — одна сессия дня в сутки.