В типовой конфигурации «1С:Бухгалтерия предприятия 3.0» (БП 3.0) пользователи часто сталкиваются с тем, что в окне «Связанные документы» (структура подчиненности) вместо внутренних номеров документов отображаются данные входящих документов поставщика (номер и дата входящего документа). Это поведение заложено разработчиками для удобства бухгалтеров, но в ряде случаев требуется вернуть стандартное отображение «Номер от Даты». Разберем подробно, как устроена эта механика и как ее изменить.
Для начала выясним, откуда платформа берет строку, которую мы видим в списке. В системе 1С:Предприятие существует несколько уровней формирования представления объекта:
ОбработкаПолученияПолейПредставления и ОбработкаПолученияПредставления позволяют программно переопределить строку для всех мест в системе.ДанныеПервичныхДокументов, где хранятся уже готовые строковые представления для оптимизации работы списков.Рассмотрим по шагам, где именно вносить правки, чтобы изменить логику вывода документов поступления.
Проанализируем работу модуля менеджера документа. Если нам нужно изменить представление документа глобально во всей базе (и в связанных документах, и в полях выбора), следует использовать стандартные события платформы. Рассмотрим пример кода, который можно разместить в модуле менеджера соответствующего документа (например, ПоступлениеТоваровИУслуг):
#Область ОбработчикиСобытий
Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Поля.Добавить("Номер");
Поля.Добавить("Дата");
КонецПроцедуры
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Представление = СтрШаблон(НСтр("ru = 'Поступление (акт, накладная) № %1 от %2'"), Данные.Номер, Формат(Данные.Дата, "ДЛФ=D"));
КонецПроцедуры
#КонецОбласти
Использование этого метода гарантирует, что везде, где система запрашивает поле Представление, будет выводиться именно ваш формат. Однако в «Бухгалтерии 3.0» этот метод может перекрываться логикой общих модулей, которые подставляют данные входящего документа.
Если задача стоит изменить отображение только в окне структуры подчиненности, не затрагивая остальные части системы, нам необходимо изучить общую форму СвязанныеДокументы. В этой форме за формирование дерева отвечает программный код, который делает запрос к базе данных.
Разберем функцию ПредставлениеОбъектаДляВыводаВОтчет, которая находится в модуле этой формы. Она принимает выборку данных и достраивает строковое представление:
&НаСервере
Функция ПредставлениеОбъектаДляВыводаВОтчет(Выборка)
ПредставлениеОбъекта = Выборка.Представление;
МетаданныеОбъекта = Выборка.Ссылка.Метаданные();
Если ОбщегоНазначения.ЭтоДокумент(МетаданныеОбъекта) Тогда
Если (Выборка.СуммаДокумента <> 0) И (Выборка.СуммаДокумента <> NULL) Тогда
ПредставлениеОбъекта = ПредставлениеОбъекта
+ " " + НСтр("ru = 'на сумму'")
+ " " + Выборка.СуммаДокумента
+ " " + Выборка.Валюта;
КонецЕсли;
Иначе
ПредставлениеОбъекта = ПредставлениеОбъекта + " (" + ОбщегоНазначения.ПредставлениеОбъекта(МетаданныеОбъекта) + ")";
КонецЕсли;
Возврат ПредставлениеОбъекта;
КонецФункции
Обратите внимание: переменная Выборка.Представление уже содержит в себе ту строку, которую мы хотим изменить. Чтобы понять, как она формируется, нужно найти функцию ПолучитьВыборкуПоРеквизитамОбъекта в том же модуле. В ней исполняется запрос, где выбирается поле Представление.
Выясним причину: в 1С:Бухгалтерии для многих документов поступления поле Представление в запросе — это не просто стандартная функция платформы, а результат работы подписки на событие, которая записывает данные в регистр ДанныеПервичныхДокументов.
В конфигурации БП 3.0 существует регистр сведений ДанныеПервичныхДокументов. Система использует его для того, чтобы быстро выводить информацию о документах в списках, не обращаясь к тяжелым таблицам самих документов. Если в этом регистре для документа заполнены поля входящего номера, то именно они будут попадать в Представление.
Чтобы решить проблему через расширение конфигурации, мы можем:
СвязанныеДокументы.&Вместо для функции ПолучитьВыборкуПоРеквизитамОбъекта или модифицировать запрос так, чтобы для типа ДокументСсылка.ПоступлениеТоваровИУслуг он брал не поле Представление, а конструировал строку из полей Номер и Дата.Посмотрим на пример того, как может выглядеть измененный фрагмент запроса в расширении для получения корректного номера:
// Фрагмент измененного запроса
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Ссылка,
| Проведен КАК Проведен,
| ПометкаУдаления,
| СуммаДокумента КАК СуммаДокумента,
| ВалютаДокумента КАК Валюта,
| ВЫБОР
| КОГДА Ссылка ССЫЛКА Документ.ПоступлениеТоваровИУслуг
| ТОГДА ""Поступление № "" + Номер + "" от "" + ПОДСТРОКА(ВЫРАЗИТЬ(Дата КАК СТРОКА(20)), 1, 10)
| ИНАЧЕ Представление
| КОНЕЦ КАК Представление
|ИЗ
| Документ.ПоступлениеТоваровИУслуг КАК Документ"
Мы проанализировали ситуацию и выяснили, что в 1С:Бухгалтерии 3.0 представление ссылок в связанных документах жестко связано с логикой БСП и регистром первичных документов. Для изменения этого поведения у нас есть два пути: глобальный (через модуль менеджера документа) и локальный (через правку формы связанных документов в расширении).
Важный совет: Прежде чем вносить изменения, уточните у пользователей, действительно ли им мешает входящий номер. Часто бухгалтеры ищут документы именно по бумажным оригиналам от поставщика, и типовое поведение системы (отображение входящего номера) помогает им в работе гораздо больше, чем внутренние номера системы 1С.
Если же решение принято, наиболее корректным и безопасным методом будет использование расширения конфигурации. Это позволит сохранить возможность типового обновления программы и точечно изменить только нужный фрагмент интерфейса, не затрагивая критически важные механизмы учета.