1С БП 8.3/3.0.168
Политика бухучета фирмы не учитывает количество проданного товара, поэтому в стандартном отчёте Анализ Продаж (Валовая прибыль) данные о количестве не отражаются. Необходимо получить себестомость единицы товара. Есть дополнительная обработка Выгрузка_Реестров.epf, которая выгружает Реестр для отчета продаж в формат Excel с колонакми:

КодВидаОперации, Номер документа отгрузки/начисления, Дата документа отгрузки/начисления, СуммаНДС, СуммаВсего, СтавкаНДС, Количество, КодПодразделения ,НоменклатурнаяГруппа, НаименованиеНоменклатуры, НоменклатурныйНомер и т.д

есть даже НомерСтроки, отражающий GUID (но через запрос мне его вытащить не удалось).
Так как есть Количество, чтобы потом поделить, создал:

```1c
    ИтогТаблица.Колонки.Добавить("СебестоимостьОбщая");
```

В конструкторе запроса собрал такой запрос по счетам с заданными параметрами:

```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ХозрасчетныйДвиженияССубконто.СчетДт КАК СчетДт,
    | ХозрасчетныйДвиженияССубконто.СчетКт КАК СчетКт,
    | ХозрасчетныйДвиженияССубконто.Сумма КАК СуммаОборот,
    | ХозрасчетныйДвиженияССубконто.Регистратор КАК Регистратор,
    |ИЗ
    | РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
    | &Дата1,
    | &Дата2,
    | СчетДт В (&СписокСчетовДТ)
    | И СчетКт В (&СписокСчетовКТ),
    | ,
    | ) КАК ХозрасчетныйДвиженияССубконто
    |ГДЕ
    | ТИПЗНАЧЕНИЯ(ХозрасчетныйДвиженияССубконто.Регистратор) <> ТИП(Документ.КорректировкаДолга) И
    | ТИПЗНАЧЕНИЯ(ХозрасчетныйДвиженияССубконто.Регистратор) <> ТИП(Документ.КорректировкаРеализации)";

    Запрос.УстановитьПараметр("Дата1",Дата1);
    Запрос.УстановитьПараметр("Дата2",Дата2);
    Запрос.УстановитьПараметр("СписокСчетовДТ",ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.02"));
    Запрос.УстановитьПараметр("СписокСчетовКТ",ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.03.2"));
```

Запрос отладил. Далее не получилось не то, чтобы ключ собрать, но даже соответствие по сумме сделать:

```1c
    Соответствие = Новый Соответствие;
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
    Соответствие[Выборка.СуммаОборот] = Выборка.Регистратор;
    КонецЦикла;

    Для Каждого НовСтр Из ИтогТаблица Цикл
    СуммаСебестоимости = Соответствие[НовСтр.СуммаВсего];
    Если СуммаСебестоимости <> Неопределено Тогда
    НовСтр.СебестоимостьОбщая = СуммаСебестоимости;
    // Иначе
    // НовСтр.СебестоимостьОбщая =0
    КонецЕсли;
    КонецЦикла;
```

По столбцу "СебестоимостьОбщая" выходят пустографки. Простите, у меня проблемы с логикой. Помогите разнести строки.
---
Извиняюсь за предыдущий флуд. DeepSeek выдал верное решение:

```1c
    ИтогТаблица.Колонки.Добавить("СебестоимостьОбщая");
    //...
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ХозрасчетныйДвиженияССубконто.СчетДт КАК СчетДт,
    | ХозрасчетныйДвиженияССубконто.СчетКт КАК СчетКт,
    | ХозрасчетныйДвиженияССубконто.Сумма КАК СуммаОборот,
    | ХозрасчетныйДвиженияССубконто.Регистратор КАК Регистратор,
    |ИЗ
    | РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
    | &Дата1,
    | &Дата2,
    | СчетДт В (&СписокСчетовДТ)
    | И СчетКт В (&СписокСчетовКТ),
    | ,
    | ) КАК ХозрасчетныйДвиженияССубконто
    |ГДЕ
    | ТИПЗНАЧЕНИЯ(ХозрасчетныйДвиженияССубконто.Регистратор) <> ТИП(Документ.КорректировкаДолга) И
    | ТИПЗНАЧЕНИЯ(ХозрасчетныйДвиженияССубконто.Регистратор) <> ТИП(Документ.КорректировкаРеализации)";

    Запрос.УстановитьПараметр("Дата1",Дата1);
    Запрос.УстановитьПараметр("Дата2",Дата2);
    Запрос.УстановитьПараметр("СписокСчетовДТ",ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.02"));
    Запрос.УстановитьПараметр("СписокСчетовКТ",ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.03.2"));

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

    Пока Выборка.Следующий() Цикл
    СебестоимостьОбщая = СуммаОборот;
    НовСтр = ИтогТаблица.Найти(Регистратор);
    Если НовСтр = Неопределено Тогда
    НовСтр = ИтогТаблица.Добавить();
    НовСтр.Регистратор = Регистратор;
    КонецЕсли;

    НовСтр.СебестоимостьОбщая = СебестоимостьОбщая;
    Если НовСтр.Количество > 0 Тогда
    НовСтр.СебестоимостьОбщая = СебестоимостьОбщая;
    Иначе
    НовСтр.СебестоимостьОбщая = 0;
    КонецЕсли;

    КонецЦикла;
```
---
```1c
    Себестоимость = СуммаОборот/КоличествоОборот;
```
 А у вас бред какой-то.
---
Спасибо за комментарий.
Констуктор запроса не находит КоличествоОборот, это может быть КоличествоКт?
То, что бред - согласен.

И ещё вопрос: Как проверить, есть ли связь по GUID Регистратор и НомерСтроки?
---
Да. Зачем они тут. С/с в разных строках одного документа с одинаковой номенклатурой не может отличаться. И в разных документах одного месяца тоже лучше усреднить.
---
Спасибо.
---
Мне нужна общая сумма себестоимости, а не за единицу товара. Я правильно понимаю, что здесь можно обойтись без соответствия и циклом через запрос по конкретному документу и конкретной номенклатуре запрашивать себестоимость?

```1c
    Для Каждого НовСтр Из ИтогТаблица Цикл
    СуммаСебестоимости = Выборка.СуммаОборот;
    Если СуммаСебестоимости <> Неопределено Тогда
    НовСтр.СебестоимостьОбщая = СуммаСебестоимости;
    Иначе
    НовСтр.СебестоимостьОбщая =0
    КонецЕсли;
    КонецЦикла;
```

Почему не работает, как вынести в столбец хоть что-то?
---
Итак, за сегодня я добился отображения значения по столбцу:

```1c
    ИтогТаблица.Колонки.Добавить("СебестоимостьОбщая");
    //...
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ХозрасчетныйДвиженияССубконто.СчетДт КАК СчетДт,
    | ХозрасчетныйДвиженияССубконто.СчетКт КАК СчетКт,
    | ХозрасчетныйДвиженияССубконто.Сумма КАК СуммаОборот,
    | ХозрасчетныйДвиженияССубконто.Регистратор КАК Регистратор,
    |ИЗ
    | РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
    | &Дата1,
    | &Дата2,
    | СчетДт В (&СписокСчетовДТ)
    | И СчетКт В (&СписокСчетовКТ),
    | ,
    | ) КАК ХозрасчетныйДвиженияССубконто
    |ГДЕ
    | ТИПЗНАЧЕНИЯ(ХозрасчетныйДвиженияССубконто.Регистратор) <> ТИП(Документ.КорректировкаДолга) И
    | ТИПЗНАЧЕНИЯ(ХозрасчетныйДвиженияССубконто.Регистратор) <> ТИП(Документ.КорректировкаРеализации)";

    Запрос.УстановитьПараметр("Дата1",Дата1);
    Запрос.УстановитьПараметр("Дата2",Дата2);
    Запрос.УстановитьПараметр("СписокСчетовДТ",ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.02"));
    Запрос.УстановитьПараметр("СписокСчетовКТ",ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.03.2"));

    Пока Выборка.Следующий() Цикл
    Для каждого НовСтр Из ИтогТаблица Цикл
    НовСтр.СебестоимостьОбщая = Окр(Выборка.Выборка.СуммаОборот, 2);
    КонецЦикла;
    КонецЦикла
```

Но оно не верно и вообще это одинаковая цифра.
---
Мы верим в тебя!
---
Извиняюсь за предыдущий флуд. DeepSeek выдал верное решение:

```1c
    ИтогТаблица.Колонки.Добавить("СебестоимостьОбщая");
    //...
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ХозрасчетныйДвиженияССубконто.СчетДт КАК СчетДт,
    | ХозрасчетныйДвиженияССубконто.СчетКт КАК СчетКт,
    | ХозрасчетныйДвиженияССубконто.Сумма КАК СуммаОборот,
    | ХозрасчетныйДвиженияССубконто.Регистратор КАК Регистратор,
    |ИЗ
    | РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
    | &Дата1,
    | &Дата2,
    | СчетДт В (&СписокСчетовДТ)
    | И СчетКт В (&СписокСчетовКТ),
    | ,
    | ) КАК ХозрасчетныйДвиженияССубконто
    |ГДЕ
    | ТИПЗНАЧЕНИЯ(ХозрасчетныйДвиженияССубконто.Регистратор) <> ТИП(Документ.КорректировкаДолга) И
    | ТИПЗНАЧЕНИЯ(ХозрасчетныйДвиженияССубконто.Регистратор) <> ТИП(Документ.КорректировкаРеализации)";

    Запрос.УстановитьПараметр("Дата1",Дата1);
    Запрос.УстановитьПараметр("Дата2",Дата2);
    Запрос.УстановитьПараметр("СписокСчетовДТ",ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.02"));
    Запрос.УстановитьПараметр("СписокСчетовКТ",ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.03.2"));

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

    Пока Выборка.Следующий() Цикл
    СебестоимостьОбщая = СуммаОборот;
    НовСтр = ИтогТаблица.Найти(Регистратор);
    Если НовСтр = Неопределено Тогда
    НовСтр = ИтогТаблица.Добавить();
    НовСтр.Регистратор = Регистратор;
    КонецЕсли;

    НовСтр.СебестоимостьОбщая = СебестоимостьОбщая;
    Если НовСтр.Количество > 0 Тогда
    НовСтр.СебестоимостьОбщая = СебестоимостьОбщая;
    Иначе
    НовСтр.СебестоимостьОбщая = 0;
    КонецЕсли;

    КонецЦикла;
```