Имя: Пароль:
1C
1С v8
Подсчитать сумму документа
,
0 bomster
 
05.07.12
10:18
Есть документ, в него вводится несколько позиций номенклатуры без цен. Нужно подсчитать сумму всей введенной номенклатуры. Цены каждой номенклатуры можно взять в регистре где отображается вся номенклатура и ее цена взятая из документов поступления, но одна номенклатура присутствует в нескольких документах поступление, мне нужно использовать только первый документ где присутствует эта номенклатура. Как это можно сделать?
1 ssh2006
 
05.07.12
10:23
СрезПервых
2 bomster
 
05.07.12
10:27
Регистр накопления оборотный
3 Wobland
 
05.07.12
10:29
(2) это ты про цену?
4 LAAry
 
05.07.12
10:30
по минимуму даты регистратора.
5 bomster
 
05.07.12
10:36
Да цена в регистре накопления находится, туда вся номенклатура записывается из документов поступление. Пробовал писать в запросе минимум(ЗакупкиОбороты.Период), все равно берет цену из всех документов где встречается номенклатура.
6 ParinovS
 
05.07.12
10:38
Как вариант ВЫБРАТЬ ПЕРВЫЕ 1
А упорядочить по дате :)
7 bomster
 
05.07.12
10:46
Тоже так пытался делать,не получалось, но не знаю как сделать чтоб из документа в котором надо сумму посчитать брались все строчки,т.е. каждая номенклатура, а из регистра, если в нем найдена данная номенклатура и она несколько раз встречается то брать цену только из первой строчки.
8 LAAry
 
05.07.12
10:46
Текст запроса
9 bomster
 
05.07.12
11:02
"ВЫБРАТЬ
     |    ВложенныйЗапрос.СтоимостьОборот КАК Стоимость,
     |    ВложенныйЗапрос.НДСОборот КАК НДС,
     |    ВложенныйЗапрос.КоличествоОборот КАК Количество1,
     |    ВложенныйЗапрос.Количество
     |ИЗ
     |    (ВЫБРАТЬ
     |        ЗакупкиОбороты.Номенклатура КАК Номенклатура1,
     |        ЗакупкиОбороты.СтоимостьОборот КАК СтоимостьОборот,
     |        ЗакупкиОбороты.НДСОборот КАК НДСОборот,
     |        ЗакупкиОбороты.КоличествоОборот КАК КоличествоОборот,
     |        ТребованиеНакладнаяМатериалы.Номенклатура КАК Номенклатура,
     |        ТребованиеНакладнаяМатериалы.Количество КАК Количество,
     |        ЗакупкиОбороты.Период КАК Период
     |    ИЗ
     |        РегистрНакопления.Закупки.Обороты(, , Регистратор, ) КАК ЗакупкиОбороты
     |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ТребованиеНакладная.Материалы КАК ТребованиеНакладнаяМатериалы
     |            ПО ЗакупкиОбороты.Номенклатура = ТребованиеНакладнаяМатериалы.Номенклатура
     |    ГДЕ
     |        (ЗакупкиОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
     |                ИЛИ ЗакупкиОбороты.Регистратор ССЫЛКА Документ.АвансовыйОтчет)
     |        И ТребованиеНакладнаяМатериалы.Ссылка = &ТекущийДокумент
     |    
     |    СГРУППИРОВАТЬ ПО
     |        ЗакупкиОбороты.Номенклатура,
     |        ЗакупкиОбороты.СтоимостьОборот,
     |        ЗакупкиОбороты.НДСОборот,
     |        ЗакупкиОбороты.КоличествоОборот,
     |        ТребованиеНакладнаяМатериалы.Номенклатура,
     |        ТребованиеНакладнаяМатериалы.Количество,
     |        ЗакупкиОбороты.Период
     |    
     |    ИМЕЮЩИЕ
     |        ЗакупкиОбороты.Период = МИНИМУМ(ЗакупкиОбороты.Период)) КАК ВложенныйЗапрос"

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

Пока Рез.Следующий() цикл
    СуммаДокумента = СуммаДокумента+Рез.количество*Рез.Стоимость/Рез.Количество1;
    СуммаНДС = СуммаНДС+Рез.НДС/Рез.Количество1*Рез.Количество;

 конеццикла;
Вот так последняя версия, я и сам понимаю что это неправильно и что он по такому запросу и выберет все документы но как переделать я хз, уже как только не пробовал.Я правда в запросах еще пока не совсем силен может чего то не знаю в составлении запросов что решит проблему
10 bomster
 
05.07.12
11:12
Вот так пробовал

 "ВЫБРАТЬ
     |    ВложенныйЗапрос.Номенклатура,
     |    ВложенныйЗапрос.КоличествоОборот КАК Количество1,
     |    ВложенныйЗапрос.СтоимостьОборот КАК Стоимость,
     |    ВложенныйЗапрос.НДСОборот КАК НДС,
     |    ВложенныйЗапрос1.Номенклатура КАК Номенклатура1,
     |    ВложенныйЗапрос1.Количество
     |ИЗ
     |    (ВЫБРАТЬ ПЕРВЫЕ 1
     |        ЗакупкиОбороты.Номенклатура КАК Номенклатура,
     |        ЗакупкиОбороты.КоличествоОборот КАК КоличествоОборот,
     |        ЗакупкиОбороты.СтоимостьОборот КАК СтоимостьОборот,
     |        ЗакупкиОбороты.НДСОборот КАК НДСОборот,
     |        ТребованиеНакладнаяМатериалы.Номенклатура КАК Номенклатура1
     |    ИЗ
     |        Документ.ТребованиеНакладная.Материалы КАК ТребованиеНакладнаяМатериалы
     |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Закупки.Обороты(, , Регистратор, ) КАК ЗакупкиОбороты
     |            ПО ТребованиеНакладнаяМатериалы.Номенклатура = ЗакупкиОбороты.Номенклатура
     |    ГДЕ
     |        (ЗакупкиОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
     |                ИЛИ ЗакупкиОбороты.Регистратор ССЫЛКА Документ.АвансовыйОтчет)
     |        И ТребованиеНакладнаяМатериалы.Ссылка = &ТекущийДокумент) КАК ВложенныйЗапрос
     |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
     |            ТребованиеНакладнаяМатериалы.Номенклатура КАК Номенклатура,
     |            ТребованиеНакладнаяМатериалы.Количество КАК Количество
     |        ИЗ
     |            Документ.ТребованиеНакладная.Материалы КАК ТребованиеНакладнаяМатериалы
     |        ГДЕ
     |            ТребованиеНакладнаяМатериалы.Ссылка = &ТекущийДокумент) КАК ВложенныйЗапрос1
     |        ПО ВложенныйЗапрос.Номенклатура = ВложенныйЗапрос1.Номенклатура";
11 bomster
 
05.07.12
11:12
так берет только первую номенклатуру из документа и первую строчку из регистра
12 LAAry
 
05.07.12
11:24
Отталкивайся от этого.соединять придется 2 раза: для поиска периода и для выбора данных по этому периоду. В таком виде использовать нельзя, лучше выбрать во временные данные регистра.

ВЫБРАТЬ
     |    ВложенныйЗапрос.Номенклатура,
     |    ВложенныйЗапрос.Количество,
     |    ЗакупкиОбороты.СтоимостьОборот КАК Стоимость,
     |    ЗакупкиОбороты.НДСОборот КАК НДС,
     |    ЗакупкиОбороты.КоличествоОборот КАК Количество1,
     |ИЗ
     |    (ВЫБРАТЬ
     |      
     |        ТребованиеНакладнаяМатериалы.Номенклатура КАК Номенклатура,
     |        ТребованиеНакладнаяМатериалы.Количество КАК Количество,
     |        Минимум(ЗакупкиОбороты.Период) КАК Период
     |    ИЗ
     |        РегистрНакопления.Закупки.Обороты(, , Регистратор, Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг ИЛИ Регистратор ССЫЛКА Документ.АвансовыйОтчет) КАК ЗакупкиОбороты
     |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ТребованиеНакладная.Материалы КАК ТребованиеНакладнаяМатериалы
     |            ПО ЗакупкиОбороты.Номенклатура = ТребованиеНакладнаяМатериалы.Номенклатура
     |    ГДЕ
     |        ТребованиеНакладнаяМатериалы.Ссылка = &ТекущийДокумент
     |    
     |    СГРУППИРОВАТЬ ПО
     |       ТребованиеНакладнаяМатериалы.Номенклатура,
     |        ТребованиеНакладнаяМатериалы.Количество) КАК ВложенныйЗапрос
     |       Левое Соединение РегистрНакопления.Закупки.Обороты(, , Регистратор, Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг ИЛИ Регистратор ССЫЛКА Документ.АвансовыйОтчет) КАК ЗакупкиОбороты
     |        По ВложенныйЗапрос.Номенклатура = ЗакупкиОбороты.Номенклатура и ВложенныйЗапрос.Период = ЗакупкиОбороты.Период
13 bomster
 
05.07.12
11:30
спасибо большое, сейчас буду пробовать!
14 bomster
 
05.07.12
11:46
все правильно считает! LAAry, спасибо огромнейшее!