28.03.2020 Аскер Жансуев 20039
Проверка на "пустой" результат выпо...

Содержание: 

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С.


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

Наши проекты

ПЭК
ПЭК

Отрасль:
Грузоперевозки

Внедренное типовое решение:
«1С: Управление торговлей»

- Создание прототипа SRM-системы на базе «1С: Управление торговлей»
- Автоматизация бизнес-процессов компании, связанных с поиском постав...

АО "Нижегородский водоканал"
АО "Нижегородский водоканал"

Отрасль:
Профессиональные услуги

Внедренное типовое решение:
1С:Зарплата и управление персоналом 8. КОРП

-Кадровый учет
-Расчет зарплаты
-Регламентированная отчетность
-Подбор кадров
-Анализ кадрового состава
-Учет рабочего времен...

Автоматизация учета на базе ПП "1С:Комплексная автоматизация 8" в ЗАО "Крюгер-Гранд"
ЗАО «Крюгер-Гранд»

Отрасль:
Производство

Внедренное типовое решение:
1С:Комплексная автоматизация

- Создание интерфейсов и наборов прав пользователей;
- Отражению временных разниц по лизинговому имуществу...

ООО «Еврорадиаторы»
ООО «Еврорадиаторы»

Отрасль:
1С:ERP 2.4

Внедренное типовое решение:

Специалисты «Кодерлайн» помогли перенести базу из текущей системы «1С:ERP 2.2» в новую систему «1С:ERP 2.4». ...

Госкорпорация «Ростех»
Госкорпорация «Ростех»

Отрасль:
Производство, ТЭК >> Машиностроение, приборостроение

Внедренное типовое решение:
1С:Управление холдингом 1.3.

Специалисты «Кодерлайн» помогли разработать и внедрить автоматизированную систему управления финансовой и закупочной деятельностью (АС ФЗД) ...

АО «Вертолетная сервисная компания»
АО «Вертолетная сервисная компания»

Отрасль:
МТО эксплуатации вертолетной техники

Внедренное типовое решение:
1С:Бухгалтерия КОРП

- Консультации по сложным вопросам налогового и бухгалтерского учета;
- Разработка специализированных форм внутрикорпоративной отчетност...

ФГУП «Почта России»
ФГУП «Почта России»

Отрасль:
Почта, доставка

Внедренное типовое решение:
1С:Управление торговлей

- Оформление заказов поставщикам
- Оформление заказов покупателей
- Управление складскими запасами ...

ООО "ЛИКАРД" (Лукойл)
ООО "ЛИКАРД" (Лукойл)

Отрасль:
Нефтесервис

Внедренное типовое решение:
1С:ERP Управление предприятием 2.0

Делопроизводство
• Учет и контроль исполнения поручений
Учет и хранение документов
• Учет рабочего времени
Закупки (снабжение) и...

ООО «ПЛЮСПЭЙ»
ООО «ПЛЮСПЭЙ»

Отрасль:
Организацией расчетов посредством электронных средств платежа

Внедренное типовое решение:
1С:Комплексная автоматизация

- Разработка подсистемы оперативного учета транзакций...

ООО «Солви Пак»
ООО «Солви Пак»

Отрасль:
Торговля. Производство печати на рулонных материалах

Внедренное типовое решение:
1С:CRM+1С:Комплексная автоматизация

Управление отношениями с клиентами (CRM) ...

Фирма 1С
Фирма 1С

Отрасль:

Внедренное типовое решение:
1С:Документооборот

- Подготовка функциональной модели прикладного решения «1С:Документооборот» для сервиса «1С:Облачная карта решений»; - Возможность интеграц...

Автоматизация интеграции с информсистемами клиентов на базе «1С:Предприятие 8. WMS Логистика. Управление складом»
ОАО «Фрейт Линк»

Отрасль:
Логистика и грузоперевозки

Внедренное типовое решение:
«1С:Предприятие 8. WMS Логистика. Управление складом»

– Управление складскими запасами;
– Оформление заказов покупателей;
– Логистика адресного склада;
– Управление отношениями с пост...

Наши соц. сети

Telegram-канал «Koderline 1С» Группа в Вконтакте «Кодерлайн КОРП» Rutube

Остались вопросы - обратитесь к нам!

Впишите свои Имя и Телефон, чтобы мы ответили на все интересующие Вас вопросы.
ФИО*
E-mail*
Телефон*
Сообщение