Имя: Пароль:
1C
1С v8
Помощь с запросом
0 VadimBahteev
 
01.02.13
08:39
обрый день! Существует такая проблема. Конфигурация: 1С:Бухгалтерия сельскохозяйственного предприятия Редакция 1.6 (1.6.24.7). Создан внешний отчет, в котором отображаются продажи за период. Нужно добавить отдельно колонку с остатками на складе. Исходный запроc:

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   втПродажи.Контрагент,
   втПродажи.Номенклатура,
   втПродажи.Количество,
   втПродажи.СтоимостьПродаж,
   втПродажи.СебестоимостьОборот КАК Себестоимость
ИЗ
   втПродажи КАК втПродажи
ГДЕ
   втПродажи.Склад = &Склад

Как не пытался добавлять регистр Бухгалтерии.Остатки, не получается, вернее все получилось только вот он проставляет Остатки каждому контрагенту, а это не верно. И потом когда отчет формируется в СКД он Сумму по ресурсу КонечныйОстаток. не вычислит. Может кто разберется в чем дело!. Вот мой запрос:
ВЫБРАТЬ
   ОборотыПродаж.Контрагент,
   ВЫБОР
       КОГДА ОборотыПродаж.ДокументПродажи ССЫЛКА Документ.РеализацияТоваровУслуг
           ТОГДА ОборотыПродаж.ДокументПродажи.Склад
       ИНАЧЕ NULL
   КОНЕЦ КАК Склад,
   ОборотыПродаж.Номенклатура,
   ОборотыПродаж.КоличествоОборот КАК Количество,
   ОборотыПродаж.СтоимостьОборот КАК СтоимостьПродаж,
   ОборотыПродаж.СебестоимостьОборот,
   ХозрасчетныйОстатки.КоличествоОстаток
ИЗ
   РегистрНакопления.схПродажи.Обороты(
           ,
           ,
           ,
           ДокументПродажи ССЫЛКА Документ.РеализацияТоваровУслуг
               И Организация = &Организация) КАК ОборотыПродаж
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки КАК ХозрасчетныйОстатки
       ПО ОборотыПродаж.Номенклатура.Наименование = ХозрасчетныйОстатки.Субконто1.Наименование
ГДЕ
   ОборотыПродаж.Организация = &Организация
   И ОборотыПродаж.ДокументПродажи.Склад = &Склад
   И ХозрасчетныйОстатки.Субконто3 = &Склад
1 cw014
 
01.02.13
08:40
(0) А накуя поместить?
2 cw014
 
01.02.13
08:41
(0) И обязательно остатки по регистру бухгалтерии смотреть? Регистра накопления нету что ли?
3 Галахад
 
гуру
01.02.13
08:41
ВНУТРЕННЕЕ СОЕДИНЕНИЕ

ЛЕВОЕ СОЕДИНЕНИЕ
4 Catseye
 
01.02.13
09:09
1.Для начала надо бы определиться со счетом(счетами), по которому(-ым) ты собираешься остатки брать
2.В соединении указать не только номенклатуру, но и склад
3.Убрал бы сравнение по наименованию -вдруг у тебя две и больше номенклатуры имеют одинаковое наименование, но разные артикулы, цены, остатки, ни разу не были проданы - и что тогда за цифры у тебя отчет покажет? Сравниваем только ссылки
3.Также заранее убедится, что порядок субконто "Номенклатура" и "Склады" имеют именно такой как ты указал: Субконто1 и Субконто2. Я бы подстраховался и задал в запросе порядок, на случай если например на одном из счетов где хранится номенклатура "Склад" является "Субконто2", а на другом "Субконто3". Сделал бы так в параметрах к запросу :
   ПорядокСубконто = Новый Массив();
   ПорядокСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура);
   ПорядокСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады);
   Запрос.УстановитьПараметр("ПорядокСубконто", ПорядокСубконто);
В этом случае субконто "номенклатура" будет равна "Субконто1", а "Склады" равна "Субконто2"


|ВНУТРЕННЕЕ СОЕДИНЕНИЕ |РегистрБухгалтерии.Хозрасчетный.Остатки(
|            &ДатаКон,
|            Счет В ИЕРАРХИИ (&СчетаДт),
|            &ПорядокСубконто,
|                Субконто2 = (&Склад)) КАК Хозрасчетный.Остатки
|       ПО ОборотыПродаж.Номенклатура = ХозрасчетныйОстатки.Субконто1
|       И ОборотыПродаж.Склад= ХозрасчетныйОстатки.Субконто2
5 Catseye
 
01.02.13
09:18
4. Убери нафиг конструкцию
   ВЫБОР
       КОГДА ОборотыПродаж.ДокументПродажи ССЫЛКА Документ.РеализацияТоваровУслуг
           ТОГДА ОборотыПродаж.ДокументПродажи.Склад
       ИНАЧЕ NULL
   КОНЕЦ КАК Склад,
Если тебе нужно чтобы в отчете были обороты только по той номенклатуре, что была отгружена документами "РеализацияТоваровУслуг", то ты это уже сделал в параметрах к таблице регистра, где указал: "ДокументПродажи ССЫЛКА Документ.РеализацияТоваровУслуг"

Походу запрос к регистру продаж должен быть таким:

|ВЫБРАТЬ
|    ОборотыПродаж.Контрагент,
|    ОборотыПродаж.Склад КАК Склад,
|    ОборотыПродаж.Номенклатура,
|   ОборотыПродаж.КоличествоОборот КАК Количество,
|    ОборотыПродаж.СтоимостьОборот КАК СтоимостьПродаж,
|    ОборотыПродаж.СебестоимостьОборот
|ПОМЕСТИТЬ втПродажи
|ИЗ
|    РегистрНакопления.схПродажи.Обороты(&ДатаНач ,&ДатаКон,   , ,
|
|          ДокументПродажи ССЫЛКА Документ.РеализацияТоваровУслуг
|               И Склад = &Склад
|                И Организация = &Организация) КАК ОборотыПродаж
|;
6 VadimBahteev
 
01.02.13
09:23
Дак в том то и дело что с регистром продаж проблем то нет, как к нему остатки прилепить, что бы они в отчете показывались по номенклатуре, а не в разрезе контрагентов, СКД когда отчет строит он суммирует их по каждой строчке и получаются не верная сумма.
7 VadimBahteev
 
01.02.13
09:25
Регистра накопления нет в том то и проблема(1)
8 Catseye
 
01.02.13
09:29
в (4) я же вроде показал как прицепить
9 pessok
 
01.02.13
09:32
(8) почему внутренним то? левым, наверное?
10 VadimBahteev
 
01.02.13
09:34
блин запутался я уже, напиши полностью запрос если не сложно
11 zippygrill
 
01.02.13
09:40
(5) внимательно смотрим что находится в реквизите ОборотыПродаж.ДокументПродажи, если хотите отфильтровать по типу документа то для этого существует РЕГИСТРАТОР! ДокументПродажи это совсем другое!
12 Catseye
 
01.02.13
09:56
(9)Та да, но условия задачи четко ТС не описал
(11) зачем регистратор? Он нужен если только в условии к отчету нужна детализация до движений по документу. А если данные нужны за период - то нафига?
(10) Класс:)) мне бы так работать - кинул тему и Миста пашет:))
//ЛЕВОЕ или ВНУТРЕННЕ СОЕДИНЕНИЕ выбери сам, от условий задачи

   ПорядокСубконто = Новый Массив();
   ПорядокСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура);
   ПорядокСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады);
   Запрос.УстановитьПараметр("ПорядокСубконто", ПорядокСубконто);
   Запрос.УстановитьПараметр("ДатаНач", ДатаНач);
   Запрос.УстановитьПараметр("ДатаКон", ДатаКон);
   СчетаДт = новый СписокЗначений;
   СчетаДт.Добавить(ПланыСЧетов.Хозрасчетный.ТоварыНаСкладах); //  если, речь о товарах для продажи с 41 счета
   Запрос.УстановитьПараметр("СчетаДт", СчетаДт);



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

|ВЫБРАТЬ
|    втПродажи.Контрагент,
|    втПродажи.Номенклатура,
|    втПродажи.Количество,
|    втПродажи.СтоимостьПродаж,
|    втПродажи.СебестоимостьОборот КАК Себестоимость
|ИЗ
|    втПродажи КАК втПродажи


Как то так - не проверял, т.к у меня нет твоей структуры метаданных
13 zippygrill
 
01.02.13
10:00
(12) ставь у ВТ периодичность Авто, но еще раз говорю ДокументПродажи это не РЕГИСТРАТОР!
14 VadimBahteev
 
01.02.13
10:14
Вообщем спасибо всем огромное за помощь, но решения как не было так и нет. Или я не понимаю, вот мой запрос:

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

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

УПОРЯДОЧИТЬ ПО
   Номенклатура
АВТОУПОРЯДОЧИВАНИЕ

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