Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
16 Дек 2017, 16:01
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Проблема с запросом  (Прочитано 1650 раз)

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

Оффлайн JOG

  • **
  • Сообщений: 74
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-06-15
  • Сайт: 
  • Профессия: Программист 8.1
Подскажите пожалуйста как организовать запрос для получения нескольких реквизитов. Суть в следующем:
&НаСервере
Функция ПолучитьСуммуОценкиНаСервере(НомерЗБ)
СОЗапрос = Новый Запрос;
СОЗапрос.Текст =
"ВЫБРАТЬ
| НомерЗБ.СуммаОценки
|ИЗ
| Справочник.НомерЗБ КАК НомерЗБ
|ГДЕ
| НомерЗБ.Ссылка = &Ссылка";
СОЗапрос.Установитьпараметр("Ссылка",НомерЗБ);
РезультатЗапроса = СОЗапрос.Выполнить().Выгрузить();
Возврат РезультатЗапроса[0].СуммаОценки;
КонецФункции
Помимо СуммыОценки нужно выцепть СуммуКредита. Ок. Но что нужно возвращать в итоге?
&НаСервере
Функция ПолучитьСуммуОценкиНаСервере(НомерЗБ)
СОЗапрос = Новый Запрос;
СОЗапрос.Текст =
"ВЫБРАТЬ
| НомерЗБ.СуммаОценки,
| НомерЗБ.СуммаКредита
|ИЗ
| Справочник.НомерЗБ КАК НомерЗБ
|ГДЕ
| НомерЗБ.Ссылка = &Ссылка";
СОЗапрос.Установитьпараметр("Ссылка",НомерЗБ);
РезультатЗапроса = СОЗапрос.Выполнить().Выгрузить();
Возврат РезультатЗапроса[0].СуммаОценки; /* как меняется запрос, чтобы не переписывать функции на получение каждого реквизита?*/
КонецФункции



Оффлайн sertak

  • ****
  • Сообщений: 274
  • РЕПУТАЦИЯ: 74
  • КПД: 27%
  • Регистрация: 2013-01-16
    • Skype: vitaly_sertakov
  • Сайт: www.sertakov.ru
  • Профессия: Программист 1С
РезультатЗапроса = СОЗапрос.Выполнить().Выгрузить();
Возврат РезультатЗапроса;

Вернется ТаблицаЗначений. Правда, если вы с клиента вызываете, надо протестить, корректно ли таблица передастся с сервера на клиента. Были затыки какие-то. Лучше в этом случае, наверное, преобразовать таблицу значений в массив структур. Если с сервера вызываете, то все будет нормально.
Если ты знаешь свой путь, то удачи и неудачи равно продвигают тебя вперед

Оффлайн JOG

  • **
  • Сообщений: 74
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-06-15
  • Сайт: 
  • Профессия: Программист 8.1
РезультатЗапроса = СОЗапрос.Выполнить().Выгрузить();
Возврат РезультатЗапроса;

Вернется ТаблицаЗначений. Правда, если вы с клиента вызываете, надо протестить, корректно ли таблица передастся с сервера на клиента. Были затыки какие-то. Лучше в этом случае, наверное, преобразовать таблицу значений в массив структур. Если с сервера вызываете, то все будет нормально.

а как же разграничить\вытащить из этой таблицы именно то, что мне нужно?
Для одного делал так:
&НаКлиенте
Процедура НомерЗБПриИзменении(Элемент)
ТекСтрока = Элементы.Билеты.ТекущиеДанные;
ТекСтрока.СуммаОценки = ПолучитьСуммуОценкиНаСервере(ТекСтрока.НомерЗБ);
КонецПроцедуры
а для двух как сделать если там таблица значений? может через цикл как то?

Оффлайн sertak

  • ****
  • Сообщений: 274
  • РЕПУТАЦИЯ: 74
  • КПД: 27%
  • Регистрация: 2013-01-16
    • Skype: vitaly_sertakov
  • Сайт: www.sertakov.ru
  • Профессия: Программист 1С
МояТЗ = ФункцияПолученияТЗ();
Если МояТЗ.Количество() > 0 Тогда
Перем1 = МояТЗ[0].Реквизит1;
Перем2 = МояТЗ[0].Реквизит2;
КонецЕсли
Добавлено: 15 Ноя 2014, 19:12

Вообще наверное вместо ТЗ лучше использовать структуру.
Если вам нужная только первая строка запроса, тогда и загоняйте ее в структуру, и  возвращайте. Тогда и на клиент должно нормально передаться.
Добавлено: 15 Ноя 2014, 19:22

Например:
    РеквизитыСправочника = Новый Структура;
    РеквизитыСправочника.Вставить("СуммаОценки",0);
    РеквизитыСправочника.Вставить("СуммаКредита",0);   
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующая() Тогда
        ЗаполнитьЗначенияСвойств(РеквизитыСправочника,Выборка);
    КонецЕсли;
    Возврат РеквизитыСправочника;
Добавлено: 15 Ноя 2014, 19:23

Цитировать
Если Выборка.Следующая() Тогда
Если Выборка.Следующий() Тогда
Если ты знаешь свой путь, то удачи и неудачи равно продвигают тебя вперед

Последний раз редактировалось: sertak; 15 Ноя 2014, 19:23. Причина: Объединение сообщений

Оффлайн JOG

  • **
  • Сообщений: 74
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-06-15
  • Сайт: 
  • Профессия: Программист 8.1
Спасибо! Буду пробовать
Добавлено: 16 Ноя 2014, 09:27

МояТЗ = ФункцияПолученияТЗ();
Если МояТЗ.Количество() > 0 Тогда
Перем1 = МояТЗ[0].Реквизит1;
Перем2 = МояТЗ[0].Реквизит2;
КонецЕсли
Добавлено: 15 Ноя 2014, 19:12

Вообще наверное вместо ТЗ лучше использовать структуру.
Если вам нужная только первая строка запроса, тогда и загоняйте ее в структуру, и  возвращайте. Тогда и на клиент должно нормально передаться.
Добавлено: 15 Ноя 2014, 19:22

Например:
    РеквизитыСправочника = Новый Структура;
    РеквизитыСправочника.Вставить("СуммаОценки",0);
    РеквизитыСправочника.Вставить("СуммаКредита",0);   
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующая() Тогда
        ЗаполнитьЗначенияСвойств(РеквизитыСправочника,Выборка);
    КонецЕсли;
    Возврат РеквизитыСправочника;
Добавлено: 15 Ноя 2014, 19:23

Цитировать
Если Выборка.Следующая() Тогда
Если Выборка.Следующий() Тогда

Но мне нужна не первая строка запроса, в том то и дело.. Мне нужно каждый реквизит получить отдельно. Действительно, если использовать таблицу значений, компилятор начал ругаться на несоответствие типов или что-то вроде того.

В общем, пока что вышел из положения путём переписывания функций для каждого реквизита:(
Хотел просто сделать как-то покомпактнее.

Добавлено: 16 Ноя 2014, 09:36

Стоп, я наверное чего-то не понял.. там же в запросе получается первой строкой должна вывестись и СуммаОценки и СуммаКредита?
как вызвать тогда в процедуре написанную функцию? для получения реквизитов?

&НаКлиенте
Процедура НомерЗБПриИзменении(Элемент)
ТекСтрока = Элементы.Билеты.ТекущиеДанные;
ТекСтрока.СуммаОценки = ПолучитьРеквизитыНаСервере(ТекСтрока.НомерЗБ);// тут как-то по другому надо описать запрос
ТекСтрока.СуммаКредита = ПолучитьРеквизитыНаСервере(ТекСтрока.НомерЗБ);//и тут. Если убрать ссылку на (ТекСтрока.НомерЗБ), то ругается на недостаточное количество параметров
КонецПроцедуры

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

Последний раз редактировалось: JOG; 16 Ноя 2014, 09:36. Причина: Объединение сообщений

Оффлайн sertak

  • ****
  • Сообщений: 274
  • РЕПУТАЦИЯ: 74
  • КПД: 27%
  • Регистрация: 2013-01-16
    • Skype: vitaly_sertakov
  • Сайт: www.sertakov.ru
  • Профессия: Программист 1С
&НаКлиенте
Процедура НомерЗБПриИзменении(Элемент)
    ТекСтрока = Элементы.Билеты.ТекущиеДанные;
    РеквизитыСправочника = ПолучитьРеквизитыНаСервере(ТекСтрока.НомерЗБ);
    ТекСтрока.СуммаОценки = РеквизитыСправочника.СуммаОценки;
    ТекСтрока.СуммаКредита = РеквизитыСправочника.СуммаКредита;
КонецПроцедуры
Добавлено: 16 Ноя 2014, 12:40

Не заметил сразу: надо передавать в функцию ссслык на элемен справочника, а не номер:
Вместо ПолучитьРеквизитыНаСервере(ТекСтрока.НомерЗБ) Нужно ПолучитьРеквизитыНаСервере(ТекСтрока.<ИмяКолонкиССылка>);
Подствьте нужное имя
Если ты знаешь свой путь, то удачи и неудачи равно продвигают тебя вперед

Последний раз редактировалось: sertak; 16 Ноя 2014, 12:40. Причина: Объединение сообщений

Оффлайн JOG

  • **
  • Сообщений: 74
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-06-15
  • Сайт: 
  • Профессия: Программист 8.1
Спасибо!!!

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
РезультатЗапроса = СОЗапрос.Выполнить().Выгрузить();
    Возврат РезультатЗапроса[0].СуммаОценки; /* как меняется запрос, чтобы не переписывать функции на получение каждого реквизита?*/

заменить на
РезультатЗапроса = СОЗапрос.Выполнить().Выгрузить();
РезультатСтруктура = Новый Структура("СуммаОценки,СуммаКредита"); //сюда по необходимости добавляем еще реквизит
ЗаполнитьЗначенияСвойств(РезультатСтруктура, РезультатЗапроса[0]);
    Возврат РезультатСтруктура;
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.


Теги:
 

Проблема с выгрузкой НН в "Звит" Не найдено соответствие для схемы "J1201008"

Автор AldemaHРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 1180
Последний ответ 06 Июл 2016, 09:19
от AldemaH
проблема с "ЗагрузкаДанныхИзТабличногоДокумента"

Автор bratmaratРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 4
Просмотров: 4710
Последний ответ 08 Янв 2014, 14:30
от LordWizard
Проблема с развертыванием окон и сохранением окон

Автор SokresРаздел Пользователям "1С - Предприятие 8"

Ответов: 1
Просмотров: 2437
Последний ответ 09 Дек 2015, 14:09
от pavl_vs
Проблема с отчетом "Перемещение товаров"

Автор sailРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 3327
Последний ответ 14 Дек 2010, 20:27
от progmikon
1C 8.2 УПП проблема с отчетом "Задолженость по контрагентам"

Автор LeonidLeonidРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 3587
Последний ответ 26 Сен 2011, 20:42
от Dethmontt

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
157 Сообщений
ilyay ilyay
66 Сообщений
alex0402
53 Сообщений
AIFrame
47 Сообщений
andron81_81
44 Сообщений
oleg-x
44 Сообщений
BuhRust
33 Сообщений
MuI_I_Ika MuI_I_Ika
32 Сообщений
Golickoff Golickoff
31 Сообщений
Dima Dddd Dima Dddd
24 Сообщений

* Кто онлайн

  • Точка Гостей: 256
  • Точка Скрытых: 0
  • Точка Пользователей: 2
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal