фармэксперт.учёт:отчёты:torg29

Товарный отчет (форма ТОРГ-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`:
  1. «Опт Без НДС» — оптовая сумма без учета НДС.
  2. «Опт с НДС» — оптовая сумма с учетом НДС.
  3. «Сумма опт НДС» — разница между оптовой суммой с НДС и без НДС.
  4. «Розн Без НДС» (или «Продажа опт Без НДС») — розничная сумма без НДС (название зависит от конфигурации `unit.orderIncomeProvider`).
  5. «Розн с НДС» (или «Продажа опт с НДС») — розничная сумма с НДС.
  6. «Сумма розн НДС» — разница между розничной суммой с НДС и без НДС. Столбец показывает сумму НДС, рассчитанную от розничной стоимости товара на основе выбранной ставки НДС. Программа выбирает ставку НДС автоматически. Если включён функционал розничного НДС, используются ставки, указанные в Номенклатурном каталоге. Если функционал не задействован, применяется оптовая ставка НДС из накладной поставщика. Для позиций со ставками 5% и 7% оптовая ставка устанавливается равной 0, так как эти ставки не являются общеустановленными для расчёта НДС.
  7. «Наценка от Без НДС» — разница между розничной суммой с НДС и оптовой без НДС.
  8. «Наценка от с НДС» — разница между розничной суммой с НДС и оптовой с НДС.
  9. «Наценка от Без НДС в %» — процент наценки от оптовой суммы без НДС.
  10. «Наценка от с НДС в %» — процент наценки от оптовой суммы с НДС.
  • Как настроить:
    • Откройте вкладку «Настройка столбцов».
    • Отметьте галочками столбцы, которые нужно включить в отчет.
    • Порядок столбцов в интерфейсе соответствует порядку их вывода в отчете (слева направо).
  • Правила работы:
    • Минимум один столбец должен быть выбран, иначе отчет не сформируется (проверка в `validate`).
    • Выбранные столбцы отображаются в таблице в порядке их следования в `pList`.
    • Данные для каждого столбца рассчитываются в методе `line` на основе структуры `TLineData` (b1, nb1 и др.).
  • Отображение:
    • В заголовке таблицы столбцы группируются по блокам: «Товар (весь)», «ЖНВЛС» (если включена детализация), «НДС 10», «НДС 20%», «Без НДС» (см. метод `header`).
    • Каждый блок повторяет выбранные столбцы в указанном порядке.

Вкладка "Настройка детализации"

Эта вкладка содержит множество опций, влияющих на уровень детализации и способ отображения данных в отчете.

  • Описание: Добавляет блок «ЖНВЛС» в таблицу, показывающий суммы для товаров, отнесенных к ЖНВЛС (жизненно необходимые и важнейшие лекарственные средства).
  • Как работает:
    • Если включено, в таблице появляется дополнительный блок столбцов «ЖНВЛС» с выбранными столбцами из «Настройка столбцов».
    • Данные для ЖНВЛС извлекаются из поля `pdGNVLS.value` в SQL-запросах (например, `sum(case when pdGNVLS.value=1 then …)`).
  • Отображение: Блок «ЖНВЛС» следует за блоком «Товар (весь)».
  • Описание: Добавляет блоки «НДС 10%», «НДС 20%» и «Без НДС» в таблицу, разделяя суммы по ставкам НДС.
  • Как работает:
    • Если включено, данные делятся на три категории в зависимости от ставки НДС (10%, 18/20%, без НДС), определяемой полем `detailNDS` или `detailNDSSale`.
    • Расчет выполняется в SQL-запросах с условиями вроде `sum(case when %7=10 then …)` (см. методы `bDetailSale`, `bDetailCashlessDoc` и др.).
  • Отображение: Блоки следуют за «Товар (весь)» и «ЖНВЛС» (если включен).
  • Описание: Определяет, как распределяются суммы по ставкам НДС в детализированных данных.
  • Варианты:
  1. Розничные продажи по РознНДС операции, остальные операции по ОптНДС:
    • Для розничных продаж используется НДС из `poNDS.nds`, для остальных операций — `pdNDSPercent.value`.
  2. Розничные продажи по РознНДС операции, остальные операции по РознНДС позиции:
    • Розничные продажи используют `poNDS.nds`, остальные — НДС позиции на момент операции.
  3. Распределение только по ОптНДС позиции:
    • Все операции используют `pdNDSPercent.value`.
  4. Распределение по Розн.НДС на момент операции:
    • Используется `po.data3` (НДС на момент операции) для всех операций.
  • Как работает:
  • Выбранный вариант влияет на переменные `detailNDS` и `detailNDSSale` в методе `_render`.
  • Эти переменные определяют логику условий в SQL-запросах.
  • Отображение: Влияет на значения в блоках «НДС 10%», «НДС 20%» и «Без НДС».

Расчёт НДС при продаже через ККМ в соответствии с ОФД

  • Описание: Включает разбивку операций по дням или документам в зависимости от типа операции.
  • Как работает:
    • Если включено, для каждого типа операции (например, продажи, приход, расход) добавляются строки с детализацией (см. методы `bDetailSale`, `detailOperationLavel1` и др.).
    • Без этой опции данные агрегируются по группам без разбивки.
  • Отображение: Под каждой группой операций появляются строки с датой, номером документа и суммами.
  • Описание: Выделяет сумму скидок в блоке продаж, даже если детализация по операциям отключена.
  • Как работает:
    • Если включено, скидки рассчитываются отдельно в методе `bDetailDiscount` и добавляются как отдельные строки.
  • Отображение: Скидки отображаются в блоке «Расход. Продажа» с комментарием.
  • Описание: Включает номера накладных поставщика в строках детализации приходных накладных.
  • Как работает:
    • Если включено, в методе `detailOperationLavel2` для операции типа 1 (приход) используется поле `x.internalNumber` вместо `d.number`.
  • Отображение: В столбце «номер» отображается номер накладной поставщика.
  • Описание: Включает внутренние номера накладных в строках детализации приходных накладных.
  • Как работает:
    • Если включено, используется поле `d.number`. Если включены оба варианта (поставщика и внутренние), номера комбинируются через «/».
  • Отображение: В столбце «номер» отображается внутренний номер или комбинация номеров.
  • Описание: Включает номера корректировочных счетов-фактур (КСФ) в детализации возвратов.
  • Как работает:
    • Если включено, в методе `detailOperationLavel2` для операции типа 6 используется поле `cashlessAttr.corrSchetFact`.
  • Отображение: В столбце «номер» отображается номер КСФ вместо стандартного номера документа.
  • Описание: Отключает группировку приходных накладных по поставщикам.
  • Как работает:
    • Если включено, метод `detailOperationLavel1` для операции типа 1 вызывает `detailOperationLavel2` напрямую, минуя группировку.
  • Отображение: Каждая накладная отображается отдельной строкой без промежуточных итогов по поставщикам.
  • Описание: Убирает разбивку по накладным в блоке приходных операций.
  • Как работает:
    • Если включено, метод `detailOperationLavel2` для операции типа 1 не вызывается, и данные агрегируются.
  • Отображение: Блок «Приходная накладная» содержит только общие суммы без детализации.
  • Описание: Позволяет исключить из отчета определенные блоки операций.
  • Варианты:
    • «Приход. Возврат продажи»
    • «Приход. Излишки»
    • «Расход. Продажа»
    • «Расход. Списание»
    • «Прочие. Переоценка»
    • «Прочие. Разукомплектация»
  • Как работает:
    • Отмеченные блоки исключаются из расчета в методе `_render` (проверка `excludeBlock.contains()`).
    • Исключение может привести к расхождению итогов с содержимым отчета (предупреждение в интерфейсе).
  • Отображение: Исключенные блоки не появляются в таблице.
  • Описание: Разделяет отчет на две части: без комиссии и по комиссии.
  • Как работает:
    • Если включено, отчет формируется дважды:
      • Сначала с фильтром `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`).

Эта инструкция охватывает все настройки товарного отчета и поможет вам адаптировать его под ваши задачи. Если возникнут вопросы, обратитесь к администратору системы!

  • фармэксперт.учёт/отчёты/torg29.txt
  • Последнее изменение: 29112025/ 11:27
  • Рощупкин Олег