Ошибка выгрузки иб пустой запрос

Содержание: 

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

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

Описание ошибки

Ошибка в том что, при обновлении разрабатываемого приложения (Shift-F7) получаю ошибку
Операция конфигурирования завершена неуспешно
Ошибка загрузки/выгрузки конфигурации
По причине:
Отсутствует контейнер метаданных.
2022-04-03 16-42-03 TestExtensions - 1C Enterprise Development Tools

Как воспроизвести

Тестирование проводилось на небольшой конфигурации «Конвертация данных 3».

  1. Открыта новая рабочая область EDT
  2. Из файловой ИБ импортирована конфигурация в новый (первый в рабочем пространстве) проект
  3. Создаю новый (второй) проект Расширения конфигурации. Форму мастера создания нового расширения оставляю без изменений, по умолчанию.
  4. После появления в панели навигатора нового расширения пытаюсь запустить конфигурацию или обновить приложение и получаю ошибку.

Скриншоты

No response

Ожидаемое поведение

Ожидал, что пустое расширение не будет препятствовать запуску конфигурации.

Лог рабочей области

metadata.zip

Версия 1С:EDT

Ruby 2021.2.12

Операционная система

Windows

Установленные плагины

Нет плагинов

Дополнительная информация

1С:Предприятие 8.3 (8.3.20.1789)
Конвертация данных, редакция 3.1 (3.1.1.6)

Доброго дня, коллеги!

Тренеры курса Подготовка к аттестации 1С:Специалист по платформе 1С:Предприятие 8.3 получают обратную связь от слушателей и внимательно следят за подходами оценки решений со стороны экзаменаторов. Следующая ошибка, за которую часто снижают оценку на экзамене, из разряда неоднозначных и, если вы сейчас готовитесь к сертификации, то рекомендуем вам прочитать ответ тренера.

Вопрос

Добрый день! В списке “наиболее часто встречающихся ошибок, характерных для любой учетной задачи” есть пункт “Выгрузка результата запроса в промежуточную таблицу (например, в таблицу значений) без необходимости“. Правильно ли я понимаю, что в этот пункт попадают и временные таблицы в запросе?

Ответ

Здравствуйте!

В данном пункте имеется в виду выгрузка результата запроса во внешний объект структурного типа (таблица значений, дерево значений, структура, массив, список). То есть смысл данного ограничения в том, что нужно, по возможности, извлекать данные непосредственно из результата запроса (через выборку результатов запроса), не используя промежуточных объектов.

Обратите внимание на фразу “без необходимости”. Иногда получить требуемые данные запросом затруднительно или невозможно, в таком случае приходится использовать промежуточное хранение результатов, над которым производятся дополнительные преобразования. Либо имеется иная причина для использования подобных промежуточных таблиц. В любом случае, нужно суметь обосновать свою позицию на экзамене.

Например, если по результатам запроса заполняются данные регистров, документов, производится вывод отчета (и структура отчета позволяет использовать результат запроса напрямую), то использование промежуточной таблицы будет лишним – нужно извлекать данные непосредственно из результатов запроса.

Если же весь смысл выполнения запроса в том, чтобы заполнить экранную таблицу значений или дерево значений, которые затем будет редактировать пользователь, или же структура отчета такова, что данные для него не удается (или очень сложно) полностью сформировать в запросе и гораздо проще сделать это с использованием промежуточной таблицы, то в этом случае использование промежуточной таблицы оправдано.

Есть ещё один пример, над которым давно уже “ломаем копья”. Во многих примерах данного курса движения регистров (точнее, наборы записей регистров) при проведении документов загружаются из результатов запроса методом Загрузить(). С одной стороны, метод Загрузить() принимает в качестве аргумента только таблицу значений (это, скорее недоработка разработчиков платформы, возможно, когда-нибудь и этот момент улучшат). Поэтому, чтобы его использовать, приходится выгружать результат запроса в промежуточную таблицу. Такая запись более лаконична и, так как используется встроенная функция, можно предполагать, что загрузка будет производиться быстрее, чем построчный перебор выборки из результата запроса и построчное заполнение набора записей регистра. И раньше такой прием не вызвал нареканий у экзаменаторов. Однако в последнее время их взгляды изменились, и, по некоторой информации, за использование такой конструкции стали снижать оценку. Поэтому в данном случае и в подобных сомнительных и не совсем однозначных ситуациях на экзамене лучше все-таки использовать выборку из результатов запроса. Что до реальной практики, то в типовых конфигурациях этот прием используется достаточно широко.

Что касается временной таблицы, то она формируется в пакете запросов, когда результата запроса как такового еще нет – при создании временной таблицы мы находимся как бы “внутри” выполняемого на сервере запроса. Поэтому даже с формальной точки зрения эта фраза к временной таблице запроса не применима.

Небольшое дополнение к ответу. Иллюстрация того, как делать не надо (взято из типовой конфигурации):

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

Вместо выгрузки в таблицу значений здесь, в соответствии с требованиями экзамена, следовало бы обратиться к выборке из результатов запроса:

Выборка = ЗапросДокОтгрузки.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
    ДокументОтгрузки = Выборка.Ссылка;
КонецЕсли;

Ошибка выгрузки ИБ ☑ 0

BUBU

26.06.12

09:45

1с7.7

Перенесли журнал (файл LDF) на другой диск.

Делали следующим образом :

1. Сначала DETACH базы

2. Скопировали LDF на другой

1

BUBU

26.06.12

09:50

Извиняюсь, продолжаю

2. Скопировали LDF на другой диск

3. ATTACH базы

После этого при попытке ВЫЗРУЗИТЬ ИБ

в журнале регистрации сообщение

Ошибка выгрузки ИБ

%s запрос [%d] : пустой запрос

Подскажите, что не так сделали ?

2

Скользящий

26.06.12

09:51

Путь к ЛДФ прописали?

3

BUBU

26.06.12

09:52

(2) Да, прописали новый путь

И с базой все нормально работают, а выгрузка не идет

4

1dvd

26.06.12

09:54

а MDF?

5

BUBU

26.06.12

10:01

(4) МДФ не трогали

  1. Добрый день!
    Возникла проблема при создании архива средствами конфигуратора 1С в режиме : «Выгрузка данных».
    В самом конце (по времени) выгрузки выдается ошибка : Ошибка выгрузки ИБ %s Запрос[%d] : Пустой запрос.

    БД SQL размер : данные 5308 мб
    лог 4113 мб.

    Помогите разобраться с этой проблемой.

    Копия средствами SQL делается ежедневно.
    Люди умные, научите раскрывать эту копию на реальной БД, чтобы 1С восприняла корректно

    Очень ждем ответа! Не можем обновиться. Без возможности выгрузки из 1С страшно.

  2. Такое впечатление что просто нет места на диске…

Поделиться этой страницей


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

Добрый день всем! Может кто сталкивался с такой ерундой — каждый день ночью планировщик запускает батник, который выгружает базу. Проблемы были только тогда, когда какой-нибудь из юзеров забудет вечером выйти из базы. В журнале тогда оставалось сообщение «Ошибка выгрузки ИБ». Последние 2 дня выгрузка не проводится, в журнале регистриуется событие «Выгрузка ИБ не выполнена» и все. В чем может быть дело? Если толкаю батник «руками» или запускаю задачу в планировщике — бэкап делается без проблем. В какую сторону рыть? Заранее благодарен всем ответившим!

ни у кого такой ерунды не было?

а что за батник? каким способом выгрузка проходит?

BAT-ник такой: «D:1C1Cin1cv7s.exe» CONFIG /Dd:1cDBSobin /NAdmin /PPass /@d:1carchivesu_conf.txt

(+4) запускается планировщиком ночью

Тэги:

Комментарии доступны только авторизированным пользователям

Содержание: 

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:

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

Вариант 1:

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

Правильно:

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

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

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

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

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

Вариант 2:

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

Правильно:

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

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

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

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

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

  • Ошибка выгрузки документа во временный файл для подписания
  • Ошибка выжившего ремни безопасности
  • Ошибка выборки нуля весы штрих принт калибровка
  • Ошибка выгрузки данных внутренняя ошибка сервиса 500 эвотор
  • Ошибка выжившего примеры самолет