Когда вы сталкиваетесь с ситуацией, что внешний отчет на Системе Компоновки Данных (СКД) в 1С не выводит все поля, которые вы ожидаете, особенно числовые, такие как "Сумма", это может вызывать недоумение. Вы составляете, казалось бы, простейший запрос, он прекрасно работает в консоли, но отчет упорно отказывается показывать нужную колонку. В этой статье мы подробно разберем, почему такая проблема возникает, и как ее эффективно диагностировать и устранить, опираясь на опыт разработчиков и распространенные ошибки.
Давайте вместе проанализируем возможные причины и методы их решения, начиная с наиболее очевидных и переходя к более глубоким нюансам работы СКД и платформы 1С.
Одной из наиболее частых причин, почему числовые поля, такие как "Сумма", не отображаются в отчетах СКД, является их некорректное или отсутствующее определение в качестве ресурсов. Система Компоновки Данных в 1С имеет свою логику обработки числовых показателей. По умолчанию, если поле является числовым и вы хотите его агрегировать (суммировать, усреднять, находить максимум/минимум) или просто выводить в детальных записях как числовое значение, оно должно быть явно определено как ресурс.
Давайте рассмотрим, как это сделать и почему это важно:
Понимание роли ресурсов: В СКД ресурсы — это поля, для которых могут быть рассчитаны итоги по различным группировкам. Даже если вы выводите детальные записи без группировок, СКД все равно ожидает, что числовые поля, предназначенные для подсчета, будут обозначены как ресурсы. Это позволяет платформе корректно обрабатывать их, даже если потом появятся группировки или итоги.
Определение поля "Сумма" как ресурса:
Для того чтобы поле "Сумма" (или любое другое числовое поле, которое вы хотите отобразить) появилось в отчете, выполните следующие шаги в настройках схемы компоновки данных:
Откройте схему компоновки данных вашего отчета в конфигураторе (обычно это вкладка "Схема компоновки данных" в форме отчета).
Перейдите на вкладку "Ресурсы".
Нажмите кнопку "Добавить" (обычно зеленый плюс).
В поле "Выражение" укажите имя вашего поля, например, Сумма.
В поле "Функция" выберите желаемую функцию агрегации. Для простых случаев, когда вы хотите видеть сумму по группировкам или просто значение в детальных записях, часто выбирают Сумма(Сумма). Если вы хотите просто вывести значение без агрегации, можно использовать Сумма, но будьте внимательны, так как при наличии нескольких записей для одной группировки СКД будет пытаться их агрегировать. Для детальных записей обычно достаточно указать просто имя поля.
Задайте "Имя" ресурса (например, СуммаВедомости) и "Заголовок" (например, "Сумма").
Проверка "Поле не найдено": В сообщении 8 мы видим, что при попытке вывести поле "Сумма" в группировках без определения его как ресурса, возникает ошибка "Поле не найдено: Сумма". Это является четким индикатором того, что СКД не знает, как обрабатывать это поле в контексте итогов или детального вывода. Правильное определение ресурса помогает СКД "увидеть" это поле и понять его назначение.
Если после определения поля как ресурса проблема все еще сохраняется, перейдем к следующим шагам.
Проблемы с кэшированием являются бичом многих разработчиков 1С. Даже если вы внесли изменения в схему компоновки данных, платформа может продолжать использовать старые, закэшированные настройки отчета или формы. Это особенно актуально для внешних отчетов.
Очистка кэша приложения:
Начнем с самого простого. Часто бывает достаточно очистить кэш 1С:Предприятия. Для этого:
Закройте все сеансы 1С.
При запуске 1С:Предприятия из списка баз выберите вашу информационную базу.
Нажмите кнопку "Изменить".
В открывшемся окне несколько раз нажмите "Далее", пока не дойдете до окна "Каталог информационной базы".
Запомните или скопируйте путь к каталогу информационной базы.
Удалите папки кэша. Обычно они находятся в профиле пользователя (например, C:\Users\ИМЯ_ПОЛЬЗОВАТЕЛЯ\AppData\Roaming\1C\1CE\ и C:\Users\ИМЯ_ПОЛЬЗОВАТЕЛЯ\AppData\Local\1C\1CE\). В этих папках ищите подпапки с длинными буквенно-цифровыми именами (UID), которые соответствуют вашей базе данных, и удалите их. Также можно просто удалить все содержимое этих папок, если вы уверены, что не повредите другие базы.
Запустите 1С:Предприятие снова.
Создание нового отчета с новым именем:
В некоторых случаях, особенно с внешними отчетами, очистка кэша может не помочь, если проблема застряла на уровне УИД формы отчета или его настроек. Как предлагает сообщение 2, попробуйте следующее:
Создайте новый внешний отчет с абсолютно новым, уникальным именем (например, "ВедомостьНаВыплатуЗарплатыНовый").
Скопируйте в него весь код запроса и схему компоновки данных из проблемного отчета.
Запустите новый отчет. Иногда это помогает обойти проблемы, связанные с закэшированными или поврежденными пользовательскими настройками старого отчета.
Если используются пользовательские настройки, попробуйте их сбросить или удалить.
Также может помочь удаление формы отчета и создание новой, что сбрасывает УИД формы и привязанные к нему настройки СКД.
Давайте внимательно рассмотрим запрос из сообщения 1:
ВЫБРАТЬ
ВедомостьНаВыплатуЗарплаты.Ссылка КАК Ведомость,
ВедомостьНаВыплатуЗарплаты.ФизическоеЛицо КАК ФизическоеЛицо,
ВедомостьНаВыплатуЗарплаты.Сумма КАК Сумма
ИЗ
Документ.ВедомостьНаВыплатуЗарплатыВБанк.НДФЛ КАК ВедомостьНаВыплатуЗарплаты
ГДЕ
ВедомостьНаВыплатуЗарплаты.Ссылка.Проведен
И ВедомостьНаВыплатуЗарплаты.Ссылка.Дата МЕЖДУ &НачалоПериода И &ОкончаниеПериода
Здесь мы видим обращение к Документ.ВедомостьНаВыплатуЗарплатыВБанк.НДФЛ. Часть НДФЛ здесь, скорее всего, является табличной частью документа "ВедомостьНаВыплатуЗарплатыВБанк". Хотя такой синтаксис допустим в языке запросов 1С, иногда при работе с СКД могут возникать нюансы, если платформа не может корректно интерпретировать такую структуру, особенно в контексте прав доступа или специфических настроек.
Для большей ясности и надежности, мы можем перестроить запрос, явно указывая табличную часть как отдельный источник данных и соединяя ее с основным документом. Это может исключить потенциальные проблемы интерпретации:
ВЫБРАТЬ
ВедомостьНДФЛ.Ссылка КАК Ведомость,
ВедомостьНДФЛ.ФизическоеЛицо КАК ФизическоеЛицо,
ВедомостьНДФЛ.Сумма КАК Сумма
ИЗ
Документ.ВедомостьНаВыплатуЗарплатыВБанк.НДФЛ КАК ВедомостьНДФЛ
ГДЕ
ВедомостьНДФЛ.Ссылка.Проведен
И ВедомостьНДФЛ.Ссылка.Дата МЕЖДУ &НачалоПериода И &ОкончаниеПериода
В этом варианте мы просто переименовали псевдоним таблицы, чтобы он более явно соответствовал табличной части. Это может быть небольшим изменением, но иногда такие детали имеют значение для СКД, особенно если есть какие-то внутренние механизмы обработки, чувствительные к структуре запроса.
Если же проблема остается, рассмотрим еще более явный подход, если НДФЛ действительно является табличной частью, а не реквизитом или регистром:
ВЫБРАТЬ
ДокументВедомость.Ссылка КАК Ведомость,
ТабличнаяЧастьНДФЛ.ФизическоеЛицо КАК ФизическоеЛицо,
ТабличнаяЧастьНДФЛ.Сумма КАК Сумма
ИЗ
Документ.ВедомостьНаВыплатуЗарплатыВБанк КАК ДокументВедомость
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВедомостьНаВыплатуЗарплатыВБанк.НДФЛ КАК ТабличнаяЧастьНДФЛ
ПО ДокументВедомость.Ссылка = ТабличнаяЧастьНДФЛ.Ссылка
ГДЕ
ДокументВедомость.Проведен
И ДокументВедомость.Дата МЕЖДУ &НачалоПериода И &ОкончаниеПериода
Такой запрос, хотя и немного сложнее, является более явным и может помочь, если СКД каким-то образом не справляется с прямым обращением к табличной части через точку. Обязательно проверьте, что поля ФизическоеЛицо и Сумма существуют именно в табличной части НДФЛ.
Даже если у пользователя полные права или, как кажется, достаточные для чтения данных, СКД может не отображать поля из-за ограничений прав доступа на уровне отдельных объектов. Мы часто забываем, что права могут быть настроены очень гранулировано.
Глубина прав доступа: Платформа 1С очень строго относится к правам. Проблема может быть не только на уровне документа в целом, но и на уровне его табличной части, или даже отдельных реквизитов. Если у пользователя нет права "Чтение" или "Просмотр" на какой-либо компонент данных, СКД просто отсечет эти данные, не выдавая явных ошибок в пользовательском режиме.
Проверка прав на документ и табличную часть:
Убедитесь, что у используемой роли есть право "Просмотр" (а не только "Чтение") для документа ВедомостьНаВыплатуЗарплатыВБанк и его табличной части НДФЛ. Иногда "Чтение" позволяет получить общие данные, но "Просмотр" необходим для корректного отображения в отчетах.
Если документ ВедомостьНаВыплатуЗарплатыВБанк может быть регистратором для нескольких регистров (или иметь несколько типов), убедитесь, что у пользователя есть права на все связанные регистраторы. СКД может отсекать данные, если права на один из типов отсутствуют.
Использование ВЫРАЗИТЬ для обхода ограничений (в некоторых случаях):
Иногда, если права настроены слишком тонко, и вы точно знаете, что данные должны быть доступны, можно попробовать использовать функцию ВЫРАЗИТЬ в запросе. Это может помочь явно указать тип поля и обойти некоторые ограничения, но чаще всего это "костыль", а не системное решение.
ВЫБРАТЬ
ВЫРАЗИТЬ(ВедомостьНДФЛ.Ссылка КАК Документ.ВедомостьНаВыплатуЗарплатыВБанк) КАК Ведомость,
ВЫРАЗИТЬ(ВедомостьНДФЛ.ФизическоеЛицо КАК Справочник.ФизическиеЛица) КАК ФизическоеЛицо,
ВЫРАЗИТЬ(ВедомостьНДФЛ.Сумма КАК Число) КАК Сумма
ИЗ
Документ.ВедомостьНаВыплатуЗарплатыВБанк.НДФЛ КАК ВедомостьНДФЛ
// ... остальная часть запроса
Этот подход стоит применять осторожно и только после того, как все другие способы проверки прав были исчерпаны, поскольку он лишь маскирует проблему, а не устраняет ее корень.
Хотя вы и указали, что "Сумма" определена как ресурс, давайте перепроверим более тонкие настройки. В сообщении 7 прозвучало "Она определена как ресурс конечно же", но дьявол, как говорится, кроется в деталях.
Настройка "Рассчитывать по":
На вкладке "Ресурсы" для каждого ресурса есть поле "Рассчитывать по". Если в этом поле указаны конкретные группировки (например, "ФизическоеЛицо"), а в вашем отчете выводите только "Детальные записи" или другие группировки, то значение ресурса может не отображаться. Убедитесь, что либо это поле пустое (что означает расчет по всем группировкам), либо оно соответствует тем группировкам, которые фактически используются в отчете.
Отображение ресурсов в детальных записях:
Иногда, если выбраны только поля-ресурсы, а группировок нет, СКД может рассматривать это как запрос общего итога и вывести только одну запись с агрегированным результатом (суммой по всем данным). Убедитесь, что в "Выбранных полях" (в настройках отчета) для "Детальных записей" явно указано поле "Сумма" (или как вы его назвали в ресурсах), и что у вас нет нежелательных группировок, скрывающих детали.
Если ваше поле "Сумма" не является прямым полем из запроса, а представляет собой вычисляемое поле, то это добавляет дополнительные нюансы. Мы должны внимательно рассмотреть, как оно определено.
Зависимость от других полей:
Убедитесь, что все поля, используемые в выражении вычисляемого поля для "Суммы", также доступны и правильно определены в схеме компоновки данных. Если какое-то из зависимых полей недоступно (например, из-за прав доступа или отсутствия в запросе), то и вычисляемое поле не будет работать.
Использование других вычисляемых полей:
В выражениях вычисляемых полей нельзя напрямую использовать другие вычисляемые поля (именно в выражениях, в выбранных полях - можно). Если ваше "Сумма" построено на другом вычисляемом поле, вам придется переписать выражение, включив в него все исходные поля.
Включение в макет отчета:
Проверьте, что вычисляемое поле "Сумма" не только добавлено в схему компоновки данных, но и фактически включено в макет отчета или в список "Выбранных полей" для детальных записей или соответствующих группировок. Без этого оно не будет отображаться.
Иногда некорректное сохранение или загрузка настроек отчета может привести к тому, что новое поле или измененные параметры не будут применяться. Это может быть связано с особенностями платформы или с программной манипуляцией настройками.
Программная работа с настройками:
Если вы программно изменяете настройки отчета (например, в модуле формы отчета), убедитесь, что вы правильно работаете с объектами КомпоновщикНастроек и его свойствами. Иногда можно столкнуться с ситуацией, когда КомпоновщикНастроек.ПолучитьНастройки() и КомпоновщикНастроек.Настройки могут возвращать разные или неактуальные значения, особенно после программных изменений.
// Пример программного доступа к настройкам
// Убедитесь, что вы используете актуальные настройки
НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();
// Или:
НастройкиОтчета = КомпоновщикНастроек.Настройки;
// Пример добавления поля в выбранные поля (если это делается программно)
Если НастройкиОтчета.Выбор.Элементы.Найти("Сумма") = Неопределено Тогда
НовыйЭлементВыбора = НастройкиОтчета.Выбор.Элементы.Добавить(Тип("ПолеКомпоновкиДанных"));
НовыйЭлементВыбора.Поле = Новый ПолеКомпоновкиДанных("Сумма");
КонецЕсли;
КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиОтчета);
Проверка сохранения пользовательских настроек:
Если пользователи сохраняют свои варианты отчета, убедитесь, что при их сохранении и последующей загрузке новые поля не "теряются". Иногда старые сохраненные варианты могут не содержать новых полей из обновленной схемы.
В современных конфигурациях 1С активно используются функциональные опции. Они позволяют включать или отключать определенный функционал, в том числе видимость полей, без изменения конфигурации. Если в вашей конфигурации используются функциональные опции, поле "Сумма" может быть недоступно для вывода, даже если оно присутствует в наборе данных схемы.
Проверка функциональных опций:
Мы должны убедиться, что функциональные опции, которые потенциально могут влиять на видимость данных по выплате зарплаты или НДФЛ, включены и не скрывают поле "Сумма". Это обычно проверяется в режиме "1С:Предприятие" через раздел "Администрирование" -> "Настройки программы" (или аналогичный раздел, зависящий от конфигурации).
Диагностика:
Если вы предполагаете, что дело в функциональных опциях, попробуйте временно отключить связанные опции или, наоборот, включить все, что относится к зарплате и НДФЛ, чтобы исключить эту причину.
Иногда самое простое решение оказывается наиболее эффективным. Мы должны убедиться, что поле "Сумма" явно выбрано для отображения в настройках отчета.
Настройки СКД в режиме "1С:Предприятие":
Запустите отчет в режиме "1С:Предприятие".
Нажмите кнопку "Настройки..." или "Ещё" -> "Изменить вариант отчета...".
Перейдите на вкладку "Настройки".
Разверните раздел "Детальные записи".
Убедитесь, что в списке "Выбранные поля" присутствует ваше поле "Сумма". Если его нет, добавьте его с помощью кнопки "Добавить поле".
Также проверьте, нет ли у вас каких-либо нежелательных группировок, которые могут скрывать детальные записи или поле "Сумма" в них.
Настройки СКД в конфигураторе:
Аналогичную проверку следует провести в конфигураторе на вкладке "Настройки" схемы компоновки данных. Если отчет имеет предопределенные настройки, убедитесь, что "Сумма" включена в "Выбранные поля" для детальных записей.
Таким образом, мы видим, что проблема с неотображением поля "Сумма" во внешнем отчете на СКД может иметь множество причин, от банальной ошибки в настройке ресурсов до более глубоких проблем с правами доступа или кэшированием. Мы рекомендуем последовательно проверять каждый из этих пунктов, начиная с определения поля как ресурса и очистки кэша, поскольку именно эти действия чаще всего приводят к решению.
Внимательная и методичная отладка обязательно приведет вас к успеху в поиске и устранении этой, на первый взгляд, странной проблемы.