Почему номера строк в табличной части «Виды запасов» не совпадают с ТЧ «Товары» и как правильно строить запросы в УТ 11.4

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При разработке отчетов или кастомных механизмов в конфигурации 1С:Управление торговлей 11.4 (а также в ERP 2 и КА 2) программисты часто сталкиваются с неочевидным поведением табличных частей. Типичная ситуация: вы открываете документ, например, Отчет комиссионера (агентов) о продажах, переходите в форму Виды запасов и видите там идеальный порядок. Но стоит написать запрос к этой табличной части, как выясняется, что поле НомерСтроки живет своей жизнью и совершенно не соответствует позиции товара в основной таблице документа. Давайте разберем этот механизм детально и выясним, как с этим работать без ущерба для логики системы.

Анализ проблемы: почему НомерСтроки вводит в заблуждение

Рассмотрим ситуацию, которую описывают разработчики. В документе есть две ключевые таблицы: Товары (где пользователь указывает, что он продает) и ВидыЗапасов (где система хранит информацию, ЧТО ИМЕННО было списано — чей товар, с какой ГТД и по какому виду собственности). Для пользователя в интерфейсе эти таблицы выглядят синхронизированными. Однако технически это не так.

Выясним причину: поле НомерСтроки в 1С — это системный реквизит, который просто отражает физический индекс записи в конкретной таблице. Поскольку ТЧ ВидыЗапасов заполняется автоматически программными механизмами проведения, ее состав может кардинально отличаться от состава ТЧ Товары. Например, одна строка товара может породить три строки видов запасов, если товар списывается из разных партий или от разных комитентов. В этом случае порядковые номера в принципе не могут совпадать.

Проанализируем пример запроса, который может выдать "странные" результаты:


ВЫБРАТЬ
    ОтчетКомиссионераВидыЗапасов.НомерСтроки КАК НомерСтроки,
    ОтчетКомиссионераВидыЗапасов.АналитикаУчетаНоменклатуры.Номенклатура.Артикул КАК Артикул,
    ОтчетКомиссионераВидыЗапасов.АналитикаУчетаНоменклатуры.Номенклатура.Наименование КАК Наименование,
    ОтчетКомиссионераВидыЗапасов.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры
ИЗ
    Документ.ОтчетКомиссионера.ВидыЗапасов КАК ОтчетКомиссионераВидыЗапасов
ГДЕ
    ОтчетКомиссионераВидыЗапасов.Ссылка = &Ссылка

В данном случае НомерСтроки будет соответствовать порядку записей в таблице БД, который зачастую совпадает с порядком записей в регистре накопления Товары принятые на комиссию. Это происходит потому, что при проведении система берет готовую таблицу видов запасов и "пачкой" записывает ее в движения регистров. Но для связи с визуальной строкой в документе этот номер бесполезен.

Архитектурная роль таблицы «Виды запасов»

Чтобы понять, как работать с этими данными, разберем роль ТЧ ВидыЗапасов как буфера. В современных конфигурациях 1С (УТ 11, ERP 2) реализован механизм разделения товарного и финансового учета. Когда пользователь нажимает "Провести", система выполняет сложный расчет и записывает его результат в скрытую (или полускрытую) таблицу Виды запасов.

Ключевые особенности этого механизма:

  1. Связующее звено: Эта таблица является мостом между "желанием" пользователя (продать 10 штук) и реальностью склада (5 штук своих, 5 штук комиссионных).
  2. Источник для регистров: Все финансовые регистры (Себестоимость товаров, Товары организаций, Выручка и себестоимость продаж) строятся на основании данных именно из этой таблицы, а не из ТЧ Товары.
  3. Стабильность: После проведения данные в Видах запасов "засыпают". Это гарантирует, что при расчете себестоимости в конце месяца система будет использовать именно ту аналитику, которая была зафиксирована в момент продажи, даже если позже приходы были изменены задним числом.

Правильный способ связи: «Ключ связи» (Connection Key)

Как же нам соединить товар из основной части документа с его расшифровкой в видах запасов? Для этого в 1С предусмотрен специальный реквизит КлючСвязи.

Рассмотрим по шагам, как это работает:

  1. В табличной части Товары есть скрытый числовой реквизит КлючСвязи.
  2. В табличной части ВидыЗапасов также есть реквизит КлючСвязи.
  3. При заполнении видов запасов система присваивает строкам-расшифровкам тот же ключ, что и у родительской строки из таблицы товаров.

Посмотрим на пример правильного запроса, который корректно сопоставит данные:


ВЫБРАТЬ
    ТЧТовары.НомерСтроки КАК НомерСтрокиПользователя,
    ТЧТовары.Номенклатура КАК Номенклатура,
    ТЧВидыЗапасов.ВидЗапасов КАК ВидЗапасов,
    ТЧВидыЗапасов.Количество КАК КоличествоРасшифровка
ИЗ
    Документ.ОтчетКомиссионера.Товары КАК ТЧТовары
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ОтчетКомиссионера.ВидыЗапасов КАК ТЧВидыЗапасов
        ПО ТЧТовары.Ссылка = ТЧВидыЗапасов.Ссылка
        И ТЧТовары.КлючСвязи = ТЧВидыЗапасов.КлючСвязи
ГДЕ
    ТЧТовары.Ссылка = &Ссылка

Именно такой подход позволит вам вывести пользователю привычный ему НомерСтроки из основной таблицы, при этом показав детальную информацию из видов запасов.

Почему форма «Виды запасов» в интерфейсе выглядит иначе?

Многих смущает, что при нажатии кнопки "Открыть виды запасов" в документе открывается форма, где всё красиво и понятно. Важно понимать: эта форма (ФормаВводаВидовЗапасов) не является прямым отображением таблицы БД.

Проанализируем ситуацию: при открытии формы срабатывает процедура ЗаполнитьДеревоВидовЗапасов. Она выполняет динамический запрос, который группирует данные, соединяет их по КлючуСвязи и представляет в виде иерархии или последовательного списка. 1С тратит значительные вычислительные ресурсы, чтобы "причесать" данные для человека. В самой же базе данных (в таблицах SQL) эти записи хранятся так, как удобно серверу для быстрой записи движений.

Практические советы для разработчика

При работе с документами в УТ 11.4 придерживайтесь следующих правил, чтобы не попасть в ловушку "странного поведения" таблиц:

Подводя итог, можно сказать, что поведение таблиц в УТ 11.4 — это не "баг" и не "бизнес ради бизнеса", а следствие сложной архитектуры, рассчитанной на высокую производительность и точность финансового учета. Понимание механизма Ключа связи снимает все вопросы к "странным" номерам строк.

← На главную