Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 09:23

Ошибка взятия модуля числа

Автор Андрей Бутенко, 10 ноя 2022, 23:15

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

Андрей Бутенко

Здравствуйте! Возникает ошибка "Преобразование значения к типу число не может быть выполнено" при попытке взятия модуля от поля СуммаОстаток, которое является измерением документа. Подскажите, в какой момент это перестает быть числом?
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.РассчетыСПокупателем.Записывать = Истина;
Движения.Записать();
Движения.РассчетыСПокупателем.Записывать = Истина;

МассивКонтрагентов = УбратьДублиИзМассива(Платежи.Выгрузить(, "Контрагент").ВыгрузитьКолонку("Контрагент"));
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РассчетыСПокупателемОстатки.Контрагент КАК Контрагент,
| РассчетыСПокупателемОстатки.ДокументРассчетов КАК ДокументРассчетов,
| ЕСТЬNULL(РассчетыСПокупателемОстатки.СуммаОстаток, 0) КАК СуммаОстаток
|ИЗ
| РегистрНакопления.РассчетыСПокупателем.Остатки(&МоментВремени, Контрагент В (&знач)) КАК РассчетыСПокупателемОстатки
|
|СГРУППИРОВАТЬ ПО
| РассчетыСПокупателемОстатки.Контрагент,
| РассчетыСПокупателемОстатки.ДокументРассчетов,
| РассчетыСПокупателемОстатки.СуммаОстаток" ;
Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
Запрос.УстановитьПараметр("знач", МассивКонтрагентов); 
Результат = Запрос.Выполнить();
ТабЗапроса = Результат.Выгрузить();
ТабличнаяЧастьТЗ = Платежи.Выгрузить();

Для каждого стр из ТабличнаяЧастьТЗ Цикл
СуммаДокумента =  стр.СуммаПоступления;
МассивСтрок = ТабЗапроса.НайтиСтроки(Новый Структура("Контрагент", стр.Контрагент));
ТЗКонтрагента = ТабЗапроса.Скопировать(МассивСтрок);
МассивСтрок1 = Новый Массив;
МассивСтрок2 = Новый Массив;
//МассивСтрок2.Найти();
Для каждого элт из ТЗКонтрагента Цикл

Если элт.СуммаОстаток >0 Тогда
МассивСтрок1.Добавить(стр); //предоплаты
Сообщить("записали в массив1");
Иначе
МассивСтрок2.Добавить(стр);
Сообщить("записали в массив2");
КонецЕсли;

КонецЦикла;
ТЗВыписок = ТЗКонтрагента.Скопировать(МассивСтрок1);
ТЗНакладных = ТЗКонтрагента.Скопировать(МассивСтрок2);
Сообщить(ТЗНакладных.количество());
Для каждого Эл из ТЗНакладных Цикл
Сообщить(Эл.СуммаОстаток);
ОстатокДолгов= Макс(-Эл.СуммаОстаток, Эл.СуммаОстаток);
МассивСтрок3 = ТЗВыписок.НайтиСтроки(Новый Структура("ДокументРассчетов", Эл.ДокументРассчетов));
ТЗЦикла = ТЗВыписок.Скопировать(МассивСтрок3);
СуммаВыписок = ТЗЦикла.Итог("СуммаОстаток");

Если СуммаДокумента > 0 и (ОстатокДолгов-СуммаВыписок) > 0 Тогда


НовоеДвижение = Движения.РассчетыСПокупателем.Добавить();
НовоеДвижение.ВидДвижения = ВидДвиженияНакопления.Приход;
НовоеДвижение.Период = Дата;
НовоеДвижение.Контрагент = стр.Контрагент;
НовоеДвижение.ДокументРассчетов = Эл.ДокументРассчетов;
НовоеДвижение.Сумма = Эл.СуммаОстаток-СуммаВыписок;
Сообщить("ЗАписали1");

СуммаДокумента = СуммаДокумента - (Эл.СуммаОстаток-СуммаВыписок);
КонецЕсли;

КонецЦикла;
Если СуммаДокумента > 0 Тогда

НовоеДвижение = Движения.РассчетыСПокупателем.Добавить();
НовоеДвижение.ВидДвижения = ВидДвиженияНакопления.Приход;
НовоеДвижение.Период = Дата;
НовоеДвижение.Контрагент = стр.Контрагент;
НовоеДвижение.ДокументРассчетов = Ссылка;
НовоеДвижение.Сумма = СуммаДокумента;
Сообщить("ЗАписали2");

КонецЕсли;

КонецЦикла;

КонецПроцедуры         
ОстатокДолгов= Макс(-Эл.СуммаОстаток, Эл.СуммаОстаток);

LexaK

Андрей Бутенко, скорее всего здесь ошибка

МассивСтрок1.Добавить(стр);//стр из другой ТЗ
попробуйте так
МассивСтрок1.Добавить(элт);

и

МассивСтрок2.Добавить(стр);
попробуйте так
МассивСтрок2.Добавить(элт);

 

если помогло нажмите: Спасибо!

Теги:

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

Рейтинг@Mail.ru

Поиск