Проверка на "пустой" результат выполнения запроса

0
690
28.03.2020 Аскер Жансуев

Содержание: 

1.       Проблемы программирования 1С 8.3

2.       Код в 1С 8.3  


1.     Проблемы программирования 1С 8.3


Вопрос "правильной" обработки результата выполнения запроса в программе 1С Бухгалтерия 8.3 – один из первых вопросов, который возникает у разработчиков 1С, встав на путь просветления когда они начинают интересоваться не только тем "чтобы код работал", но и тем "как лучше, быстрее" и другими вопросами повышения качества своего кода.

 

Есть два варианта. Они зависят от цели, которую требуется достичь при программировании 1С 8.3:


1-й вариант. Требуется просто проверить - результат "пустой" или не "пустой", и в зависимости от этого выполнить те или иные действия (при этом не требуется перебирать результат выполнения запроса);


2-й вариант. В дополнение к действиям, перечисленным для 1-го варианта, требуется перебрать и обработать результат выполнения запроса, если он оказался не "пустым". 


2.     Код в 1С 8.3


Рассмотрим оба варианта на примере выполнения работы такого запроса в коде 1С 8.3:

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


Вариант 1:

Если не требуется перебирать результаты, то согласно рекомендациям для разработчиков на сайте ИТС официальный 1С:


Правильно:

Если НеРезультатЗапроса.Пустой()Тогда
// код, выполняемый, если результат запроса не "пустой"
Иначе
// код, выполняемый в противном случае 
КонецЕсли;

Неправильно (ОШИБКА ВЫПОЛНЕНИЯ ЗАПРОСА):

    Выборка =РезультатЗапроса.Выбрать();
ЕслиВыборка.Количество()Тогда
// код, выполняемый, если результат запроса не "пустой"
Иначе
// код, выполняемый в противном случае 
КонецЕсли;

И совсем плохо:

ТаблЗнач=РезультатЗапроса.Выгрузить();
ЕслиТаблЗнач.Количество()Тогда
// код, выполняемый, если результат запроса не "пустой"
Иначе
// код, выполняемый в противном случае 
КонецЕсли;

Вариант 2:

Если требуется перебирать результаты, то согласно рекомендациям с сайта 1С 8.3, о которых речь шла выше:


Правильно:

    Выборка =РезультатЗапроса.Выбрать();
//перебор результатов запроса
    Сообщение =НовыйСообщениеПользователю;
ПокаВыборка.Следующий()Цикл
Сообщение.Текст="На складе """+Выборка.СкладПредставление
+""" не хватает товара """+Выборка.ТоварПредставление
+""" в количестве "+Выборка.НедостающееКоличество+" ед.";
Сообщение.Сообщить();
КонецЦикла;
// код после перебора результатов запроса

Неправильно:

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

То есть если Вам требуется выполнять какие-либо действия, перебирая результат и время выполнения запроса, тогда несмотря на то, что результат выполнения может оказаться "пустым", предварительно проверять это не рекомендуется. Следует сразу выбрать, какой писать код, чтобы использовал схему перебора результата выполнения запроса при работе с версиями программы 1С.


Специалист компании ООО «Кодерлайн»
Аскер Жансуев

Задать вопрос автору статьи
Тема вопроса*
Ваше имя*
E-mail или телефон*
Ваш вопрос*
 

Добавить комментарий
Текст сообщения*
Защита от автоматических сообщений
 
Теги
#1С: CRM #1С: ERP #1С: ERP Управление строительной организацией #1С: ERP. Управление буровой компанией #1С: WMS Управление складом #1С: Аренда и управление недвижимостью #1С: БУХ #1С: Договорчики #1С: Документооборот #1С: ЗУП #1С: Интеграция #1С: КА #1С: Колледж #1С: Конвертация данных #1С: Модули #1С: Платформа #1С: Розница #1С: Сценарное тестирование #1С: ТОИР #1С: УАТ #1С: УКФ #1С: Университет #1С: УНФ #1С: УПП #1С: Управление строительной организацией #1С: УТ #1С: УХ #1С:ERP #1С.6-НДФЛ #ADO #APACHE #API #canonical #com-объекты #Excel #Excel в 1С #GoogleDrive #HTTP #ITIL #Koderline: Управление медиа-холдингом #Koderline: Управление проектами строительства скважин #LINUX #MS SQL Server #WEB #WEB-сервисы 1С #Word #XML #Администрирование 1С #акты в 1С #Безопасность сервера #Бесшовная интеграция #БИТ.Финанc #Битрикс24 #Блокировки в 1С #БСП #БУ #Бурение скважин #Бюджетирование #Внедрение #Внедрение ERP #Закрытие месяца #Запросы 1С #Интеграция 1С #КАК ОТРАЖАЮТСЯ ТОВАРЫ В ПУТИ 1С #Как сделать в 1С #Конвертация данных #Корпоративное сопровождение #Лизинг #Лицензии 1С #Механизм Анализа Данных в 1С #Моделирование #Модуль Диадок #МСФО #Налоги #Обмен между базами #Обновления #Оптимизация #Отпуск #Отчетность #Отчеты в 1С #Оценка задач #Перенос данных #Планирование #Полезные обработки #Правила обмена #предопределенные элементы справочников #Проводки 1С #Программирование в 1С #Программные права #Продажи #Производство #Работа с объектами в 1С #Расширение конфигурации #РСБУ #СКД #Соединение COM в 1С платформе #Сравнение конфигураций #Тестирование 1С #Техническое задание #Торговое оборудование #Транспортная логистика #Управление проектами #Финансовый учет #Хранилище настроек #Ценообразование #Экзамен 1С #Яндекс.Касса Email или телефон Работа с объектами в 1С Функциональные опции в 1С
Услуги программиста 1С
Получите специалиста  
для решения всех задач
в области 1С
Программы 1С
Цены и подробное описание программ 1С:Предприятие 8.