Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
05 июл 2022, 12:38

Метод объекта не обнаружен

Автор Sheriff, 18 сен 2017, 10:13

0 Пользователей и 1 гость просматривают эту тему.

Sheriff

Всем привет! Есть такая дописанная часть в конфигураторе, как контроль суммы договоров, при проведении ППИ. Конфа БК 1.0
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

Если Ответственный.Пустая() Тогда
Ответственный = глТекущийПользователь;
КонецЕсли;

Если РасшифровкаПлатежа.Количество()=1 Тогда
ДоговорКонтрагента = СтрокаПлатеж.ДоговорКонтрагента;

Если ЗначениеНеЗаполнено(СтрокаПлатеж.СчетУчетаРасчетовСКонтрагентом) Тогда
СтрокаПлатеж.СчетУчетаРасчетовСКонтрагентом=СчетУчетаРасчетовСКонтрагентом;
КонецЕсли;

Иначе
ДоговорКонтрагента=Новый(Тип("СправочникСсылка.ДоговорыКонтрагентов"));
КонецЕсли;

Если НЕ Оплачено Тогда
ДатаВыписки = Дата;
КонецЕсли;


//--- 04 08 2008 контроль расчета с контрагентами
 
  // Сформируем структуру реквизитов шапки документа
  СтруктураШапкиДокумента = СформироватьСтруктуруШапкиДокумента(ЭтотОбъект);
  Если    СтруктураШапкиДокумента.Видоперации = Перечисления.ВидыОперацийППИсходящее.ОплатаПоставщику Тогда
 
     СуммаДокументаТек =  РасшифровкаПлатежа.Итог("СуммаПлатежа");
 
  Для каждого СтрокаОплаты из РасшифровкаПлатежа Цикл
    КонтрольСуммыДоговра(СтруктураШапкиДокумента, СтрокаОплаты, Отказ, Заголовок);
//--- Контроль суммы свыше котрой нельзя платить без договора
Если (СтрокаОплаты.ДоговорКонтрагента.БезДоговора) и (СуммаДокументаТек > Константы.МаксСуммаОплатыБезДоговора.Получить() ) Тогда
Отказ = Истина;

    Заголовок = "Нельзя выписывать без договора свыше "+Строка(Константы.МаксСуммаОплатыБезДоговора.Получить());
Сообщить(Заголовок);
КонецЕсли;

Если ДоговорКонтрагента =  Справочники.ДоговорыКонтрагентов.ПустаяСсылка() тогда
Отказ=истина;
Сообщить("Выберите договор Контрагента"+Контрагент.Наименование+"!!!",СтатусСообщения.Важное);

конецесли;

 
  КонецЦикла;

  КонецЕсли;
 

КонецПроцедуры

Она чётко отрабатывает.
Теперь, возникло такое желание, сделать это с документом "Поступление ТМЗ и услуг", но там нет Таб.части "Расшифровка платежа", есть ток "Товары". Пытаюсь сделать опираясь на это, но не выходит. Прошу помощи!
Ниже мой код, который использую для док. "Поступление ТМЗ и услуг", пробовал разные значения подставлять, но результат тот же, пишет ошибку "{Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокумента.Форма(1986)}: Метод объекта не обнаружен (Сумма)
           СуммаДокументаТек =  Товары.Сумма("СуммаДокумента");
"
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

// --- Проверка на плательщика НДС ----------
// ------------------------------------------
Если Контрагент.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо Тогда
Если ЗначениеНеЗаполнено(Контрагент.ДатаСвидетельстваПоНДС) или ЗначениеНеЗаполнено(Контрагент.НомерСвидетельстваПоНДС)
или ЗначениеНеЗаполнено(Контрагент.СерияСвидетельстваПоНДС) Тогда
Ответ = Вопрос("Не введены сведения контрагента о НДС.
|Уверены что контрагент не является плательшиком НДС?", РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет);

Если Ответ = КодВозвратаДиалога.Нет Тогда
Сообщить("Введите данные о НДС!!!", СтатусСообщения.ОченьВажное);
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
// ------------------------------------------
// --- Проверка на плательщика НДС. Конец ---
СтруктураШапкиДокумента = СформироватьСтруктуруШапкиДокумента(ЭтотОбъект);

Если    СтруктураШапкиДокумента.Видоперации = Перечисления.ВидыОперацийПоступлениеТоваровУслуг.Покупка Тогда
 
     СуммаДокументаТек =  Товары.Сумма("СуммаДокумента");

  Для каждого СтрокаОплаты из Товары.Сумма Цикл
    КонтрольСуммыДоговра(СтруктураШапкиДокумента, СтрокаОплаты, Отказ, Заголовок);
Если (ДоговорКонтрагента.БезДоговора) и (СуммаДокументаТек > Константы.МаксСуммаОплатыБезДоговора.Получить() ) Тогда
Отказ = Истина;

    Заголовок = "Нельзя выписывать без договора свыше "+Строка(Константы.МаксСуммаОплатыБезДоговора.Получить());
Сообщить(Заголовок);
КонецЕсли;

Если ДоговорКонтрагента =  Справочники.ДоговорыКонтрагентов.ПустаяСсылка() тогда
Отказ=истина;
Сообщить("Выберите договор Контрагента"+Контрагент.Наименование+"!!!",СтатусСообщения.Важное);

конецесли;
               КонецЦикла;
        конецесли;
КонецПроцедуры

ilyay

Вот у вас есть код: СуммаДокументаТек =  РасшифровкаПлатежа.Итог("СуммаПлатежа");
Это тоже табличная часть?

Sheriff

Цитата: ilyay от 18 сен 2017, 10:16
Вот у вас есть код: СуммаДокументаТек =  РасшифровкаПлатежа.Итог("СуммаПлатежа");
Это тоже табличная часть?
РасшифровкаПлатежа - это таб.часть

Z.spb

Серьёзно?

Найди отличие

СуммаДокументаТек =  РасшифровкаПлатежа.Итог("СуммаПлатежа");

СуммаДокументаТек =  Товары.Сумма("СуммаДокумента");

p.s. или даже так, чтоб совсем понятно было
[переменная] = [ИмяТабличнойЧасти].[Метод!]([Параметр (в данном случае имя колонки)])

Sheriff

Цитата: Z.spb от 18 сен 2017, 10:37
Серьёзно?

Найди отличие

СуммаДокументаТек =  РасшифровкаПлатежа.Итог("СуммаПлатежа");

СуммаДокументаТек =  Товары.Сумма("СуммаДокумента");

p.s. или даже так, чтоб совсем понятно было
[переменная] = [ИмяТабличнойЧасти].[Метод!]([Параметр (в данном случае имя колонки)])
Вот так это выглядит с док. "Поступление ТМЗ".
Я уже как там только не пробовал прописывать, не работает. Либо метод не обнаружен, либо поле объекта.
Добавлено: 18 сен 2017, 10:54


Цитата: Z.spb от 18 сен 2017, 10:37
Серьёзно?

Найди отличие

СуммаДокументаТек =  РасшифровкаПлатежа.Итог("СуммаПлатежа");

СуммаДокументаТек =  Товары.Сумма("СуммаДокумента");

p.s. или даже так, чтоб совсем понятно было
[переменная] = [ИмяТабличнойЧасти].[Метод!]([Параметр (в данном случае имя колонки)])
Всё, разобрался. Спасибо!)

Z.spb

Значит ещё понятнее надо.

Вы обращаетесь к табличной части документа, указывая её наименование. В 1м случае это "РасшифровкаПлатежа" во 2м случае это "Товары". Далее, через точку, вызывается метод табличной части, а в скобках указывается параметр этого метода. В 1м случае это метод "Итог". Вот что говорит синтаксис помощник
Табличная часть (Tabular section)
Итог (Total)
Синтаксис:

Итог(<Колонка>)
Параметры:

<Колонка> (обязательный)

Тип: Число; Строка.
Индекс либо имя колонки, по которой подсчитывается итог.
Возвращаемое значение:

Тип: Число; Неопределено.

Описание:

Суммирует значения всех строк в указанной колонке.
Если в колонке установлен тип и он единственный, то при суммировании будет предприниматься попытка преобразования значения к типу Число.
Если колонке не присвоены типы, то в процессе суммирования будут принимать участие только значения, имеющие тип Число, значения других типов будут игнорироваться.
Если в колонке несколько типов и среди них есть тип Число, то в процессе суммирования будут принимать участие только значения, имеющие тип Число, значения других типов будут игнорироваться.
Если в колонке несколько типов и среди них нет типа Число, то результатом будет значение Неопределено.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Пример:

ВсегоПоДокументу = Состав.Итог("Всего");



Во втором случае вы пытаетесь вызвать несуществующий метод табличной части. У табличной части есть метод "итог", нет метода "сумма". И параметр вы тоже указываете неверно. "СуммаДокумента" - такого реквизита табличной части у вас нет, судя по скриншоту. Если вам нужна сумма документа, то нужно делать ИТОГ по колонке СУММА.

Sheriff

Цитата: Z.spb от 18 сен 2017, 10:57
Значит ещё понятнее надо.

Вы обращаетесь к табличной части документа, указывая её наименование. В 1м случае это "РасшифровкаПлатежа" во 2м случае это "Товары". Далее, через точку, вызывается метод табличной части, а в скобках указывается параметр этого метода. В 1м случае это метод "Итог". Вот что говорит синтаксис помощник
Табличная часть (Tabular section)
Итог (Total)
Синтаксис:

Итог(<Колонка>)
Параметры:

<Колонка> (обязательный)

Тип: Число; Строка.
Индекс либо имя колонки, по которой подсчитывается итог.
Возвращаемое значение:

Тип: Число; Неопределено.

Описание:

Суммирует значения всех строк в указанной колонке.
Если в колонке установлен тип и он единственный, то при суммировании будет предприниматься попытка преобразования значения к типу Число.
Если колонке не присвоены типы, то в процессе суммирования будут принимать участие только значения, имеющие тип Число, значения других типов будут игнорироваться.
Если в колонке несколько типов и среди них есть тип Число, то в процессе суммирования будут принимать участие только значения, имеющие тип Число, значения других типов будут игнорироваться.
Если в колонке несколько типов и среди них нет типа Число, то результатом будет значение Неопределено.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Пример:

ВсегоПоДокументу = Состав.Итог("Всего");



Во втором случае вы пытаетесь вызвать несуществующий метод табличной части. У табличной части есть метод "итог", нет метода "сумма". И параметр вы тоже указываете неверно. "СуммаДокумента" - такого реквизита табличной части у вас нет, судя по скриншоту. Если вам нужна сумма документа, то нужно делать ИТОГ по колонке СУММА.
Да, уже разобрался. выше ответил.
Получилось вот так:
СтруктураШапкиДокумента = СформироватьСтруктуруШапкиДокумента(ЭтотОбъект);

Если    СтруктураШапкиДокумента.Видоперации = Перечисления.ВидыОперацийПоступлениеТоваровУслуг.Покупка Тогда
 
     СуммаДокументаТек =  Товары.Итог("Сумма");

  Для каждого СтрокаОплаты из Товары Цикл
    КонтрольСуммыДоговра(СтруктураШапкиДокумента, СтрокаОплаты, Отказ, Заголовок);
Если (ДоговорКонтрагента.БезДоговора) и (СуммаДокументаТек > Константы.МаксСуммаОплатыБезДоговора.Получить() ) Тогда
Отказ = Истина;

    Заголовок = "Нельзя выписывать без договора свыше "+Строка(Константы.МаксСуммаОплатыБезДоговора.Получить());
Сообщить(Заголовок);
КонецЕсли;

Если ДоговорКонтрагента =  Справочники.ДоговорыКонтрагентов.ПустаяСсылка() тогда
Отказ=истина;
Сообщить("Выберите договор Контрагента"+Контрагент.Наименование+"!!!",СтатусСообщения.Важное);

конецесли;
               КонецЦикла;
        конецесли;

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск