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

Преобразование значения к типу Число не может быть выполнено

Автор topovsky3, 18 дек 2022, 22:19

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

topovsky3

Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

// регистр УчетТоваров Приход
Движения.УчетТоваров.Записывать = Истина;
Движение = Движения.УчетТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.НазваниеТовара = НаименованиеТовара;
Движение.НомерЯчейки = НомерЯчейки;
Движение.ДатаПоступленияПолученияТовара = Дата;
Движение.КоличествоТовара = КоличествоТовара;

Товар = Справочники.Товары.НайтиПоНаименованию(НаименованиеТовара);
Масса = Товар.Масса;

Движение.ОбщийОбъем = КоличествоТовара*Масса;

// Дополнительное задание
НомерЯчейки1 = Строка(НомерЯчейки);
СписокЯчеек = Новый СписокЗначений;
ВсеЯчейки = Справочники.ЯчейкиСклада.Выбрать();
Пока ВсеЯчейки.Следующий() Цикл
СписокЯчеек.Добавить(ВсеЯчейки.Ссылка.Наименование);
КонецЦикла;
Для Каждого Элемент Из СписокЯчеек Цикл
Если Строка(Элемент) = НомерЯчейки1 Тогда
НазваниеЯчейкиИзСписка = Строка(Элемент);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЯчейкиСклада.ВместимостьЯчейки КАК ВместимостьЯчейки,
| ЯчейкиСклада.Наименование КАК Наименование
|ИЗ
| Справочник.ЯчейкиСклада КАК ЯчейкиСклада";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если ВыборкаДетальныеЗаписи.Наименование = НазваниеЯчейкиИзСписка Тогда
МаксимальныйОбъемЯчейки = ВыборкаДетальныеЗаписи.ВместимостьЯчейки;
         МаксимальныйОбъемЯчейки = Число(МаксимальныйОбъемЯчейки);
КонецЕсли;
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| УчетТоваровОстатки.НомерЯчейки КАК НомерЯчейки,
| УчетТоваровОстатки.ОбщийОбъемОстаток КАК ОбщийОбъемОстаток
|ИЗ
| РегистрНакопления.УчетТоваров.Остатки КАК УчетТоваровОстатки";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
ЗанятыйОбъёмЯчейки = 0;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если ВыборкаДетальныеЗаписи.НомерЯчейки = НазваниеЯчейкиИзСписка Тогда
ЗанятыйОбъемЯчейки = ВыборкаДетальныеЗаписи.ОбщийОбъемОстаток;
ЗанятыйОбъемЯчейки = Число(ЗанятыйОбъемЯчейки);
Прервать;
КонецЕсли;
КонецЦикла;
[b][color=yellow]СвободныйОбъемЯчейки = МаксимальныйОбъемЯчейки-ЗанятыйОбъемЯчейки;[/color][/b]
ПоступившийТовар = Строка(НаименованиеТовара);
Товар = Справочники.Товары.НайтиПоНаименованию(ПоступившийТовар);
Масса = Число(Товар.Масса);
ОбщийОбъемТоваров = Число(КоличествоТовара)*Масса;
Если ОбщийОбъемТоваров > СвободныйОбъемЯчейки Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Добавление этого товара превышает свободный объём/массу данной ячейки! Свободный объем/масса, выбранной ячейки равен " + Строка(СвободныйОбъемЯчейки) + " кг/м3. Выберите другую ячейку!";
Сообщение.Сообщить();
РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения;
Отказ = Истина;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
//
//Сообщение = Новый СообщениеПользователю;
//Сообщение.Текст = "";
//Сообщение.Сообщить();
//
//Дополнительное задание

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры

111.png


alexandr_ll


topovsky3

alexandr_ll,

Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
Преобразование значения к типу Число не может быть выполнено
{Документ.Поступление.МодульОбъекта(64)}:СвободныйОбъемЯчейки = МаксимальныйОбъемЯчейки-ЗанятыйОбъемЯчейки;

[ОшибкаВоВремяВыполненияВстроенногоЯзыка, ОшибкаИспользованияВстроенногоЯзыка]

alexandr_ll

topovsky3, Нужно посмотреть в Отладчике, какие значения имеют переменные МаксимальныйОбъемЯчейки и ЗанятыйОбъемЯчейки

topovsky3

alexandr_ll, в ЗанятыйОбъемЯчейки почему-то не попадают числа

antoneus


topovsky3

antoneus, при откладке ничего не высвечивается там

antoneus

То есть неопределено? Значит, в это условие не попадает:

Если ВыборкаДетальныеЗаписи.НомерЯчейки = НазваниеЯчейкиИзСписка Тогда
    ЗанятыйОбъемЯчейки = ВыборкаДетальныеЗаписи.ОбщийОбъемОстаток;
    ЗанятыйОбъемЯчейки = Число(ЗанятыйОбъемЯчейки);
    Прервать;
КонецЕсли;

topovsky3

antoneus,
ЗанятыйОбъемЯчейки = 0;


ЗанятыйОбъемЯчейки = ВыборкаДетальныеЗаписи.ОбщийОбъемОстаток;  -> тут получается 75
                         

СвободныйОбъемЯчейки = МаксимальныйОбъемЯчейки-ЗанятыйОбъемЯчейки; -> 70 - 0
 

Он игнорирует цикл почему-то


antoneus

Чето как-то много лишних телодвижений в коде. Ну, например: что такое НомерЯчейки? Реквизит документа? Какой у него тип?

Теги: 1c 1C 8.3 

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

Рейтинг@Mail.ru

Поиск