Имя: Пароль:
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) тут нужно либо убирать запрос, либо делать запись перед его выполнением. Иначе данные будут некорректные.