Изменить значение справочника и полей связанных с ним по изменению другого справочника

Bpm onsite 5.4

Общая задача: Изменить значение справочника и полей связанных с ним по изменению другого справочника.
Частная задача: изменяется город отправления или прибытия, выполняется SQL запрос к базе и в полю справочника "Конкурентное предложение" присваевается id предложения по аналогичному направлению, отображается название предложения сразу же, в другие поля автоматически отображаются значения названия Конкурента и Ставка конкурента.

в обработчиках полей города отправления и прибытия стоит такой код:

// определяем данные цены конкурента по месту прибытия и отправления груза
System.IO.File.AppendAllText("C:\\logs\\debug_zayavka.txt", "ид города отправления "+Page.DepartureCityEdit.Value+"\n");
var select1 = new Select(userConnection).Top(1)
                .Column("Id")
        .Column("Name")
                .Column("RateTotal")
        .From("PriceExp")
            .Where(Column.Const(Page.DepartureCityEdit.Value)).IsEqual("CityFromId");
select1.Execute();

При выполнении кода происходит ошибка:
error
Как ее исправить?

Так же меня интересует, как после выполнения запроса сохранить данные выборки в определенные переменные?

Так же меня интересует, как после выполнения запроса сохранить данные выборки в определенные переменные?

Нравится

8 комментариев

Вот пример запроса
Select selectPhone = (new Select(Page.UserConnection)
.Top(2000)
.Column(Column.Asterisk())
.From(selectPhoneMain).As("sel"))
as Select;

var selectExecute = selectPhone.ExecuteReader(Page.UserConnection.EnsureDBConnection());

var i=0;
while (selectExecute.Read())
{
i++;
var guidFromSelect = selectExecute[0].ToString();
phoneFilters.Add(structure.CreateFilterWithParameters(dataSource.Schema, FilterComparisonType.Equal, "Id", new Guid(guidFromSelect)));
}

Здравствуйте, Илья.

Для исправления измените вхождение userConnection на UserConnection.

Для сохранения результатов работы команды select1 в переменные, необходимо использовать интерфейс IDataReader:

// определяем данные цены конкурента по месту прибытия и отправления груза
System.IO.File.AppendAllText("C:\\logs\\debug_zayavka.txt", "ид города отправления "+Page.DepartureCityEdit.Value+"\n");
var select1 = new Select(UserConnection).Top(1)
                .Column("Id")
        .Column("Name")
                .Column("RateTotal")
        .From("PriceExp")
            .Where("CityFromId").IsEqual(Column.Const(Page.DepartureCityEdit.Value)) as Select;
 
Guid idValue;
string nameValue;
int rateValue;
 
using (var dbExecutor = UserConnection.EnsureDBConnection()) {
	using (IDataReader dr = select1.ExecuteReader(dbExecutor)) {
		if (dr.Read()) {
			idValue = (Guid)dataReader.GetValue(0);
			nameValue = (string)dataReader.GetValue(1);
			rateValue = (int)dataReader.GetValue(2);
		}
	}
}

выдает ошибку
ошибка

Чтобы исправить первую ошибку подключите System.Data к скрипту.
Чтобы исправить три другие - измените вхождение dataReader на dr, это я опечатался.

сейчас код:

using System.Data;
 
// определяем данные цены конкурента по месту прибытия и отправления груза
System.IO.File.AppendAllText("C:\\logs\\debug_zayavka.txt", "ид города отправления "+Page.DepartureCityEdit.Value+"\n");
var select1 = new Select(UserConnection).Top(1)
                .Column("Id")
        .Column("Name")
                .Column("RateTotal")
        .From("PriceExp")
            .Where("CityFromId").IsEqual(Column.Const(Page.DepartureCityEdit.Value)) as Select;
 
Guid idValue;
string nameValue;
int rateValue;
 
using (var dbExecutor = UserConnection.EnsureDBConnection()) {
        using (IDataReader dr = select1.ExecuteReader(dbExecutor)) {
                if (dr.Read()) {
                        idValue = (Guid)dr.GetValue(0);
						Page.LookupEdit18.SetValue(idValue);
                        nameValue = (string)dr.GetValue(1);
						Page.LookupEdit25.SetValue(nameValue);
                        rateValue = (int)dr.GetValue(2);
						Page.FloatEdit55.SetValue(rateValue);
                }
        }
}

причем первую строку подчеркивает как с ошибкой:
подчеркнуто

в результате компиляции вылезает следующая ошибка:
ошибка

Подключать namespace необходимо не в методе, а в структуре процесса:

Ошибка при компиляции исчезла, но появилась новая ошибка:
http://joxi.ru/qtb2U_3JTJA_eTCk1yI

Илья, ошибка говорит о некорректном преобразовании типов.

Попробуйте переменной rateValue задать значение float, а не int.

В идеале нужна отладка.

Показать все комментарии