Товарный отчет (форма ТОРГ-29)
Товарный отчет (форма ТОРГ-29) позволяет пользователю получить информацию о суммовом движении товаров на складе за выбранный период времени. В данной инструкции описаны все возможные настройки отчета, их назначение и правила работы.
Общие сведения
Товарный отчет формируется на основе данных о движении товаров за указанный период. Отчет поддерживает настройку складов, временного интервала, столбцов и детализации. Он может быть выведен в формате HTML, CSV или XLSX, а также адаптирован для печати в соответствии с унифицированной формой ТОРГ-29.
Текущая дата: 28 февраля 2025 года. Все временные параметры отчета рассчитываются относительно этой даты, если не указано иное.
Вкладка "Склад"
Настройка складов
* Описание: Позволяет выбрать один или несколько складов, по которым будет сформирован отчет. * Как настроить:
- В интерфейсе отчета откройте вкладку «Склад».
- Выберите склад(ы) из списка доступных. Для выбора нескольких складов удерживайте клавишу `Ctrl` (или аналогичную для вашей системы) и кликайте по нужным складам.
- Если склад не выбран, отчет не будет сформирован (см. проверку в методе `validate`).
* Отображение данных при выборе нескольких складов:
- Если выбрано несколько складов, данные по всем выбранным складам агрегируются в единый отчет.
- В шапке отчета в секции «по складу» указываются названия всех выбранных складов, разделенные запятыми (см. метод `_render`, формирование `unitName`).
- Суммы и операции по каждому складу суммируются без разделения по складам в итоговой таблице, если не включена детализация.
* Особенности:
- Если выбран только один склад, совпадающий с текущим складом пользователя (`cnf()→myUnit()`), появляется дополнительная опция «Добавить данные по локальным складам» (см. ниже).
- При выборе нескольких складов детализация по локальным складам недоступна.
Опция "Добавить данные по локальным складам"
* Описание: Добавляет в отчет данные по локальным складам, связанным с основным выбранным складом. * Условие активации: Доступна только если выбран один склад и он совпадает с текущим складом пользователя (`cnf()→myUnit()`). * Как работает:
- При активации этой опции к основному складу автоматически добавляются все локальные склады, указанные в конфигурации (`cnf()→localUnits()`).
- Данные по локальным складам включаются в общий расчет сумм и операций, но не выделяются отдельно в отчете.
* Отображение: В шапке отчета названия локальных складов добавляются к основному складу через запятую.
Опция "Округлять суммы в отчете до копеек"
* Описание: Применяет округление всех суммовых значений в отчете до двух знаков после запятой (копеек). * Как работает:
- Если опция включена, метод `roundValuesToKopeika` корректирует значения в структуре `TLineData` (b1, b2, b3, b4, b5 и их аналоги без НДС) так, чтобы итоговые суммы сходились с детализацией по НДС (10%, 20%, без НДС).
- Округление выполняется с учетом возможных расхождений, распределяя разницу между значениями (см. метод `roundValuesToKopeika`).
* Влияние:
- Включение этой опции может привести к небольшим расхождениям в итоговых суммах между столбцами, так как округление применяется к каждому блоку отдельно.
- Без этой опции суммы выводятся с полной точностью, что может привести к значениям с большим количеством знаков после запятой.
Вкладка "Временной интервал"
* Описание: Определяет период, за который формируется отчет. * Как настроить:
- Откройте вкладку «Временной интервал».
- Укажите начальную дату (`left`) и конечную дату (`right`) в соответствующих полях.
- По умолчанию начальная дата — текущая дата минус один месяц, конечная дата — текущая дата (28 февраля 2025 года).
* Как работает:
- Все операции, выполненные в период между начальной и конечной датами (включительно), включаются в отчет.
- Даты используются в SQL-запросах (например, `po.addDate>=? and po.addDate⇐?`).
* Отображение:
- В шапке отчета указывается отчетный период в формате «с DD.MM.YYYY по DD.MM.YYYY» (см. метод `headerNumberBlock`).
- Остаток на начало периода выводится в строке «Остаток на начало DD.MM.YYYY».
Вкладка "Настройка столбцов"
* Описание: Позволяет выбрать, какие столбцы будут отображаться в отчете, и определяет порядок их формирования.
* Доступные столбцы: Список столбцов задается в `pList` в конструкторе `torg29Report`:
- «Опт Без НДС» — оптовая сумма без учета НДС.
- «Опт с НДС» — оптовая сумма с учетом НДС.
- «Сумма опт НДС» — разница между оптовой суммой с НДС и без НДС.
- «Розн Без НДС» (или «Продажа опт Без НДС») — розничная сумма без НДС (название зависит от конфигурации `unit.orderIncomeProvider`).
- «Розн с НДС» (или «Продажа опт с НДС») — розничная сумма с НДС.
- «Сумма розн НДС» — разница между розничной суммой с НДС и без НДС.
- «Наценка от Без НДС» — разница между розничной суммой с НДС и оптовой без НДС.
- «Наценка от с НДС» — разница между розничной суммой с НДС и оптовой с НДС.
- «Наценка от Без НДС в %» — процент наценки от оптовой суммы без НДС.
- «Наценка от с НДС в %» — процент наценки от оптовой суммы с НДС.
* Как настроить:
- Откройте вкладку «Настройка столбцов».
- Отметьте галочками столбцы, которые нужно включить в отчет.
- Порядок столбцов в интерфейсе соответствует порядку их вывода в отчете (слева направо).
* Правила работы:
- Минимум один столбец должен быть выбран, иначе отчет не сформируется (проверка в `validate`).
- Выбранные столбцы отображаются в таблице в порядке их следования в `pList`.
- Данные для каждого столбца рассчитываются в методе `line` на основе структуры `TLineData` (b1, nb1 и др.).
* Отображение:
- В заголовке таблицы столбцы группируются по блокам: «Товар (весь)», «ЖНВЛС» (если включена детализация), «НДС 10», «НДС 20%», «Без НДС» (см. метод `header`).
- Каждый блок повторяет выбранные столбцы в указанном порядке.
Вкладка "Настройка детализации"
Эта вкладка содержит множество опций, влияющих на уровень детализации и способ отображения данных в отчете.
1. Выводить детализацию по ЖНВЛС
* Описание: Добавляет блок «ЖНВЛС» в таблицу, показывающий суммы для товаров, отнесенных к ЖНВЛС (жизненно необходимые и важнейшие лекарственные средства). * Как работает:
- Если включено, в таблице появляется дополнительный блок столбцов «ЖНВЛС» с выбранными столбцами из «Настройка столбцов».
- Данные для ЖНВЛС извлекаются из поля `pdGNVLS.value` в SQL-запросах (например, `sum(case when pdGNVLS.value=1 then …)`).
* Отображение: Блок «ЖНВЛС» следует за блоком «Товар (весь)».
2. Выводить детализацию по НДС
* Описание: Добавляет блоки «НДС 10%», «НДС 20%» и «Без НДС» в таблицу, разделяя суммы по ставкам НДС. * Как работает:
- Если включено, данные делятся на три категории в зависимости от ставки НДС (10%, 18/20%, без НДС), определяемой полем `detailNDS` или `detailNDSSale`.
- Расчет выполняется в SQL-запросах с условиями вроде `sum(case when %7=10 then …)` (см. методы `bDetailSale`, `bDetailCashlessDoc` и др.).
* Отображение: Блоки следуют за «Товар (весь)» и «ЖНВЛС» (если включен).
3. Распределение сумм по ставкам НДС при детализации по НДС
* Описание: Определяет, как распределяются суммы по ставкам НДС в детализированных данных.
* Варианты:
- Розничные продажи по РознНДС операции, остальные операции по ОптНДС:
- Для розничных продаж используется НДС из `poNDS.nds`, для остальных операций — `pdNDSPercent.value`.
- Розничные продажи по РознНДС операции, остальные операции по РознНДС позиции:
- Розничные продажи используют `poNDS.nds`, остальные — НДС позиции на момент операции.
- Распределение только по ОптНДС позиции:
- Все операции используют `pdNDSPercent.value`.
- Распределение по Розн.НДС на момент операции:
- Используется `po.data3` (НДС на момент операции) для всех операций.
* Как работает:
- Выбранный вариант влияет на переменные `detailNDS` и `detailNDSSale` в методе `_render`.
- Эти переменные определяют логику условий в SQL-запросах.
* Отображение: Влияет на значения в блоках «НДС 10%», «НДС 20%» и «Без НДС».
4. Выводить детализацию по операциям
* Описание: Включает разбивку операций по дням или документам в зависимости от типа операции. * Как работает:
- Если включено, для каждого типа операции (например, продажи, приход, расход) добавляются строки с детализацией (см. методы `bDetailSale`, `detailOperationLavel1` и др.).
- Без этой опции данные агрегируются по группам без разбивки.
* Отображение: Под каждой группой операций появляются строки с датой, номером документа и суммами.
5. При отключенной детализации выделять скидку в продажах
* Описание: Выделяет сумму скидок в блоке продаж, даже если детализация по операциям отключена. * Как работает:
- Если включено, скидки рассчитываются отдельно в методе `bDetailDiscount` и добавляются как отдельные строки.
* Отображение: Скидки отображаются в блоке «Расход. Продажа» с комментарием.
6. Номера накладных поставщика в детализации приходных накладных
* Описание: Включает номера накладных поставщика в строках детализации приходных накладных. * Как работает:
- Если включено, в методе `detailOperationLavel2` для операции типа 1 (приход) используется поле `x.internalNumber` вместо `d.number`.
* Отображение: В столбце «номер» отображается номер накладной поставщика.
7. Внутренние номера накладных в детализации приходных накладных
* Описание: Включает внутренние номера накладных в строках детализации приходных накладных. * Как работает:
- Если включено, используется поле `d.number`. Если включены оба варианта (поставщика и внутренние), номера комбинируются через «/».
* Отображение: В столбце «номер» отображается внутренний номер или комбинация номеров.
8. Номера КСФ при детализации возвратов поставщикам
* Описание: Включает номера корректировочных счетов-фактур (КСФ) в детализации возвратов. * Как работает:
- Если включено, в методе `detailOperationLavel2` для операции типа 6 используется поле `cashlessAttr.corrSchetFact`.
* Отображение: В столбце «номер» отображается номер КСФ вместо стандартного номера документа.
9. Не группировать по поставщикам в детализации приходных накладных
* Описание: Отключает группировку приходных накладных по поставщикам. * Как работает:
- Если включено, метод `detailOperationLavel1` для операции типа 1 вызывает `detailOperationLavel2` напрямую, минуя группировку.
* Отображение: Каждая накладная отображается отдельной строкой без промежуточных итогов по поставщикам.
10. Не детализировать по накладным в блоке Приходная накладная
* Описание: Убирает разбивку по накладным в блоке приходных операций. * Как работает:
- Если включено, метод `detailOperationLavel2` для операции типа 1 не вызывается, и данные агрегируются.
* Отображение: Блок «Приходная накладная» содержит только общие суммы без детализации.
11. Исключать блоки с галками
* Описание: Позволяет исключить из отчета определенные блоки операций. * Варианты:
- «Приход. Возврат продажи»
- «Приход. Излишки»
- «Расход. Продажа»
- «Расход. Списание»
- «Прочие. Переоценка»
- «Прочие. Разукомплектация»
* Как работает:
- Отмеченные блоки исключаются из расчета в методе `_render` (проверка `excludeBlock.contains()`).
- Исключение может привести к расхождению итогов с содержимым отчета (предупреждение в интерфейсе).
* Отображение: Исключенные блоки не появляются в таблице.
12. Выделять комиссию в отчете
* Описание: Разделяет отчет на две части: без комиссии и по комиссии. * Как работает:
- Если включено, отчет формируется дважды:
- Сначала с фильтром `pdCommission.value=0` (без комиссии).
- Затем с фильтром `pdCommission.value!=0` (по комиссии).
- Оба отчета выводятся последовательно с разделителем (`hr()`).
* Отображение: Заголовок отчета дополняется «(без комиссии)» или «(по комиссии)».
Вкладка "Подписи"
* Описание: Позволяет настроить подписи и ориентацию печати. * Опции:
- Верхняя подпись: Добавляет блок подписей в начало отчета (материально-ответственное лицо и заведующая/бухгалтер).
- Нижняя подпись: Добавляет блок подписей в конец отчета (руководитель, материально-ответственное лицо, бухгалтер/заведующая).
- Ориентация печати: Выбор между книжной (Portrait) и альбомной (Landscape) ориентацией.
* Как работает:
- Подписи формируются в методах `printTopSignBlock` и `printBottomSignBlock` с использованием данных из конфигурации (`unit.my.somebodyPersonFIO`, `unit.my.rukovod` и др.).
- Ориентация задается через `defaultPrinterOrientation`.
* Отображение:
- Верхняя подпись: перед таблицей.
- Нижняя подпись: после таблицы с указанием количества приложенных документов (`docCount`).
Вкладка "Тип позиций"
* Описание: Фильтрует данные по типу позиций (Мираптек и маркировка). * Опции:
- Мираптек:
- «Все позиции» — без фильтрации.
- «Кроме Мираптек» — исключает позиции с `pdMiraptek.value=1`.
- «Только Мираптек» — включает только позиции с `pdMiraptek.value=1`.
- Маркировка:
- Условие фильтрации задается через `statementMarked().condition` (например, по `pdMark.value`).
* Как работает:
- Фильтры применяются в SQL-запросах через условия `mirAptek` и `markedCondition`.
* Отображение: Влияет на выборку данных, но не выделяется отдельно в отчете.
Правила и рекомендации
1. Обязательные настройки: Выбор склада и хотя бы одного столбца — обязательные условия для формирования отчета.
2. Детализация и производительность: Включение большого числа опций детализации может увеличить время формирования отчета.
3. Расхождения в суммах: Исключение блоков или округление до копеек может привести к несоответствиям в итогах.
4. Экспорт: Для больших отчетов рекомендуется использовать CSV, так как HTML и XLSX имеют ограничения по количеству строк (см. `report.maxRowsForRenderHtml` и `report.maxRowsForRenderExcel`).
Эта инструкция охватывает все настройки товарного отчета и поможет вам адаптировать его под ваши задачи. Если возникнут вопросы, обратитесь к администратору системы!