Добрый день.

Печатная форма для документа "Счёт на оплату покупателю" подставляет номер банковского счёта обращаясь к тому, что указано в поле "Б/счет, касса". Это не совсем удобно для работы с государственными контрактами, так как под каждый контракт есть свой счёт. Бывает, что по невнимательности забывают выбрать корректный банковский счет и распечатывают документ с неверным номером счета.

Хотел подправить печатную форму, чтобы номер счета завязанный на данном контракте подставлялся автоматически, даже если в поле "Б/счет, касса" выбран совсем другой банковский счет. То есть как-то в обход что-ли.

Думал, что можно будет получить информацию о банковском счете ссылаясь на конкретный договор контрагента, но на этом мои знания закончились.

В форме Договора контрагента в нижней части можно перейти по ссылке с наименованием предмета договора и уже там посмотреть номер банковского счета, но не могу понять как это на языке 1С объяснить программе.

НомерСчета = ДокументСсылка.СтруктурнаяЕдиница.НомерСчета; //Это он по умолчанию тянет информацию по ссылке из поля "Б/счет, касса" насколько я понимаю.

А вот как указать, что хочу взять номер счета по ссылке из поля "Банковский счет" из контракта с заказчиком который связан с этим договором контрагента?

// Как я вижу это своим гуманитарным мозгом
НомерСчета = ДокументСсылка.ДоговорКонтрагента."тут вот не знаю как сослаться на контракт".БанковскийСчет.НомерСчета;

Подскажите в какую сторону копать.
---
```1c
    Контракт = ОбщегоНазначения275КлиентСервер.НайтиПодчиненныйКонтракт(ДокументСсылка.ДоговорКонтрагента);
    Если Контракт <> Неопределено Тогда
    НомерСчета = Контракт.БанковскийСчетКонтрагента.НомерСчета;
    Иначе
    //Тут обрабатываем если нет контракта
    КонецЕсли;
```
---
Нету конфигурации, не могу понять, как организовано хранение и связь объектов.
Поэтому напишу поверхностно:
Связь элементов может хранится в регистре сведений. В таком случае использовать метод РегистрыСведений[ИмяРегистра].Получить(Новый Структура([ИмяИзмерения], СсылкаВладельца)). Или ПолучитьПоследнее(, Если регистр периодический.
Возможно, элемент в табличной части владельца. В таком случае просто обход строк табличной части
Если же все гораздо тривиальнее, то выйти на целевой объект можно через точки, вроде
НомерСчета = ДокументСсылка.ДоговорКонтрагента.РеквизитДоговора.БанковскийСчет.НомерСчета; Но это не очень хорошо для ИБ, т.к. идет запрос к таблицам - сколько точек, столько поднимается таблиц из базы. А если какой нибудь из реквизитов имеет составной тип, то и вовсе нужно делать проверку.

В любом случае, дерево метаданных ваш друг.
---
НомерСчета = ДокументСсылка.ДоговорКонтрагента.РеквизитДоговора.БанковскийСчет.НомерСчета;

Дело в том, что я не понимаю как можно через точку из Договора контрагента сослаться на Контракт с заказчиком. Там нет подходящего реквизита. На форме есть гиперссылка, кликнув по которой, открывается окно контракта с заказчиком. Как сослаться на него я не знаю.
---
```1c
    Контракт = ОбщегоНазначения275КлиентСервер.НайтиПодчиненныйКонтракт(ДокументСсылка.ДоговорКонтрагента);
    Если Контракт <> Неопределено Тогда
    НомерСчета = Контракт.БанковскийСчетКонтрагента.НомерСчета;
    Иначе
    //Тут обрабатываем если нет контракта
    КонецЕсли;
```
---
Контракт = ОбщегоНазначения275КлиентСервер.НайтиПодчиненныйКонтракт(ДокументСсылка.ДоговорКонтрагента);
Если Контракт <> Неопределено Тогда
  НомерСчета = Контракт.БанковскийСчетКонтрагента.НомерСчета;
Иначе
  //Тут обрабатываем если нет контракта
КонецЕсли;

//чутка подправил тут и все заработало
НомерСчета = Контракт.БанковскийСчет.НомерСчета;

Большущее спасибо!!! Но я все равно не понимаю логику этого языка разработки :(

P.S.
Вот хоть убейте, не понимаю что значит "ОбщегоНазначения275КлиентСервер". Посоветуйте пожалуйста литературу, где я смогу почерпнуть полезную информацию и заполнить эти пробелы в знаниях.
---
"ОбщегоНазначения275КлиентСервер" - это общий модуль, где хранятся функции к которым вы всегда можете обратиться.

У меня просто реквизит называется Контракт.БанковскийСчетКонтрагента поэтому его и написал.

Литературы много, курсов тоже. Что-то конкретное посоветовать не могу, сам давно учился, не знаю что сейчас актуально, наверное как и тогда Радченко и Хрусталева.
---
"ОбщегоНазначения275КлиентСервер" - это общий модуль, где хранятся функции к которым вы всегда можете обратиться.

То есть если перевести этот программный код на человеческий язык, то получается так:

 "Контракт =" (Это мы как бы придумали переменную с именем контракт?)

"ОбщегоНазначения275КлиентСервер.НайтиПодчиненныйКонтракт" (И вот в этом самом общем модуле программы\конфигурации используется умение НайтиПодчиненныйКонтракт?)

(ДокументСсылка.ДоговорКонтрагента); (это вроде бы понятно. Какой договор выбран в поле договора, для того он и будет искать подчиненный контракт)

Если Контракт <> Неопределено Тогда (не понятно пока, что такое "Неопределено")
---
ОбщегоНазначения275КлиентСервер.НайтиПодчиненныйКонтракт
Это функция может вернуть Неопределено если не найдёт Контракт по договору ,этот момент в коде тоже нужно обработать.
---
Спасибо.