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

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

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

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

Funt Фунтиков

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

данные поместил, по отладчику просматриваю, все данные присваиваются. Результат ноль: РезельтатЗапроса - пустой!
Тут получаются входные данные частично берутся из другого запроса

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

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

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


Параметр КолПечЛист - приходит с формы

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

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

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

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

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


Блин в другом запросе тоже пустота приходит!
Добавлено: 22 мая 2020, 23:43


Надыбал в интернете такую вещь как "консоль запросов". Установил универсальную версию, так она возмущается на то, что клиент должен быть Толстым.
Может кто подскажет как нормальная ли эта вещь или как можно "поизучать" запросы?

antoneus

Ну так запускайте 1с в режиме толстого клиента и вперед. Для изучения рекомендую книжку Хрусталевой.

LexaK

Funt Фунтиков,
ЦитироватьНадыбал в интернете такую вещь как "консоль запросов".
подыбайте еще в инете, может найдете универсальную консоль для разных клиентов и разных форм?
если помогло нажмите: Спасибо!

Funt Фунтиков

Через консоль запросов все работает нормально, но когда начинаешь делать запрос программно, возвращается пустой, хотя при проверке на отладчике переменные ЦветПечатиОфсет и КолПечЛистОфсет принимают правильный тип и значения

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

Функция возврата с запросом выглядит так:
Цитировать&НаСервере
Функция ПолучитьПриладкуОфсет (ЦветПечатиОфсет, КолПечЛистОфсет);
   
   Сообщить("Начало запроса!!");

   Запрос = Новый Запрос;
   Запрос.Текст =
      "ВЫБРАТЬ
      |   ВЫБОР
      |      КОГДА &КолПечЛистОфсет = 0
      |         ТОГДА 0
      |      КОГДА &КолПечЛистОфсет <= 500 
      |         ТОГДА ПриладкаОфсет.Лист500
      |      КОГДА &КолПечЛистОфсет > 500 и &КолПечЛистОфсет <= 1000
      |         ТОГДА ПриладкаОфсет.Лист1000
      |      КОГДА &КолПечЛистОфсет > 1000 и &КолПечЛистОфсет <= 2000
      |         ТОГДА ПриладкаОфсет.Лист2000
      |      КОГДА &КолПечЛистОфсет > 2000 и &КолПечЛистОфсет <= 3000
      |         ТОГДА ПриладкаОфсет.Лист3000
      |      КОГДА &КолПечЛистОфсет > 3000 и &КолПечЛистОфсет <= 4000
      |         ТОГДА ПриладкаОфсет.Лист4000
      |      КОГДА &КолПечЛистОфсет > 4000 и &КолПечЛистОфсет <= 5000
      |         ТОГДА ПриладкаОфсет.Лист5000
      |      КОГДА &КолПечЛистОфсет > 5000 и &КолПечЛистОфсет <= 6000
      |         ТОГДА ПриладкаОфсет.Лист5000
      |      КОГДА &КолПечЛистОфсет > 6000 и &КолПечЛистОфсет <= 7000
      |         ТОГДА ПриладкаОфсет.Лист7000
      |      КОГДА &КолПечЛистОфсет > 7000 и &КолПечЛистОфсет <= 8000
      |         ТОГДА ПриладкаОфсет.Лист8000
      |      КОГДА &КолПечЛистОфсет > 8000 и &КолПечЛистОфсет <= 9000
      |         ТОГДА ПриладкаОфсет.Лист9000      
      |      ИНАЧЕ ПриладкаОфсет.Лист10000
      |          КОНЕЦ КАК ЛистПриладка
      |   ИЗ
      |      РегистрСведений.ПриладкаОфсет КАК ПриладкаОфсет
      |   ГДЕ
      |        ПриладкаОфсет.ЦветПриладкаОфсет = &ЦветПечатиОфсет
      |";
      
       Запрос.УстановитьПараметр("ЦветПечатиОфсет",ЦветПечатиОфсет);
       Запрос.УстановитьПараметр("КолПечЛистОфсет",КолПечЛистОфсет);

      РезультатЗапроса = Запрос.Выполнить();
      Выборка = РезультатЗапроса.Выгрузить();
      
      Если Выборка.Следующий() тогда
         Сообщить("Проверка - " + Выборка.ЛистПриладка);
         Возврат Выборка.ЛистПриладка;
      ИНАЧЕ 
         Возврат 0;
         
         Сообщить("Пустой возврат");
      КонецЕсли;
      
      Сообщить("Запрос окончен!!");
КонецФункции

Такое ощущение что не передаются исходные данные в запрос
Может все таки кто-нибудь поможет разобраться в чем дело?!

antoneus

Вот это:

Выборка = РезультатЗапроса.Выгрузить();
     
Если Выборка.Следующий() тогда


работать не будет. Что, и ошибки не возникает? Попробуй

Выборка = РезультатЗапроса.Выбрать();

Funt Фунтиков

Цитата: antoneus от 28 мая 2020, 12:08
Вот это:

Выборка = РезультатЗапроса.Выгрузить();
     
Если Выборка.Следующий() тогда


работать не будет. Что, и ошибки не возникает? Попробуй

Выборка = РезультатЗапроса.Выбрать();

Получается переменная Выборка - Индекс 0, Тип элемента - Неопределено
Значение возвращает - 0, а должно быть - 250

antoneus

Ну, не знаю, мне отсюда больше ничего не видно(

А что за лютая архитектура такая? ПриладкаОфсет - это регистр сведений с 10 измерениями? А если вариантов приладки будет сто, у него будет сто измерений?

Funt Фунтиков

До этого другой запрос с такими условиями запроса из регистра нормально работал, когда база находилась в локальной сети. Сейчас я базу перенес на свой компьютер и началась такая проблема. Это может повлиять на такую проблему.
У нас два компьютера и оба должны работать с базой.

Уже вторую неделю не могу решить этот вопрос!!!

antoneus

Могу подключиться посмотреть, уже вторую неделю интересно что там происходит. Пиши в личку, если что.

Теги:

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

Рейтинг@Mail.ru

Поиск