1С УПП 1.3 - Счет на оплату покупателю - изменение печатной формы для удобства работы с государственными контрактами.
Добрый день.
Печатная форма для документа "Счёт на оплату покупателю" подставляет номер банковского счёта обращаясь к тому, что указано в поле "Б/счет, касса". Это не совсем удобно для работы с государственными контрактами, так как под каждый контракт есть свой счёт. Бывает, что по невнимательности забывают выбрать корректный банковский счет и распечатывают документ с неверным номером счета.
Хотел подправить печатную форму, чтобы номер счета завязанный на данном контракте подставлялся автоматически, даже если в поле "Б/счет, касса" выбран совсем другой банковский счет. То есть как-то в обход что-ли.
Думал, что можно будет получить информацию о банковском счете ссылаясь на конкретный договор контрагента, но на этом мои знания закончились.
В форме Договора контрагента в нижней части можно перейти по ссылке с наименованием предмета договора и уже там посмотреть номер банковского счета, но не могу понять как это на языке 1С объяснить программе.
НомерСчета = ДокументСсылка.СтруктурнаяЕдиница.НомерСчета; //Это он по умолчанию тянет информацию по ссылке из поля "Б/счет, касса" насколько я понимаю.
А вот как указать, что хочу взять номер счета по ссылке из поля "Банковский счет" из контракта с заказчиком который связан с этим договором контрагента?
// Как я вижу это своим гуманитарным мозгом
НомерСчета = ДокументСсылка.ДоговорКонтрагента."тут вот не знаю как сослаться на контракт".БанковскийСчет.НомерСчета;
Подскажите в какую сторону копать.
Печатная форма для документа "Счёт на оплату покупателю" подставляет номер банковского счёта обращаясь к тому, что указано в поле "Б/счет, касса". Это не совсем удобно для работы с государственными контрактами, так как под каждый контракт есть свой счёт. Бывает, что по невнимательности забывают выбрать корректный банковский счет и распечатывают документ с неверным номером счета.
Хотел подправить печатную форму, чтобы номер счета завязанный на данном контракте подставлялся автоматически, даже если в поле "Б/счет, касса" выбран совсем другой банковский счет. То есть как-то в обход что-ли.
Думал, что можно будет получить информацию о банковском счете ссылаясь на конкретный договор контрагента, но на этом мои знания закончились.
В форме Договора контрагента в нижней части можно перейти по ссылке с наименованием предмета договора и уже там посмотреть номер банковского счета, но не могу понять как это на языке 1С объяснить программе.
НомерСчета = ДокументСсылка.СтруктурнаяЕдиница.НомерСчета; //Это он по умолчанию тянет информацию по ссылке из поля "Б/счет, касса" насколько я понимаю.
А вот как указать, что хочу взять номер счета по ссылке из поля "Банковский счет" из контракта с заказчиком который связан с этим договором контрагента?
// Как я вижу это своим гуманитарным мозгом
НомерСчета = ДокументСсылка.ДоговорКонтрагента."тут вот не знаю как сослаться на контракт".БанковскийСчет.НомерСчета;
Подскажите в какую сторону копать.
Прикрепленные файлы:




Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Нету конфигурации, не могу понять, как организовано хранение и связь объектов.
Поэтому напишу поверхностно:
Связь элементов может хранится в регистре сведений. В таком случае использовать метод РегистрыСведений[ИмяРегистра].Получить(Новый Структура([ИмяИзмерения], СсылкаВладельца)). Или ПолучитьПоследнее(, Если регистр периодический.
Возможно, элемент в табличной части владельца. В таком случае просто обход строк табличной части
Если же все гораздо тривиальнее, то выйти на целевой объект можно через точки, вроде
НомерСчета = ДокументСсылка.ДоговорКонтрагента.РеквизитДоговора.БанковскийСчет.НомерСчета; Но это не очень хорошо для ИБ, т.к. идет запрос к таблицам - сколько точек, столько поднимается таблиц из базы. А если какой нибудь из реквизитов имеет составной тип, то и вовсе нужно делать проверку.
В любом случае, дерево метаданных ваш друг.
Поэтому напишу поверхностно:
Связь элементов может хранится в регистре сведений. В таком случае использовать метод РегистрыСведений[ИмяРегистра].Получить(Новый Структура([ИмяИзмерения], СсылкаВладельца)). Или ПолучитьПоследнее(, Если регистр периодический.
Возможно, элемент в табличной части владельца. В таком случае просто обход строк табличной части
Если же все гораздо тривиальнее, то выйти на целевой объект можно через точки, вроде
НомерСчета = ДокументСсылка.ДоговорКонтрагента.РеквизитДоговора.БанковскийСчет.НомерСчета; Но это не очень хорошо для ИБ, т.к. идет запрос к таблицам - сколько точек, столько поднимается таблиц из базы. А если какой нибудь из реквизитов имеет составной тип, то и вовсе нужно делать проверку.
В любом случае, дерево метаданных ваш друг.
(2)
Дело в том, что я не понимаю как можно через точку из Договора контрагента сослаться на Контракт с заказчиком. Там нет подходящего реквизита. На форме есть гиперссылка, кликнув по которой, открывается окно контракта с заказчиком. Как сослаться на него я не знаю.
НомерСчета = ДокументСсылка.ДоговорКонтрагента.РеквизитДоговора.БанковскийСчет.НомерСчета;
Дело в том, что я не понимаю как можно через точку из Договора контрагента сослаться на Контракт с заказчиком. Там нет подходящего реквизита. На форме есть гиперссылка, кликнув по которой, открывается окно контракта с заказчиком. Как сослаться на него я не знаю.
(4)
//чутка подправил тут и все заработало
НомерСчета = Контракт.БанковскийСчет.НомерСчета;
Большущее спасибо!!! Но я все равно не понимаю логику этого языка разработки :(
P.S.
Вот хоть убейте, не понимаю что значит "ОбщегоНазначения275КлиентСервер". Посоветуйте пожалуйста литературу, где я смогу почерпнуть полезную информацию и заполнить эти пробелы в знаниях.
Контракт = ОбщегоНазначения275КлиентСервер.НайтиПодчиненныйКонтракт(ДокументСсылка.ДоговорКонтрагента);
Если Контракт <> Неопределено Тогда
НомерСчета = Контракт.БанковскийСчетКонтрагента.НомерСчета;
Иначе
//Тут обрабатываем если нет контракта
КонецЕсли;
Если Контракт <> Неопределено Тогда
НомерСчета = Контракт.БанковскийСчетКонтрагента.НомерСчета;
Иначе
//Тут обрабатываем если нет контракта
КонецЕсли;
//чутка подправил тут и все заработало
НомерСчета = Контракт.БанковскийСчет.НомерСчета;
Большущее спасибо!!! Но я все равно не понимаю логику этого языка разработки :(
P.S.
Вот хоть убейте, не понимаю что значит "ОбщегоНазначения275КлиентСервер". Посоветуйте пожалуйста литературу, где я смогу почерпнуть полезную информацию и заполнить эти пробелы в знаниях.
(5) "ОбщегоНазначения275КлиентСервер" - это общий модуль, где хранятся функции к которым вы всегда можете обратиться.
У меня просто реквизит называется Контракт.БанковскийСчетКонтрагента поэтому его и написал.
Литературы много, курсов тоже. Что-то конкретное посоветовать не могу, сам давно учился, не знаю что сейчас актуально, наверное как и тогда Радченко и Хрусталева.
У меня просто реквизит называется Контракт.БанковскийСчетКонтрагента поэтому его и написал.
Литературы много, курсов тоже. Что-то конкретное посоветовать не могу, сам давно учился, не знаю что сейчас актуально, наверное как и тогда Радченко и Хрусталева.
(6)
То есть если перевести этот программный код на человеческий язык, то получается так:
"Контракт =" (Это мы как бы придумали переменную с именем контракт?)
"ОбщегоНазначения275КлиентСервер.НайтиПодчиненныйКонтракт" (И вот в этом самом общем модуле программы\конфигурации используется умение НайтиПодчиненныйКонтракт?)
(ДокументСсылка.ДоговорКонтрагента); (это вроде бы понятно. Какой договор выбран в поле договора, для того он и будет искать подчиненный контракт)
Если Контракт <> Неопределено Тогда (не понятно пока, что такое "Неопределено")
"ОбщегоНазначения275КлиентСервер" - это общий модуль, где хранятся функции к которым вы всегда можете обратиться.
То есть если перевести этот программный код на человеческий язык, то получается так:
"Контракт =" (Это мы как бы придумали переменную с именем контракт?)
"ОбщегоНазначения275КлиентСервер.НайтиПодчиненныйКонтракт" (И вот в этом самом общем модуле программы\конфигурации используется умение НайтиПодчиненныйКонтракт?)
(ДокументСсылка.ДоговорКонтрагента); (это вроде бы понятно. Какой договор выбран в поле договора, для того он и будет искать подчиненный контракт)
Если Контракт <> Неопределено Тогда (не понятно пока, что такое "Неопределено")
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот