Добрый день , коллеги. Столкнулся с такой проблемой в запросе:

Делаю такой запрос

И всё считается правильно вроде:

 _______________НачОстаток________Приход______Расход_____КонО­статок
Товар___________800________________24___________14 _______ 810

Но когда я добавляю регистратор в запросе, Остатки меняются :

Получается что то вроде таких цифр:

__________НачОстаток _______Приход _______Расход_______КонОстаток
Товар______ 24400 ____________ 24 _________ 14 ________ 24410

Никто не сталкивался с такой ситуацией ? может знает кто ?
---
Я не могу понять для чего вы пишите сумму по полям количество остатки и обороты. ИТОГИ по суммам делаются в секции ИТОГИ ... ПО ОБЩИЕ. Это первое. А второе: сумма с регистратором меняется, потому что вы выбираете движения по всем регистраторам которые фиксируют это движение. Т.е. у вас в списке допустим один товар пришел на кол-во 100 шт. по 1-му регистратору, потом ушел этот же товар на кол-во 50 шт. по 2-му регистратору, а потом допустим еще было перемещение со склада на склад в количестве 10 шт. по 3-ему регистратору. Если вы хотите видеть движение по регистратору, то только конкретного регистратора. Для этого в условии ИЗ нужно написать:

```1c
    ИЗ
    РегистрНакопления.ТоварыОрганизаций.ОстаткиИОбороты(&ДатаНач, &ДатаОконч, Запись, Движения, АналитикаУчетаНоменклатуры.Склад = &Склад) КАК ТоварыОрганизацийОстаткиИОбороты
```

Запись - это и есть ваш регистратор.

Выкладываю полный запрос:

```1c
    ВЫБРАТЬ
    ТоварыОрганизацийОстаткиИОбороты.АналитикаУчетаНоменклатуры.Номенклатура КАК АналитикаУчетаНоменклатурыНоменклатура,
    ТоварыОрганизацийОстаткиИОбороты.Регистратор КАК Регистратор,
    ТоварыОрганизацийОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
    ТоварыОрганизацийОстаткиИОбороты.КоличествоПриход КАК КоличествоПриход,
    ТоварыОрганизацийОстаткиИОбороты.КоличествоРасход КАК КоличествоРасход,
    ТоварыОрганизацийОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток
    ИЗ
    РегистрНакопления.ТоварыОрганизаций.ОстаткиИОбороты(&ДатаНач, &ДатаОконч, Запись, Движения, АналитикаУчетаНоменклатуры.Склад = &Склад) КАК ТоварыОрганизацийОстаткиИОбороты

    СГРУППИРОВАТЬ ПО
    ТоварыОрганизацийОстаткиИОбороты.АналитикаУчетаНоменклатуры.Номенклатура,
    ТоварыОрганизацийОстаткиИОбороты.Регистратор,
    ТоварыОрганизацийОстаткиИОбороты.КоличествоНачальныйОстаток,
    ТоварыОрганизацийОстаткиИОбороты.КоличествоПриход,
    ТоварыОрганизацийОстаткиИОбороты.КоличествоРасход,
    ТоварыОрганизацийОстаткиИОбороты.КоличествоКонечныйОстаток

    ИТОГИ

    СУММА(КоличествоНачальныйОстаток),
    СУММА(КоличествоПриход),
    СУММА(КоличествоРасход),
    СУММА(КоличествоКонечныйОстаток)
    ПО
    ОБЩИЕ
```
---
Лучше 2 картинки приведите, ибо непонятно, как после добавления Регистратора у вас не изменилось количнество строк...
И условия ГДЕ так не применяйте - долго выполняется, ОЧЕНЬ...
---
Так а как еще условие добавить ?)
---
в параметрах виртуальной таблицы, см пример (5)
---
аа, учту , спасибо ) но тем не менее , вопрос в результате )
---
Исправьте параметры виртуальной таблицы в соответствии с примером в (5) и будет вам ПОЛНОЕ счатье...
Вы некорретно их выставили
---
Попробуйте пересчет итогов сделать, условие нужно в параметрах виртуальной таблицы ставить, ну это так...
---
Добавьте строчку в запрос "ТоварыНаСкладахОстаткиИОбороты.ПериодСекунда; "
Об этом все методички 1с пишут
---
ТоварыНаСкладахОстаткиИОбороты.ПериодСекунда
А куда его добавить ?
Вы уж как-то пояснее...

```1c
    ВЫБРАТЬ
    СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток) КАК КоличествоНачальныйОстаток,
    СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход) КАК КоличествоПриход,
    СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) КАК КоличествоРасход,
    СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток) КАК КоличествоКонечныйОстаток,
    ТоварыНаСкладахОстаткиИОбороты.АналитикаУчетаНоменклатуры.Номенклатура КАК АналитикаУчетаНоменклатурыНоменклатура,
    ТоварыНаСкладахОстаткиИОбороты.Регистратор КАК Регистратор
    ИЗ
    РегистрНакопления.ТоварыОрганизаций.ОстаткиИОбороты(
    &НачПериода,
    &КонПериода,
    Регистратор,
    ДвиженияИГраницыПериода,
    Организация = &Организация
    И АналитикаУчетаНоменклатуры.СкладскаяТерритория = &Склад) КАК ТоварыНаСкладахОстаткиИОбороты

    СГРУППИРОВАТЬ ПО
    ТоварыНаСкладахОстаткиИОбороты.АналитикаУчетаНоменклатуры.Номенклатура,
    ТоварыНаСкладахОстаткиИОбороты.Регистратор
```
---
в параметрах виртуальной таблицы, периодичность
---
Тогда Регистратора не будет!
---
там только параметры "Движения" и "ДвиженияИГраницыПериода" ... не один ни другой не меняют погоды )
---
В условиях пишете...
Вам нужно срочно основы подтянуть...
Так использовать ГДЕ - грубейшее нарушений в 1С...
это 100% на любом экзамене...
---
Исправил, учту на будущее , спасибо)
Выполняется быстрее , но результат такой же, с регистратором меняются начальные и конечные остатки ...
---
ну вот и повторите эти настройки - будет правильно...
Достаточно поставить "Регистратор"
---
Результат такой же
---
```1c
    &НачПериода,
    &КонПериода,
    Авто,
```

Вот это Измените!

На

```1c
    &НачПериода,
    &КонПериода,
    Регистратор,
```
---
Так все правильно, что начальный и конечный остаток умножается, вы посмотрите в консоле запросов, в каждой строке с регистратором будет начальный и конечный остаток по этому товару и вы его потом суммируете
---
так я вижу что она умножается) мне не понятно почему без регистратора меняются цифры ...
---
потому что без регистратора меньше строк, поэтому и сумма меньше
---
так по факту же это не правильно получается, без регистратора потом не получится провести аналитику
---
смотря что вы хотите увидеть, если остатки на начало периода и на конец + все движения товара, то либо соединять с таблицей остатки, либо использовать не виртуальную таблицу
---
у меня запрос к одной таблице, РегистрНакомпления.ТоварыОрганизации , и смысл соединять его с Этим же регистром когда можно получить все данные отсюда ?
---
получилось обращаясь к одной таблице получить все нужные данные с нужной аналитикой?
---
меня смущает суммирование остатков ..
а всё остальное сходится ,

По сути при добавлении регистратора - эти остатки должны распределиться между регистраторами а не наоборот приумножаться ...
---
что значит "распределиться"?
---
но товара же не 750 на остатках? его на начало периода было 200 а на конец периода 500
---
аа, ну да, 200 и 500 должно быть, но суть такая же)
Вот у меня и суммируется как 750 и 1150 в запросе - что не правильно
---
у меня запрос к одной таблице, РегистрНакомпления.ТоварыОрганизации , и смысл соединять его с Этим же регистром когда можно получить все данные отсюда ?
---
Приведите еще раз свой запрос, посмотрим что в нем не так сейчас...
---
вот
---
Ясно...
Вы чем выполняете запрос?
У вас как итоги считаются?

ИТОГИ ПО
 ОБЩИЕ

Нет Итогов в тексте запроса, то есть ваш инструмент выполнения горбатый (Консоль запросов?)
---
да, консоль запросов
---
сформируйте две таблицы, с регистратором и без, и по конкретной номенклатуре сложите все "начальный" и "конечный" остатки.
---
Почему у меня не перемножаются можете сказать?
---
не могу сказать почему у вас не переумножается, но по логике, группировка по регистратору, суммируемые поля конечный остаток и начальный , в каждой строке итоговой таблицы, будет остаток на начало и конец (до движения регистратора и после)
---
ваша фраза не понятно кому и в связи с чем ...
Ничего там не перемножается...
Хоть с регистратором , хоть без него все красиво!
---
В конце добавьте

ИТОГИ ПО
 ОБЩИЕ

```1c
    СГРУППИРОВАТЬ ПО
    ТоварыНаСкладахОстаткиИОбороты.АналитикаУчетаНоменклатуры.Номенклатура,
    ТоварыНаСкладахОстаткиИОбороты.Регистратор
    ИТОГИ ПО
    ОБЩИЕ
```
---
добавил, не помогло
---
.
---
у вас одно движение по одному товару, попробуйте добавить движение по товару в этом же периоде, что бы в табличке было две строки с одним твоаром.
---
Думаю остатки размножаются по регистратору и суммируются. Следовательно нужно разбить на 2 запроса: остатки без регистратора в ВТ, обороты с регистратором соединить с ВТ. Для остатков не СУММА, а МАКСИМУМ.
---
я так и сделал , но путаница получается потом, если 3 регистратора то и 3 номенклатуры с одинаковыми цифрами
---
ООО У вас тут уже дискуссия
Вместо
| ТоварыНаСкладахОстаткиИОбороты.Регистратор КАК Регистратор,

напиши

| ТоварыНаСкладахОстаткиИОбороты.Регистратор КАК Регистратор,
| ТоварыНаСкладахОстаткиИОбороты.ПериодСекунда КАК ПериодСекунда,

и все
---
написал. Появилась колонка с периодом "секунда", остатки такие же
---
и еще в виртуальной таблице ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Авто, ДвиженияИГраницыПериода, )
обрати внимание на ДвиженияИГраницыПериода
---
а что там не так ?)
---
попробуй Движения
---
ничего не изменилось
---
Хотя, я посмотрел по одной позиции и у меня такая картина получилось ... Что это за Null и если брать без регистратора берутся эти цифры
---
че то не вижу куда делся ПериодСекунда
---
Типичные проблемы при расчете остатков
В данной статье описывается, по какой причине отчет, созданный при помощи системы компоновки данных, может выдавать неправильные остатки.

Отсутствие родительских полей - периодов в запросе
Данная проблема возникает например, если в запросе получают поле Регистратор, но не получают поле ПериодСекунда.

Пример неправильного запроса:

```1c
    ВЫБРАТЬ
    УчетНоменклатурыОстаткиИОбороты.Регистратор,
    УчетНоменклатурыОстаткиИОбороты.Номенклатура,
    УчетНоменклатурыОстаткиИОбороты.Склад,
    УчетНоменклатурыОстаткиИОбороты.КоличествоНачальныйОстаток,
    УчетНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток,
    УчетНоменклатурыОстаткиИОбороты.КоличествоОборот
    ИЗ
    РегистрНакопления.УчетНоменклатуры.ОстаткиИОбороты(, , Авто, , ) КАК УчетНоменклатурыОстаткиИОбороты
    Для такого запроса система рассчитать правильные остатки не может.

    Для устранения проблемы нужно обеспечить, чтобы в запросе присутствовало поле Период.

    Пример правильного запроса:

    ВЫБРАТЬ
    УчетНоменклатурыОстаткиИОбороты.Регистратор,
    УчетНоменклатурыОстаткиИОбороты.ПериодСекунда,
    УчетНоменклатурыОстаткиИОбороты.Номенклатура,
    УчетНоменклатурыОстаткиИОбороты.Склад,
    УчетНоменклатурыОстаткиИОбороты.КоличествоНачальныйОстаток,
    УчетНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток,
    УчетНоменклатурыОстаткиИОбороты.КоличествоОборот
    ИЗ
    РегистрНакопления.УчетНоменклатуры.ОстаткиИОбороты(, , Авто, , ) КАК УчетНоменклатурыОстаткиИОбороты
    Отсутствие в запросе парного поля - остатка
    Данная проблема возникает когда в запросе получают только поле начального остатка или только поле конечного остатка.

    Пример неправильного запроса:

    ВЫБРАТЬ
    УчетНоменклатурыОстаткиИОбороты.Регистратор,
    УчетНоменклатурыОстаткиИОбороты.ПериодСекунда,
    УчетНоменклатурыОстаткиИОбороты.Номенклатура,
    УчетНоменклатурыОстаткиИОбороты.Склад,
    УчетНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток
    ИЗ
    РегистрНакопления.УчетНоменклатуры.ОстаткиИОбороты(, , Авто, , ) КАК УчетНоменклатурыОстаткиИОбороты
    Для устранения проблемы нужно обеспечить, чтобы в запросе присутствовал как начальный, так и конечный остатки.
```

Пример правильного запроса:

```1c
    ВЫБРАТЬ
    УчетНоменклатурыОстаткиИОбороты.Регистратор,
    УчетНоменклатурыОстаткиИОбороты.ПериодСекунда,
    УчетНоменклатурыОстаткиИОбороты.Номенклатура,
    УчетНоменклатурыОстаткиИОбороты.Склад,
    УчетНоменклатурыОстаткиИОбороты.КоличествоНачальныйОстаток,
    УчетНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток
    ИЗ
    РегистрНакопления.УчетНоменклатуры.ОстаткиИОбороты(, , Авто, , ) КАК УчетНоменклатурыОстаткиИОбороты
```
---
Не использование периодичности Авто
Данная проблема возникает, когда данные получаются из виртуальной таблицы ОстаткиИОбороты с указанием периодичности, отличной от Авто, если при этом в отчет выводятся не все поля - периоды. Эта проблема родственна проблеме "Отсутствие родительских полей - периодов в запросе", описанной в начале данной статьи.

Пример запроса, который может привести к получению неправильных остатков:

```1c
    ВЫБРАТЬ
    УчетНоменклатурыОстаткиИОбороты.Регистратор,
    УчетНоменклатурыОстаткиИОбороты.Период,
    УчетНоменклатурыОстаткиИОбороты.Номенклатура,
    УчетНоменклатурыОстаткиИОбороты.Склад,
    УчетНоменклатурыОстаткиИОбороты.КоличествоНачальныйОстаток,
    УчетНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток,
    УчетНоменклатурыОстаткиИОбороты.КоличествоОборот
    ИЗ
    РегистрНакопления.УчетНоменклатуры.ОстаткиИОбороты(, , Регистратор, , ) КАК УчетНоменклатурыОстаткиИОбороты
```

Для решения проблемы лучше в запросах для настраиваемых отчетов системы компоновки данных, в виртуальных таблицах ОстаткиИОбороты, использовать периодичность Авто. Или обеспечить обязательных вывод всех полей - периодов в результат отчета.

Пример запроса:

```1c
    ВЫБРАТЬ
    УчетНоменклатурыОстаткиИОбороты.Регистратор,
    УчетНоменклатурыОстаткиИОбороты.ПериодСекунда,
    УчетНоменклатурыОстаткиИОбороты.Номенклатура,
    УчетНоменклатурыОстаткиИОбороты.Склад,
    УчетНоменклатурыОстаткиИОбороты.КоличествоНачальныйОстаток,
    УчетНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток,
    УчетНоменклатурыОстаткиИОбороты.КоличествоОборот
    ИЗ
    РегистрНакопления.УчетНоменклатуры.ОстаткиИОбороты(, , Авто, , ) КАК УчетНоменклатурыОстаткиИОбороты
```
---
Да простит меня фирма 1С за репост их статьи
---
так я добавил же и период и регистратор и авто, остатки такие же
---
Соберите данные программно. Пример

```1c
    Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    ТЗ=ПолучитьДанные();
    СтандартнаяОбработка=Ложь;
    Если ТЗ=Неопределено Тогда
    Возврат;
    КонецЕсли;
    ВнешниеНаборыДанных=Новый Структура;
    ВнешниеНаборыДанных.Вставить("Затраты",ТЗ);
    КомпоновщикМакета=Новый КомпоновщикМакетаКомпоновкиДанных;
    Настройки=ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки();

    МакетКомпоновки=КомпоновщикМакета.Выполнить(ЭтотОбъект.СхемаКомпоновкиДанных,Настройки,ДанныеРасшифровки);
    ПроцессорКомпоновки=Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,ВнешниеНаборыДанных,ДанныеРасшифровки);
    ДокументРезультат.Очистить();
    ПроцессорВывода=Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);

    ДокументРезультат.ФиксацияСлева=2;
    КонецПроцедуры
```

В ОсновнаяСхемаКомпоновкиДанных необходимо добавить набор данных "Затраты" (так в примере), задать имя объекта, содержащего данные "Затраты". Добавить все поля из ТЗ.
---
Я так и сделал ) но данные в таблице я из запроса же беру , и возвращаюсь к этому
---
В функции в цикле можно собрать в ТЗ все, что нужно. Получили остатки на начало. Записали в ТЗ - номенклатура, остаток на начало. Потом делаете запрос по оборотам по регистраторам. В цикле проходите. Заполняете существующую строку, добавляете новые.
---
Я не могу понять для чего вы пишите сумму по полям количество остатки и обороты. ИТОГИ по суммам делаются в секции ИТОГИ ... ПО ОБЩИЕ. Это первое. А второе: сумма с регистратором меняется, потому что вы выбираете движения по всем регистраторам которые фиксируют это движение. Т.е. у вас в списке допустим один товар пришел на кол-во 100 шт. по 1-му регистратору, потом ушел этот же товар на кол-во 50 шт. по 2-му регистратору, а потом допустим еще было перемещение со склада на склад в количестве 10 шт. по 3-ему регистратору. Если вы хотите видеть движение по регистратору, то только конкретного регистратора. Для этого в условии ИЗ нужно написать:

```1c
    ИЗ
    РегистрНакопления.ТоварыОрганизаций.ОстаткиИОбороты(&ДатаНач, &ДатаОконч, Запись, Движения, АналитикаУчетаНоменклатуры.Склад = &Склад) КАК ТоварыОрганизацийОстаткиИОбороты
```

Запись - это и есть ваш регистратор.

Выкладываю полный запрос:

```1c
    ВЫБРАТЬ
    ТоварыОрганизацийОстаткиИОбороты.АналитикаУчетаНоменклатуры.Номенклатура КАК АналитикаУчетаНоменклатурыНоменклатура,
    ТоварыОрганизацийОстаткиИОбороты.Регистратор КАК Регистратор,
    ТоварыОрганизацийОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
    ТоварыОрганизацийОстаткиИОбороты.КоличествоПриход КАК КоличествоПриход,
    ТоварыОрганизацийОстаткиИОбороты.КоличествоРасход КАК КоличествоРасход,
    ТоварыОрганизацийОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток
    ИЗ
    РегистрНакопления.ТоварыОрганизаций.ОстаткиИОбороты(&ДатаНач, &ДатаОконч, Запись, Движения, АналитикаУчетаНоменклатуры.Склад = &Склад) КАК ТоварыОрганизацийОстаткиИОбороты

    СГРУППИРОВАТЬ ПО
    ТоварыОрганизацийОстаткиИОбороты.АналитикаУчетаНоменклатуры.Номенклатура,
    ТоварыОрганизацийОстаткиИОбороты.Регистратор,
    ТоварыОрганизацийОстаткиИОбороты.КоличествоНачальныйОстаток,
    ТоварыОрганизацийОстаткиИОбороты.КоличествоПриход,
    ТоварыОрганизацийОстаткиИОбороты.КоличествоРасход,
    ТоварыОрганизацийОстаткиИОбороты.КоличествоКонечныйОстаток

    ИТОГИ

    СУММА(КоличествоНачальныйОстаток),
    СУММА(КоличествоПриход),
    СУММА(КоличествоРасход),
    СУММА(КоличествоКонечныйОстаток)
    ПО
    ОБЩИЕ
```