Имя: Пароль:
1C
1С v8
Один и тот же код работает в событии формы приоткрытии и не работает в событии ПриИзменени
0 Fleapse
 
13.12.18
09:53
написал код который при наличии 2х ссылок обращается к базе и берет от туда 3 числа и 1 значение перечисления.
в событие приОткрытии он работает, но когда в новом документе вводишь второе поле он выдаёт ошибку, что значение из базы невозможно преобразовать в число. вот код:
Процедура ПриОткрытии(Отказ)
    Если    ЗначениеЗаполнено(Объект.Потребность) и  ЗначениеЗаполнено(Объект.Предложение) тогда
        //Сообщить("*");    
        РезультатЗапроса = ЗапросНаСервере(Объект.Ссылка);
        // 1 поле
        СтоимостьУслугПокупателя = РезультатЗапроса[1]/100*3;
        Объект.СтоимостьУслугПокупателя = СтоимостьУслугПокупателя;
        //2 поле
        Если  РезультатЗапроса[3] = "Квартира" тогда
            СтоимостьУслугПродавца = 36000 + РезультатЗапроса[1]/100;
        ИначеЕсли РезультатЗапроса[3] = "Земля" тогда
            СтоимостьУслугПродавца = 30000 + РезультатЗапроса[1]/100*2;
        ИначеЕсли РезультатЗапроса[3] = "Дом" тогда
            СтоимостьУслугПродавца = 30000 + РезультатЗапроса[1]/100;
        КонецЕсли;
        Объект.СтоимостьУслугПродавца = СтоимостьУслугПродавца;
        //3 поле
        ОтчисленияРиэлторуПокупателя = СтоимостьУслугПокупателя/100*РезультатЗапроса[0];
        Объект.ОтчисленияРиэлторуПокупателя = ОтчисленияРиэлторуПокупателя;
        //4 поле
        ОтчисленияРиэлторуПродавца = СтоимостьУслугПродавца/100*РезультатЗапроса[2];
        Объект.ОтчисленияРиэлторуПродавца = ОтчисленияРиэлторуПродавца;
        //5 поле
        ОтчисленияКомпании = СтоимостьУслугПокупателя + СтоимостьУслугПродавца -(ОтчисленияРиэлторуПокупателя + ОтчисленияРиэлторуПродавца);
        Объект.ОтчисленияКомпании = ОтчисленияКомпании;
    Иначе
        Сообщить("ААААААА");
    КонецЕсли;
КонецПроцедуры


&НаСервере    
Функция ЗапросНаСервере(Ссылка)
            
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Сделка.Потребность.Риэлтор.ДоляОтКомиссии КАК ДоляОтКомиссииПокупатель,
        |    Сделка.Предложение.Цена КАК Цена,
        |    Сделка.Предложение.Риэлтор.ДоляОтКомиссии КАК ДоляОтКомиссииПродавец,
        |    Сделка.Предложение.ОбъектНедвижимости.ТипНедвижимости КАК ТипНедвижимости
        |ИЗ
        |    Документ.Сделка КАК Сделка
        |ГДЕ
        |    Сделка.Ссылка = &Ссылка";
    
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Цена = ВыборкаДетальныеЗаписи.Цена;
    ДоляОтКомиссииПокупатель = ВыборкаДетальныеЗаписи.ДоляОтКомиссииПокупатель;
    ДоляОтКомиссииПродавец = ВыборкаДетальныеЗаписи.ДоляОтКомиссииПродавец;
    ТипНедвижимости = ВыборкаДетальныеЗаписи.ТипНедвижимости;
    КонецЦикла;


    Массив = Новый Массив(4);
    Массив[0] = ДоляОтКомиссииПокупатель;
    Массив[1] = Цена;
    Массив[2] = ДоляОтКомиссииПродавец;
    Если ТипНедвижимости = перечисления.ТипНедвижимости.Квартира тогда    
        Массив[3] = "Квартира";
    ИначеЕсли  ТипНедвижимости = перечисления.ТипНедвижимости.Земля тогда
        Массив[3] = "Земля";
    ИначеЕсли  ТипНедвижимости = перечисления.ТипНедвижимости.Дом тогда
        Массив[3] = "Дом";
    КонецЕсли;
    
    Возврат Массив;
    
    
КонецФункции
1 catena
 
13.12.18
10:03
Не вижу кода, который отрабатывает при "когда в новом документе вводишь второе поле" и точного текста ошибки.
2 ZDenis
 
13.12.18
10:07
(0) В новом документе еще нет ссылки, пока он не записан. поэтому у тебя запрос ничего не получает.
3 Fleapse
 
13.12.18
10:30
{Документ.Сделка.Форма.ФормаДокумента.Форма(118)}: Преобразование значения к типу Число не может быть выполнено
        СтоимостьУслугПокупателя = РезультатЗапроса[1]/100*3;




это код ошибки
4 Fleapse
 
13.12.18
10:32
(2) спасибо отредактирую запрос
5 Eiffil123
 
13.12.18
16:07
(3) тут нужно либо убирать запрос, либо делать запись перед его выполнением. Иначе данные будут некорректные.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший