1С УПП 1.3 - Счет на оплату покупателю - изменение печатной формы для удобства работы с государственными контрактами.

1. mamkin_programmist 08.10.20 14:41 Сейчас в теме
Добрый день.

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

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

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

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

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

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

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


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

В любом случае, дерево метаданных ваш друг.
mamkin_programmist; +1 Ответить
3. mamkin_programmist 08.10.20 15:47 Сейчас в теме
(2)
НомерСчета = ДокументСсылка.ДоговорКонтрагента.РеквизитДоговора.БанковскийСчет.НомерСчета;


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


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

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

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

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

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


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

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

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

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

Если Контракт <> Неопределено Тогда (не понятно пока, что такое "Неопределено")
8. Ганс 08.10.20 17:04 Сейчас в теме
(7) ОбщегоНазначения275КлиентСервер.НайтиПодчиненныйКонтракт
Это функция может вернуть Неопределено если не найдёт Контракт по договору ,этот момент в коде тоже нужно обработать.
9. mamkin_programmist 09.10.20 08:08 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот