На основании поступлений создается расход материалов. Но из связанных документов его потом не видно. Нужно сделать так, чтобы расход был виден из поступления в отчете по связанным документам.
Данное задание было успешно реализовано в виде расширения.
В современных программах 1С (например, таких как БП, УТ, ERP) структура подчиненности документов определяется на основе класса КритерииОтбора.СвязанныеДокументы.
Этот класс является предопределенным и, к сожалению, в типовой конфигурации 1СБП 3.0 в состав этого класса не включен документ “Расход материалов” (внутреннее имя “ТребованиеНакладная”), т.е. в типовой конфигурации этот вид документов не участвует в построении структуры (дерева) связанных документов.
Для задачи - чтобы документ “Расход материалов” был виден (например) в структуре подчиненности документа “Поступление (акты, накладные, УПД)” на формы “Связанные документы” - доработка через расширение возможна, но по ряду особенностей не выглядит простой.
Сложность заключается в том, что на данном уровне развития “технологии расширений”, даже заимствовав класс КритерииОтбора.СвязанныеДокументы в расширение, мы не получаем ту же свободу действий над этим классом, какая доступна в основной конфигурации (в основной конфигурации для этого нужно разрешить изменения - со всеми вытекающими последствиями) и не можем этот класс переопределить, включив в него дополнительные объекты.
Таким образом, через “технологии расширений” нет возможности "напрямую" переопределить класс КритерииОтбора.СвязанныеДокументы, поэтому нужен "обходной путь", который будет сложнее.
ПРИНЦИПИАЛЬНАЯ СХЕМА РЕШЕНИЯ:
Заимствовать в расширение документ “Расход материалов (ТребованиеНакладная)” и добавить к нему реквизит - ДокументОснование.
Вывести этот реквизит на форму документа, чтобы для уже созданных документов “Расход материалов (ТребованиеНакладная)” можно было вручную подобрать “родительский” документ “Поступление (акты, накладные, УПД)”.
В модуль объекта документа “Расход материалов (ТребованиеНакладная)” добавить переопределение процедуры “ЗаполнитьПоДокументуОснованию” таким образом, чтобы при вводе этого документа на основании документа “Поступление (акты, накладные, УПД)” происходило автоматическое заполнение добавленного реквизита - ДокументОснование.
Заимствовать в расширение ОбщуюФорму.СвязанныеДокументы.
В модуле этой формы поработать над переопределением процедур участвующих в построении дерева связанных документов. Тут сложность заключается в том, что нужно аккуратно “вмешаться” в рекурсивные процедуры вывода как родительских, так и подчиненных документов.
Для вывода структуры родительских документов, необходимо к типовой структуре дерева родительских документов добавлять значения нового реквизита “ДокументОснование” из доработанного документа “Расход материалов (ТребованиеНакладная)”. Как раз этот реквизит будет содержать ссылку на родительский документ “Поступление (акты, накладные, УПД)”.
При выводе структуры подчиненных документов, необходимо к типовой структуре дерева подчиненных документов добавлять значения всех документов “Расход материалов (ТребованиеНакладная)”, которые были введены на основании текущего документа “Поступление (акты, накладные, УПД)”. При этом, можно проверить, если тип текущего документа не “Поступление (акты, накладные, УПД)” - то дальше строить дерево как обычно (по типовому алгоритму). Если тип текущего документа “Поступление (акты, накладные, УПД)” - то проверить, есть ли в базе документы “Расход материалов (ТребованиеНакладная)” у которых в реквизите ДокументОснование стоит ссылка на текущий документ “Поступление (акты, накладные, УПД)”. Если таких документов нет - то дальше тоже делаем всё как обычно. А вот если такие документы есть, тогда нужно “совместить” их (сложить в одну таблицу) вместе с другими подчиненными документами, отобранными по типовому критерию КритерииОтбора.СвязанныеДокументы и вывести на форму “Связанные документы”.
Тестировалось на релизе Бухгалтерия 3.0.105.14.