Что и куда ставить в конфигураторе, прежде чем писать код. Все значения — из авторских выгрузок, не по памяти.
Одна и та же для любого билета и любого блока. Ошибки конструкции делаются до кода — значит и ловятся до кода.
Каждое измерение и каждый ресурс оправданы конкретной строкой условия. Не можешь показать пальцем на требование — выкидывай.
Что требование в условии значит на языке метаданных.
| В условии написано | Объект | Ключевая настройка |
|---|---|---|
| «остаток», «не хватает», «списание» | Регистр накопления | Вид = Остатки |
| «отчёт за период», «продажи с … по …» | Регистр накопления | Вид = Обороты |
| «значение на дату», «действует с» | Регистр сведений | периодичность + СрезПоследних |
| «проводки», «корреспонденция счетов» | Регистр бухгалтерии | Корреспонденция = Истина |
| «учёт в разрезе …» внутри БУ | Субконто (ПВХ) | макс. субконто на плане счетов |
| «начисление», «оклад», «премия», «удержание» | Регистр расчёта | период действия / базовый |
| «вытесняет», «замещает время» | План видов расчёта | вытесняющие виды расчёта |
| «% от начисленного», «от базы» | Регистр расчёта | БазовыйПериод = Истина |
| «согласование», «маршрут», «задача» | Бизнес-процесс + Задача | регистр адресации |
Два вида, и выбор между ними — первое решение в любом билете.
| Вид | Когда | Виртуальные таблицы |
|---|---|---|
| Остатки Balance | Нужно знать «сколько есть сейчас». Приход/расход, контроль нехватки. | Остатки, Обороты, ОстаткиИОбороты |
| Обороты Turnovers | Нужно «сколько прошло за период». Продажи, выручка, отработанные часы. Остатка не бывает по смыслу. | только Обороты |
Когда у требований разные разрезы. Количество нужно по складам, себестоимость — по партиям: разрезы не совпадают, значит два регистра.
Слепить их в один [Номенклатура, Склад, Партия] — значит размазать партии по складам без надобности и считать остатки по складам лишней группировкой.
Номенклатура.ПРЕДСТАВЛЕНИЕ(ТЧ.Номенклатура) — платформа заполняет сама, в ИТОГИ не нужно. Функцией, а не .Представление через точку.ТЧ.Номенклатура.ВидНоменклатуры — тоже заполняется сама.МАКСИМУМ(Количество), СУММА(КоличествоОстаток). Вычисленное выражение из ВТ (ЭтоТовар) — тоже агрегатом: МИНИМУМ(ЭтоТовар), как в билете 3.Значение из документа повторяется в каждой строке остатков → МАКСИМУМ (или МИНИМУМ), не СУММА — иначе умножится на число партий/сроков.
Остатки по строкам разные и их надо сложить → СУММА.
Хранят значение, действующее на дату. Две настройки решают всё.
Учётная политика: значение (ФИФО / ЛИФО) — это ресурс, а не измерение. Измерений у неё обычно ноль.
Если положить способ в измерение, СрезПоследних вернёт по строке на каждый способ, и решение молча возьмёт первый попавшийся.
Главное отличие от ОУ: у регистра бухгалтерии нет измерений. Их роль играют счёт и субконто.
Количество только на тех счетах, где он помечен.УчетПоФилиалам.Организация, Филиалы.Движение.Сумма.КоличествоДт и КоличествоКт. Плюс признак учёта Количественный.1. ПВХ «Виды субконто» — тип значения (составной) + предопределённые виды по разрезам из условия.
2. План счетов → «Данные» — виды субконто = ПВХ, макс. субконто; в табличке «Признаки учёта» добавить Количественный (Булево); в табличке «Признаки учёта субконто» — Суммовой и Количественный (Булево).
3. Предопределённые счета — на счёте галка Количественный; в таблице субконто счёта у каждой строки свои галки: по какому разрезу нужна сумма, по какому только количество.
4. Регистр бухгалтерии — план счетов, Корреспонденция = Истина, измерений нет (разрезы уже дают субконто — измерение их дублирует).
5. Ресурсы — Сумма: балансовый, признак учёта пусто, признак учёта субконто Суммовой. Количество: небалансовый, признак учёта Количественный, признак учёта субконто Количественный.
6. Регистратор — у документа на вкладке «Движения» отметить регистр. Без регистратора конфигурация не обновится (!!!).
Почему Количество небалансовое: в проводке «Дт Товары Кт Касса» количество есть только с одной стороны. Балансовый ресурс — одно поле на обе стороны, так нельзя.
Как всё связано: ресурс смотрит на признак счёта/субконто. Нет галки на счёте — ресурс по нему не хранится. Нет галки на субконто — итоги в этом разрезе не считаются.
Признак учёта счёта и признак учёта субконто — разные вещи, и работают независимо.
Если у субконто (скажем, «Сроки годности») не стоит признак Суммовой, то в разрезе этого субконто ведётся только количество. Сумма там не набирается — вернётся ноль.
Следствие: за количеством и за суммой приходится ходить в регистр двумя отдельными соединениями с разными наборами субконто.
// количество — в разрезе номенклатуры и срока годности ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Управленческий.Остатки( &МоментВремени, Счет = &Счет, &ВидыСубконтоПоСрокамГодности, ...) КАК ОстаткиПоСрокамГодности // сумма — уровнем выше, только по номенклатуре ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Управленческий.Остатки( &МоментВремени, Счет = &Счет, &ВидыСубконтоПоНоменклатуре, ...) КАК ОстаткиПоНоменклатуре
| Счёт | Учитывает | Дт | Кт | Остаток |
|---|---|---|---|---|
| Активный | что у нас есть — товар, касса | приход + | расход − | только дебетовый |
| Пассивный | откуда взялось — долги, капитал, налоги | погашение − | рост + | только кредитовый |
| Активно-пассивный | расчёты с контрагентами | по ситуации | по ситуации | любой |
Актив — что у нас есть. Пассив — чьё оно. Баланс сходится всегда, потому что всё, чем владеешь, откуда-то взялось.
Разница активно-пассивного не в смысле проводок, а в том, что разрешён остаток любого знака.
Самый дорогой блок: восемь из девяти разобранных «расхождений» — отсюда. При этом настройки предельно шаблонны — их стоит помнить наизусть.
| Формулировка | Простыми словами | Где факт | Билеты |
|---|---|---|---|
| «методом отклонений» | По умолчанию сотрудник отработал по графику. Вводятся только отклонения: принят 10-го, отпуск, болезнь, прогул. | График: ДанныеГрафика →ЗначениеПериодДействия = норма,ЗначениеФактическийПериодДействия = факт | 1–6, 8–10, 12, 13, 15 |
| «вводится документом Табель» | Сплошная регистрация: каждый отработанный день/час вводится явно. Ничего не предполагается по умолчанию. | Свой оборотный РН (в эталоне 7 — ОтработанныеЧасы), пишет Табель; начисление берёт .Обороты(). Норма — по-прежнему из графика. | 7, 11, 14 |
Оклад 30 000, в октябре 22 рабочих дня, принят 10-го → оклад вводится с 10.10 по 31.10, по графику в этом периоде 16 дней.
Результат = Оклад / Норма × Факт = 30 000 / 22 × 16. Норма — рабочие дни периода, от которого считается ставка; факт — что осталось после отклонений.
НачалоМесяца(Дата).| Настройка | ОсновныеНачисления | ДополнительныеНачисления |
|---|---|---|
| Периодичность | Месяц | Месяц |
| Период действия | Истина | Ложь |
| Базовый период | Истина (в 5 из 6 билетов) | Истина |
| График | подключён | не подключён |
| Измерения | Сотрудник, обычно + Подразделение | |
| Ресурсы | Результат, плюс ОтработаноДней/Часов, если время нужно в отчёте | |
Оклад растянут во времени и его можно вытеснить отпуском — значит период действия и график. Премия считается от базы и привязана к месяцу начисления — значит базовый период и никакого графика.
Заметь: у основных начислений базовый период тоже чаще включён — потому что они сами служат базой для премий.
Дата.Порядок жёсткий: платформа считает график только по уже записанным движениям. Отсюда две записи набора.
Сотрудник, ВидРасчета, ПериодДействияНачало, ПериодДействияКонец = КонецДня(...), ПериодРегистрации = НачалоМесяца(Дата), ГрафикРаботы. Затем Движения.ОсновныеНачисления.Записать().ДанныеГрафика(Регистратор = &Ссылка). ЗначениеПериодДействия — норма (РабочихДней), ЗначениеФактическийПериодДействия — факт после вытеснения (ОтработаноДней).СведенияОСотрудниках.СрезПоследних — на начало расчётного периода, а не на момент документа. См. ловушку внизу.НомерСтроки. Оклад / РабочихДней * ОтработаноДней, с проверкой РабочихДней > 0.Движения.ОсновныеНачисления.Записать(, Истина) — так во всех эталонах.БазаОсновныеНачисления(&Измерения, &Измерения, , Регистратор = &Ссылка) → РезультатБаза. Работает, только если у регистра БазовыйПериод = Истина.Результат = БазовыйРезультат * ПроцентПремии / 100.(РАЗНОСТЬДАТ(ДатаПриема, &ПериодРегистрации, МЕСЯЦ) + НачальныйСтаж) / 12 — в эталоне 28 начальный стаж хранится в месяцах.ПроцентПремииОтСтажа: измерения СтажОт, СтажДо → ресурс ПроцентПремии. Соединение Стаж >= СтажОт И Стаж < СтажДо. Заполняет пользователь.Собрано из ошибок, которые уже случались — в решениях, в эталонах и в видео автора.
| Что проверить | Как выглядит ошибка |
|---|---|
| Сколько списываем | КоличествоСписать = ...Количество, а не ...КоличествоОстаток. При продаже всего остатка ошибка не видна — ломается только на частичной. |
| Блокировка перед чтением остатков | В видео автор её забывает регулярно — и в ОУ, и в регистре бухгалтерии. В выгрузке она есть. |
| Услуги в расходной | У услуги нет партий, значит цикл по партиям для неё не отработает. Нужна отдельная ветка по ВидНоменклатуры. |
| Учётная политика | Способ списания — ресурс, измерений ноль. |
| Базовые виды у премии | Премия считается в 0, база пустая. Флажок «Базовые планы видов расчёта» на ПВР только разрешает базу. Какой вид — база, задаётся на самом предопределённом виде расчёта: «Предопределённые» → «Премия» → вкладка «Базовые» → ✓ «Оклад». Хранится в метаданных (Predefined.xml → <Base>). |
| Оклад на начало периода | Условие: оклад «берётся на начало расчётного периода». Срез на МоментВремени() документа возьмёт оклад, изменённый в середине месяца. В эталоне 28 сделано именно так — упрощение; правильный вариант в «Расхождениях», тема 1. |
| Признак Суммовой у субконто | Сумма приходит нулём — значит нужен второй запрос без этого субконто. |
| Макс. субконто | В условии три разреза на счёте, а в плане счетов стоит 2. |
| Измерения в регистре бухгалтерии | Номенклатура/срок годности заведены измерениями — дубль субконто. Измерений нет. |
| Остаток в РС | «Сколько осталось» хранят в регистре с остатками (накопления/бухгалтерии), не в РС. РС отвечает «какое значение действует», остатков у него нет. |
| Сбой «Нарушена целостность» | Конфигуратор падает, несохранённое теряется. Ctrl+S каждые 10–15 минут. Сохранённое в основной конфигурации переживает перезапуск. |
| Обращение через точку в запросе | Остатки.Номенклатура.Представление — неявное соединение, снимают за неоптимальность. |
| Отчёт | Входит в билет и оценивается. СКД настраивается быстрее, чем пишется проведение — самые дешёвые баллы. |
Когда видео и выгрузка расходятся — прав .dt. Автор правил ошибки в выгрузках, но не перезаписывал видео; в его Readme это сказано прямым текстом.