Имя: Пароль:
1C
1С v8
Запуск процедуры/функции в созданном документе.
0 sx55
 
01.02.21
15:53
Привет, экспериментирую с документом ПоступлениеНаРасчетныйСчет.

Программно создаю документ ПоступлениеНаРасчетныйСчет, заполняю нужные мне реквизиты и ... При попытке проведения, 1С выдаёт мне...

{Документ.ПоступлениеНаРасчетныйСчет.МодульМенеджера(641)}: Ошибка при вызове метода контекста (ВыполнитьПакет)
    Результат = Запрос.ВыполнитьПакет();
по причине:
Ошибка выполнения запроса
по причине:
Ошибка при выполнении операции над данными:
Ошибка SQL: Деление на 0
по причине:
Ошибка SQL: Деление на 0
по причине:
Деление на 0 значения типа Numeric

по причине:
Ошибка выполнения запроса
по причине:
Ошибка при выполнении операции над данными:
Ошибка SQL: Деление на 0
по причине:
Ошибка SQL: Деление на 0
по причине:
Деление на 0 значения типа Numeric

При этом, если просто заново указать сумму платежа, которая ведёт к процедуре СуммаДокументаПриИзмененииСервер(), то проведение выполняется без ошибок.

Куда копать? Что я делаю не так? И возможно ли, после записи документа, вызвать данную процедуру для корректировки внесённых значений?

Спасибо за ответы с разъяснением и желательно примерами.
1 Ёпрст
 
гуру
01.02.21
15:56
(0) Деление на 0 в тексте пакетного запроса
2 sx55
 
01.02.21
15:57
(1) - Логично, я это понял сразу. А как его отловить?
3 Ёпрст
 
гуру
01.02.21
16:00
(2) посмотреть текст ошибки, там обычно пишкт в каком модуле и где
4 Ёпрст
 
гуру
01.02.21
16:00
конкретно, вот тут:
Документ.ПоступлениеНаРасчетныйСчет.МодульМенеджера(641) 641 строка
5 sx55
 
01.02.21
16:02
(4) - Это я тоже сразу понял "Результат = Запрос.ВыполнитьПакет();"

Вся функция:

Функция ПодготовитьПараметрыПроведения(ДокументСсылка, Отказ, ДоговорДляОтложенногоПроведения = Неопределено) Экспорт
    
    ВалютаРеглУчета     = ОбщегоНазначенияБПВызовСервераПовтИсп.ПолучитьВалютуРегламентированногоУчета();
    ЭтоОтложенноеПроведение = ЗначениеЗаполнено(ДоговорДляОтложенногоПроведения);
    
    ПараметрыПроведения = Новый Структура;
    ПараметрыПроведения.Вставить("ВалютаРеглУчета", ВалютаРеглУчета);
    ПараметрыПроведения.Вставить("ДокументСсылка",  ДокументСсылка);
    ПараметрыПроведения.Вставить("ЭтоОтложенноеПроведение",  ЭтоОтложенноеПроведение);
    
    Запрос = Новый Запрос;
    МенеджерВременныхТаблиц  = Новый МенеджерВременныхТаблиц;
    Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
    Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
    Запрос.УстановитьПараметр("ВалютаРеглУчета", ВалютаРеглУчета);
    Запрос.УстановитьПараметр("ЭтоОтложенноеПроведение",             ЭтоОтложенноеПроведение);
    Запрос.УстановитьПараметр("ДоговорДляОтложенногоПроведения",     ДоговорДляОтложенногоПроведения);
    
    ПодготовитьПараметрыРеквизитыДокумента(Запрос, ПараметрыПроведения, Отказ);
    
    Реквизиты = ПараметрыПроведения.ТаблицаРеквизиты[0];
    Если Отказ ИЛИ НЕ УчетнаяПолитика.Существует(Реквизиты.Организация, Реквизиты.Дата, Истина, ДокументСсылка) Тогда
        Отказ = Истина;
        Возврат ПараметрыПроведения;
    КонецЕсли;
    
    ПлательщикНДФЛ = УчетнаяПолитика.ПлательщикНДФЛ(Реквизиты.Организация, Реквизиты.Дата);
    
    ПараметрыПроведения.Вставить("ПлательщикНДФЛ", ПлательщикНДФЛ);
    ПараметрыПроведения.Вставить("ОрганизацияПрименяетУСН", УчетнаяПолитика.ПрименяетсяУСН(Реквизиты.Организация, Реквизиты.Дата));

    Запрос.УстановитьПараметр("ДокументВВалюте",                Реквизиты.ВалютаДокумента <> ВалютаРеглУчета);
    Запрос.УстановитьПараметр("ВалютаДокумента",                Реквизиты.ВалютаДокумента);
    Запрос.УстановитьПараметр("ПлательщикНДФЛ",                 ПлательщикНДФЛ);
    Запрос.УстановитьПараметр("ОрганизацияПрименяетУСН",        УчетнаяПолитика.ПрименяетсяУСН(Реквизиты.Организация,                 Реквизиты.Дата));
    Запрос.УстановитьПараметр("ОрганизацияПрименяетУСНПатент",  УчетнаяПолитика.ПрименяетсяУСНПатент(Реквизиты.Организация,           Реквизиты.Дата));
    Запрос.УстановитьПараметр("ВестиУчетПоВидамДеятельностиИП", УчетнаяПолитика.ВестиУчетПоВидамДеятельностиИП(Реквизиты.Организация, Реквизиты.Дата));
    Запрос.УстановитьПараметр("ОсновнаяНоменклатурнаяГруппа",   УчетнаяПолитика.ОсновнаяНоменклатурнаяГруппа(Реквизиты.Организация,   Реквизиты.Дата));
    Запрос.УстановитьПараметр("ИспользоватьПереводыВПутиПриПеремещенияДенежныхСредств", УчетнаяПолитика.ИспользоватьПереводыВПутиПриПеремещенияДенежныхСредств(Реквизиты.Организация, Реквизиты.Дата));
    Если Реквизиты.БезЗакрывающихДокументов Тогда
        Запрос.УстановитьПараметр("ПрочиеВнереализационныеДоходыРасходы",
            ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент("Справочник.ПрочиеДоходыИРасходы.ПрочиеВнереализационныеДоходыРасходы"));
    КонецЕсли;
    
    Для каждого Колонка Из ПараметрыПроведения.ТаблицаРеквизиты.Колонки Цикл
        Запрос.УстановитьПараметр(Колонка.Имя, Реквизиты[Колонка.Имя]);
    КонецЦикла;
    
    НомераТаблиц = Новый Структура;
    
    Запрос.Текст = ТекстЗапросаРеквизитыДокумента(НомераТаблиц)
        + ТекстЗапросаТаблицыДокумента(НомераТаблиц)
        + ТекстЗапросаПогашениеЗадолженности(НомераТаблиц, ПараметрыПроведения, Реквизиты)
        + ТекстЗапросаПриобретениеВалюты(НомераТаблиц,     ПараметрыПроведения, Реквизиты)
        + ТекстЗапросаПродажаВалюты(НомераТаблиц,          ПараметрыПроведения, Реквизиты)
        + ТекстЗапросаПрочееПоступление(НомераТаблиц,      ПараметрыПроведения, Реквизиты)
        + ТекстЗапросаПоступлениеМПЗИП(НомераТаблиц,       ПараметрыПроведения, Реквизиты)
        + ТекстЗапросаОплатаСчетов(НомераТаблиц,           ПараметрыПроведения, Реквизиты)
        + ТекстЗапросаПокупкаПродажаВалютыУСН(НомераТаблиц, ПараметрыПроведения, Реквизиты)
        + ТекстЗапросаРегистрацияОтложенныхРасчетовСКонтрагентами(НомераТаблиц, ПараметрыПроведения, Реквизиты)
        ;
    
    Результат = Запрос.ВыполнитьПакет();
    
    Для каждого НомерТаблицы Из НомераТаблиц Цикл
        ПараметрыПроведения.Вставить(НомерТаблицы.Ключ, Результат[НомерТаблицы.Значение].Выгрузить());
    КонецЦикла;
    
    Реквизиты = ПараметрыПроведения.Реквизиты[0];
    Реквизиты.Содержание = ТекстСодержанияПроводокДокумента(Реквизиты);
    Если ПараметрыПроведения.РасшифровкаПлатежа <> Неопределено Тогда
        ПараметрыПроведения.РасшифровкаПлатежа.ЗаполнитьЗначения(Реквизиты.Содержание, "Содержание");
    КонецЕсли;
    
    Возврат ПараметрыПроведения;
    
КонецФункции
6 ZDenis
 
01.02.21
16:12
(0) Значит не все нужные реквизиты заполняешь программно.
7 hhhh
 
01.02.21
16:13
(5) текст запроса смотрите. Ищите там такую косую черту "/", это называется деление. И смотрите знаменатель у этого деления, почему он вдруг 0?
8 Ёпрст
 
гуру
01.02.21
16:13
(5) ну вот поставь точку останова перед выполнить пакет и посмотри, чему равен Запрос.Текст.. и сымотри, где у тебя там может быть в знаменателе нуль
9 sx55
 
01.02.21
16:18
(7) - Спасибо, завтра попробую. )))
(8) - И тебе спасибо, обязательно так сделаю.
Закон Брукера: Даже маленькая практика стоит большой теории.