8.х неправильные и отрицательные остатки через запрос УТ 10.3

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

  1. TopicStarter Overlay
    xgladosx
    Offline

    xgladosx

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

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.988
    Симпатии:
    398
    Баллы:
    104
    Запрос в цикле, жесть. Остатки берутся на дату. Ваш код и кодом то назвать нельзя. Учите язык запросов.
  3. TopicStarter Overlay
    xgladosx
    Offline

    xgladosx

    Регистрация:
    25 мар 2015
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Да плевать на цикл, даже без него обращение к одной номенклатуре через запрос выдает вместо пустого значения 3 и -3 на текущую дату.
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.573
    Симпатии:
    717
    Баллы:
    204
    тут не столько язык запросов как таковой нужно учить, сколько особенности получения данных из регистров необходимо понимать.
    Имхо, прямая дорога на курсы/чтение литературы разного рода по программированию 1С.
    --- Объединение сообщений, 10 мар 2016 ---
    Что просите от 1С, то она вам и выдает. Почитайте хотя бы основы программирования/конфигурирования 1С, ибо судя по написанному, у вас вообще нет представления о устройстве объектов метаданных 1С.
  5. TopicStarter Overlay
    xgladosx
    Offline

    xgladosx

    Регистрация:
    25 мар 2015
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Ага, спасибо, чувак, ты мне очень помог. Я тут как раз сижу и изучаю, ковыряюсь на практике, а вместо ответа получаю ответ - ты ничто, иди на курсы. Спасибо, да
  6. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.988
    Симпатии:
    398
    Баллы:
    104
    Послушайте, только ныть здесь не нужно, типа мы не помогаем и прочее. Мы Вам ничем не обязаны. Мы можем направить, указать на недочеты. Но наглость, лично я не переношу надух. Вы даже вопрос то по сути и не задали. Абстрактно написали свою проблему. Огрызаться дома будете. И вежливость прежде всего. К тебе на "ты" никто не обращался пока.
  7. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.573
    Симпатии:
    717
    Баллы:
    204
    Для того, чтобы разбираться, нужно, наверное, книгу какую-то взять, в которой есть примеры с объяснением того, что написано в этом примере?
    Судя по написанному, вы решили квадратурно-гнездовым методом разбираться......

    Для того, чтобы общаться "на одном языке", вы должны знать/понимать, что такое регистр вообще, какие виды регистров бывают, чем они отличаются, в чем их особенности.

    Если вы будете это знать и понимать, то вам самому станет понятно, что результат составленного вами запроса не является ошибкой вообще.
    Последнее редактирование: 10 мар 2016
  8. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.440
    Симпатии:
    374
    Баллы:
    104
    НИКОГДА не делайте запрос внутри цикла, это грубейшая ошибка и тормоза работы ИБ

    а остатки можно и без запроса получать
    Код:
    РегистрНакопленияМенеджер.<Имя регистра накопления> (AccumulationRegisterManager.<Имя регистра накопления>)
    Остатки (Balance)
    Синтаксис:
    
    Остатки(<МоментВремени>, <Отбор>, <Измерения>, <Ресурсы>)
    Параметры:
    
    <МоментВремени> (необязательный)
    
    Тип: Дата; МоментВремени; Граница.
    Момент времени, на который необходимо получить остатки. Если параметр не указан, то будут получены текущие остатки (на максимальную дату движений регистра). Если в качестве параметра передана Дата, то остатки будут получены на начало дня, если МоментВремени - то в остатках не будут учтены движения регистра, произошедшие в тот же момент времени.
    <Отбор> (необязательный)
    
    Тип: Структура.
    Структура, содержащая набор значений для измерений регистра. Имя ключа структуры должно совпадать с именем измерения регистра, заданного в конфигураторе, а значение элемента структуры - задает отбираемое по данному измерению значение.
    Если параметр не указан, то отбор не используется.
    <Измерения> (необязательный)
    
    Тип: Строка.
    Список измерений, для которых надо получить остатки. Строка, содержащая имена измерений, разделенные запятыми.
    Если параметр не указан или указана пустая строка, то остатки будут сформированы по всем измерениям.
    <Ресурсы> (необязательный)
    
    Тип: Строка.
    Список ресурсов, для которых надо получить остатки. Строка, содержащая имена ресурсов, разделенные запятыми.
    Если параметр не указан или указана пустая строка, то остатки будут сформированы по всем ресурсам.
    Значение по умолчанию: Пустая строка.
    Возвращаемое значение:
    
    Тип: ТаблицаЗначений.
    Сформированная таблица значений.
    Описание:
    
    Получает остатки регистра накопления на заданный момент времени. Есть возможность фильтрации по значениям измерений, а также получения остатков в разрезе других измерений. Возвращает таблицу значений, содержащую колонки с измерениями, указанными в параметре Измерения, и колонки с ресурсами, указанными в параметре <Ресурсы>.
    
    Доступность:
    
    Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
    Примечание:
    
    Имеет смысл только для регистров, у которых в Конфигураторе указан вид регистра "Остатки".
    Пример:
    
    Остатки  = РегистрыНакопления.Остатки;
    Фильтр   = Новый Структура;
    Фильтр.Вставить("Номенклатура",ВыбНоменклатура);
    Фильтр.Вставить("Склад", ВыбСклад);
    ТабОстатков = Остатки.Остатки(ВыбДата,Фильтр,
                   "Номенклатура,Склад", "Количество");
    
    --------------------------------------------------------------------------------
    
  9. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.988
    Симпатии:
    398
    Баллы:
    104
    Ну на уровне СУБД все равно будет запрос к базе данных. Так что без разницы... :)

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