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

Запрос данных из справочника

Автор Funt Фунтиков, 20 мая 2020, 17:52

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

Funt Фунтиков

Доброго всем времени суток!

Делаю запрос из двух разных справочников, ошибок не выдает, но и результат не возвращает и не выводит

Вот код из обработки выбора
Процедура БумагаОблЛистОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
стрБумага = Строка(ВыбранноеЗначение);
БумагаВалюта = ПолучитьВалютуБумага(стрБумага);
      КонецПроцедуры


Вот код запроса
&НаСервереБезКонтекста
Функция ПолучитьВалютуБумага(Ссылка)
Запрос = Новый Запрос;
Запрос.Текст =
"Выбрать
|Справочник.Валюта
|ИЗ Справочник.ЦифраМатериал КАК Справочник
|ГДЕ Справочник.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка",Ссылка);
Результат = Запрос.Выполнить().Выгрузить();
Возврат Результат [0].Валюта;
Сообщить("Результат - " + Результат);

ВалютаБумага = Результат [0].Валюта;
Запрос = Новый Запрос;
Запрос.Текст =
"Выбрать
|Справочник.ЦенаВРублях
|ИЗ Справочник.Валюта КАК Справочник
|ГДЕ Справочник.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка",ВалютаБумага);
РезультатВалюта = Запрос.Выполнить().Выгрузить();
Возврат РезультатВалюта [0].ЦенаВРублях;
Сообщить("Результат - " + РезультатВалюта);

КонецФункции


Суть задачи: из одного справочника запрашивается тип валюты на бумагу (например EUR), а из другого значение данной валюты.
Необходимо еще добавить один запрос из справочника ЦифраМатериал, чтобы можно было бы работать с двумя реквизитами?

antoneus

Да не будет никогда ссылка равна строке. Что вернет

БумагаВалюта = ПолучитьВалютуБумага(ВыбранноеЗначение);

?

Funt Фунтиков

Цитата: antoneus от 20 мая 2020, 18:16
Да не будет никогда ссылка равна строке. Что вернет

БумагаВалюта = ПолучитьВалютуБумага(ВыбранноеЗначение);

?

это я поменял - БумагаВалюта = ПолучитьВалютуБумага(ВыбранноеЗначение);
Но он все равно ничего не возвращает и не сообщает вообще

antoneus

Конечно, не сообщает - Сообщить после возврата стоит) В выбранном значении что хоть находится? Сообщить(ТипЗнч(ВыбранноеЗначение)) - что пишет?

Funt Фунтиков

Цитата: Funt Фунтиков от 20 мая 2020, 18:34
Цитата: antoneus от 20 мая 2020, 18:16
Да не будет никогда ссылка равна строке. Что вернет

БумагаВалюта = ПолучитьВалютуБумага(ВыбранноеЗначение);

?

это я поменял - БумагаВалюта = ПолучитьВалютуБумага(ВыбранноеЗначение);
Но он все равно ничего не возвращает и не сообщает вообще

возвращаю значение, процесс проходит нормально и присваиваю его реквизиту
БумагаВалюта = ПолучитьВалютуБумага(ВыбранноеЗначение);
Сообщить(Строка(БумагаВалюта) + " - ОК");
Объект.ЦенаЛистБумагаОблЛист = БумагаВалюта;


Сообщает он правильное значение : 163,3, а вот объекту присваивает почему то - 99,99.

Может кто подскажет в чем прикол?

antoneus

В длине реквизита, в чем же еще.

Funt Фунтиков

Цитата: antoneus от 20 мая 2020, 18:53
В длине реквизита, в чем же еще.

ОГОНЬ! Спасибо большое!
Добавлено: 21 мая 2020, 15:21


С запросами вообще какой-то финиш

есть запрос из справочника, который возвращает несколько параметров.
Параметры вывожу в сообщении, все правильно выводится!
Следом делаю запрос из регистра. по одному и возвращенных параметров -> Выдает ошибку или вообще ничего не возвращает!!

&НаСервере
Функция ПолучитьВалютуБумага(Ссылка, КолПечЛист)
Сообщить("Проверка - " + Ссылка);

// запрос ВАЛЮТЫ, ЦЕНЫ за лист, ГРУППЫ материала
Запрос = Новый Запрос;
Запрос.Текст =
"Выбрать
|Справочник.Валюта,
|Справочник.СтоимостьЛист,
|Справочник.РегистрГруппа,
|Справочник.Родитель
|ИЗ Справочник.ЦифраМатериал КАК Справочник
|ГДЕ Справочник.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка",Ссылка);
Результат = Запрос.Выполнить().Выгрузить();
Сообщить("Валюта - " + Результат [0].Валюта);
Сообщить("Стоимость за лист - " + Результат [0].СтоимостьЛист);
Сообщить("Группа материала - " + Результат [0].Родитель);
Сообщить("Группа - " + Результат [0].РегистрГруппа);

СсылкаРегистр = Результат [0].Родитель;

// Запрос цены ВАЛЮТЫ
ВалютаБумага = Результат [0].Валюта;
Запрос = Новый Запрос;
Запрос.Текст =
"Выбрать
|Справочник.ЦенаВРублях
|ИЗ Справочник.Валюта КАК Справочник
|ГДЕ Справочник.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка",ВалютаБумага);
РезультатВалюта = Запрос.Выполнить().Выгрузить();

// запрос коэффициента из регистра НАКОПЛЕНИЙ
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВЫБОР
|КОГДА &КолПечЛист = 0
| ТОГДА 0
|КОГДА &КолПечЛист <= 50
| ТОГДА СтоимостьБумаги.До50
|КОГДА &КолПечЛист <= 100
| ТОГДА СтоимостьБумаги.До100
|КОГДА &КолПечЛист < 250
| ТОГДА СтоимостьБумаги.От100
|КОГДА &КолПечЛист < 500
| ТОГДА СтоимостьБумаги.От250
|КОГДА &КолПечЛист < 1000
| ТОГДА СтоимостьБумаги.От500
|ИНАЧЕ СтоимостьБумаги.От1000
    |    КОНЕЦ КАК Коэффициент
|ИЗ
| РегистрСведений.ЦенаБумаги КАК СтоимостьБумаги
|ГДЕ
|   РегСведЦифра = &ГруппаМатериал";

Запрос.УстановитьПараметр("ГруппаМатериал",СсылкаРегистр);
Запрос.УстановитьПараметр("КолПечЛист",КолПечЛист);
    РезультатРегистр = Запрос.Выполнить();

    Если РезультатРегистр.Пустой() Тогда
         Сообщить("Коэффициент пустой - ");
    Иначе
         Выборка = РезультатРегистр.Выбрать();
         Выборка.Следующий();
    Сообщить("Коэффициент - " + Выборка.Коэффициент);
    //Возврат Выборка.Коэффициент;
   КонецЕсли;

Сообщить("Цена в рублях - " + РезультатВалюта [0].ЦенаВРублях);

Сообщить("Коэффициент - " + Строка(РезультатРегистр [0].Коэффициент));

ЦенаЛист = РезультатВалюта [0].ЦенаВРублях *  Результат [0].СтоимостьЛист;
Сообщить(" Цена за лист - " + ЦенаЛист);
Возврат ЦенаЛист;
КонецФункции



Выдает ошибку
{Документ.РасчетЦифра.Форма.ФормаДокумента.Форма(358)}: Получение элемента по индексу для значения не определено
Сообщить("Коэффициент - " + Строка(РезультатРегистр [0].Коэффициент));


Либо возвращает пустой запрос из регистра

LexaK

Funt Фунтиков, как исправить ошибку, в этом коде команду КонецЕсли надо перенести, сделайте так

    ...
  Если РезультатРегистр.Пустой() Тогда
         Сообщить("Коэффициент пустой - ");
        ЦенаЛист = 0;
    Иначе
         Выборка = РезультатРегистр.Выбрать();
         Выборка.Следующий();
         Сообщить("Коэффициент - " + Выборка.Коэффициент);
         //Возврат Выборка.Коэффициент;
//   КонецЕсли; // перенесли ниже

        Сообщить("Цена в рублях - " + РезультатВалюта [0].ЦенаВРублях);
   
        Сообщить("Коэффициент - " + Строка(РезультатРегистр [0].Коэффициент));
   
        ЦенаЛист = РезультатВалюта [0].ЦенаВРублях *  Результат [0].СтоимостьЛист;
        Сообщить(" Цена за лист - " + ЦенаЛист);
    КонецЕсли; //перенесли сюда

    Возврат ЦенаЛист;
КонецФункции


ошибки не будет,  а то что ни чего не находит или ноль возвращает, так это у вас не все данные введены,
проверьте и введите все нужные данные и все заработает!
если помогло нажмите: Спасибо!

Funt Фунтиков

Цитата: LexaK от 21 мая 2020, 16:58
Funt Фунтиков, как исправить ошибку, в этом коде команду КонецЕсли надо перенести, сделайте так
ошибки не будет,  а то что ни чего не находит или ноль возвращает, так это у вас не все данные введены,
проверьте и введите все нужные данные и все заработает!

Ошибку не возвращает, а вот выдает что "Коэффициент пустой".

А может есть какой-нибудь материальчик по запросам для чайников? Потому что, делаю на другой форме запрос, тоже возвращается пустой или с ошибками разными

LexaK

Funt Фунтиков,
ЦитироватьОшибку не возвращает, а вот выдает что "Коэффициент пустой".
уже прогресс! ошибок нет! теперь нужные данные в базу 1С поместите и будет результат!
если помогло нажмите: Спасибо!

Теги:

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

Рейтинг@Mail.ru

Поиск