8.х Найдите ошибку в коде

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем tmr77, 11 ноя 2008.

  1. TopicStarter Overlay
    tmr77
    Offline

    tmr77

    Регистрация:
    11 ноя 2008
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    В тестовом задании необходимо найти ошибку в коде, но я не вижу никакой ошибки, может кто-то видит?
    Код:
    	
    Для Каждого Регистр Из Метаданные.РегистрыСведений Цикл
    Запрос = Новый Запрос();
    Запрос.Текст = "Выбрать Сумма(1) Как Поле
    | ИЗ РегистрСведений." + Регистр.Имя + " КАК Регистр";
    ЧислоЗаписей = Запрос.Выполнить().Выгрузить()[0].Поле;
    Сообщить(Регистр.Имя + ": " + ЧислоЗаписей);
    КонецЦикла;
    
    
  2. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Попробуйте сначала запрос по 1 регистру написать, причем Конструктором запросов, посмотрите результат. Мне кажется он будет пустым :)

    А уже когда найдете в чем дело, сделайте запрос для произвольного регистра, подставляя имя.

    Ну и пользуйтесь отладчиком - в Регистр.Имя все ли как надо?
  3. TopicStarter Overlay
    tmr77
    Offline

    tmr77

    Регистрация:
    11 ноя 2008
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    В принципе все работает, очевидных синтаксических ошибок нет, запрос выдает результаты, возможно, есть ошибка ведущая к не корректным реультатам.
  4. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    А по идее это должен быть запрос, выдающий количество записей в регистре сведений (по каждому регистру сведений).

    О, вот какая идея - запрос создавать вне цикла, это из разряда оптимизации
    Код:
    Запрос = Новый Запрос();
    Для Каждого Регистр Из Метаданные.РегистрыСведений Цикл
    Запрос.Текст = "Выбрать Сумма(1) Как Поле
    | ИЗ РегистрСведений." + Регистр.Имя + " КАК Регистр";
    ЧислоЗаписей = Запрос.Выполнить().Выгрузить()[0].Поле;
    Сообщить(Регистр.Имя + ": " + ЧислоЗаписей);
    КонецЦикла;
    
    
  5. TopicStarter Overlay
    tmr77
    Offline

    tmr77

    Регистрация:
    11 ноя 2008
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Ну если только в оптимизации дело и считать это ошибкой.
  6. Kaboom
    Offline

    Kaboom Опытный в 1С

    Регистрация:
    2 июл 2007
    Сообщения:
    158
    Симпатии:
    0
    Баллы:
    26
    А что мешает в цикле создать текст запроса и выполнить его всего один раз.
  7. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Можно влегкую нарваться на ошибку 256 таблиц...
  8. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Возможно, это: зачем скобки после определения переменной?
    Код:
    Запрос = Новый Запрос()
    
    Дважды инициализируется текст запроса.
  9. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    В случае
    Запрос = Новый Запрос; результат будет тот же. Запрос инициализируется с пустым текстом.

    Но вообще кто-то развлекся с заданием.
  10. MetalMessia
    Offline

    MetalMessia

    Регистрация:
    27 дек 2007
    Сообщения:
    25
    Симпатии:
    0
    Баллы:
    1
    Запрос = Новый Запрос();
    Для Каждого Регистр Из Метаданные.РегистрыСведений Цикл
    Запрос.Текст =
    "ВЫБРАТЬ
    | КОЛИЧЕСТВО(*) КАК КоличествоЗаписей
    |ИЗ
    | РегистрСведений."+Регистр.Имя+" КАК Регистр";

    Выборка = Запрос.Выполнить().Выбрать();

    Если Выборка.Следующий() Тогда
    Сообщить(Регистр.Имя + " : " + Выборка.КоличествоЗаписей);
    КонецЕсли;

    КонецЦикла;
  11. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    В данном случае можно использовать и объектную модель, если скорость не сильно важна.

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