Имя: Пароль:
1C
1C 7.7
v7: Как получить сумму сумм всех документов из выборки?
,
0 MathaiShung
 
08.03.16
18:48
В форме документа ПриходноКасовыйОрдер нужно чтобы поле сумма заполнялось автоматически на основании сумм Расходных Накладных.

    Процедура ПриВыбореКлиента()
        Док=СоздатьОбъект("Документ.РасходнаяНакладная");
    ДокСумма=Док.ПолучитьАтрибут("Сумма");
    ДатаНач=РабочаяДата();
    Запрос=СоздатьОбъект("Запрос");
    ТекстЗапроса=
    "
    |С ДатаНач;
    |Обрабатывать НеПомеченныеНаУдаление;
    |Без итогов;
    |Док = Документ.РасходнаяНакладная.ТекущийДокумент;
    |Контрагент = Документ.РасходнаяНакладная.Клиент;
    |Группировка Док упорядочить по Док.Клиент без групп все ВошедшиеВЗапрос;
    |Условие (Контрагент = Клиент);
    |"
    Запрос.Выполнить(ТекстЗапроса);
    Если Запрос.Группировка(Док)=0 Тогда
        Сумма=Итог(ДокСумма);
        ДокументОснование=Док.Вид()+" "+Док.НомерДок();
    Иначе
        Пока Запрос.Группировка()=1 Цикл
            СуммаДок=Итог(ДокСумма);
        КонецЦикла;
        //Сумма=.........
    КонецЕсли;
     КонецПроцедуры
1 ДенисЧ
 
08.03.16
18:50
Я один не протрезвел ещё и не понял, что хочет это создание?
2 Злопчинский
 
08.03.16
18:55
Сначала кзнать какие накладные неоплачены
Сформировать список
Показать юзверю
Юзверь отметит галочками требуемые суммы
Сделать пко с суммой сумм

Внимание
Пко на эту сумму не значит что будут оплачены указанные юзверем накладные
Пко на эту сумму означает что будет погашен долг клиента на указанную сумму, а на какие доки это разляжется и даже аванс может получиться - все зависит от тормознутости оператора и действий других пользователей
3 Злопчинский
 
08.03.16
18:57
В общем случае поставленная задача есть фуфло
Ибо не надо искать накладные
Достаточно получить долг клиента
И все
4 Tatitutu
 
08.03.16
19:00
Правильно сформулировать задачу

вот это удалить:

// Док=СоздатьОбъект("Документ.РасходнаяНакладная");
//ДокСумма=Док.ПолучитьАтрибут("Сумма");
    
//ДатаНач=РабочаяДата(); ???? думаешь после есть документы ?

Запрос ничего не вернет (как минимум указать другую дату , например дату договора)

Запрос удалить. Переписать- добавить функцию сумму (сумм документов) Получить итог
5 MathaiShung
 
08.03.16
19:01
(3) Нет, надо иенно чтоб общая сумма по накладным за текущий день подтягивалась при выборе контрагента, т.к сейчас это всё делается в ручную, а это очень неудобно на больших объёмах и в интенсивном режиме.
6 MathaiShung
 
08.03.16
19:04
(4) Мне нужно именно за текущую дату. Я и спрашиваю, как получить сумму сумм документов.
7 Tatitutu
 
08.03.16
19:06
Текущий день и РабочаяДата() - ??? не есть одно и тоже
8 Tatitutu
 
08.03.16
19:30
(7) сорри это 7.7 отвлекся
9 Tatitutu
 
08.03.16
19:31
(6) у запрос добавь Функцию сумма
10 MathaiShung
 
08.03.16
19:42
(9) Чтобы в запросе добавить такую функцию я так понимаю надо и переменную соответствующую добавлять. А у документа РасходнаяНакладная нет такого реквизита как общая сумма, есть только реквизит табличной части Сумма по каждому товару, то есть по каждому документу надо сначало общю сумму рассчитать. И как это всё в запрос запихнуть?
11 Tatitutu
 
08.03.16
20:06
(10) продолжай на верном пути
12 nordbox
 
08.03.16
20:15
ну коли идет пьянка..... )))
ну если у тебя есть док из запроса то наверное можно и сумму дока получить????
пьем дальше... )))
13 MathaiShung
 
08.03.16
20:22
(12) Сумму из одного документа получить не проблема, а вот как мне получить суммы из всех документов выборки чтобы их потом можно было просуммировать и полученное значение вставить в нужное поле?
14 nordbox
 
08.03.16
20:31
(13) Ты наверное вместе со спиртным еще и травой балуешься????
Поделись... )))
есть самый тупой школьный способ
ДокИтог=ДокИтог+ДокСумма
))))
и засовывай куда хочешь, в любое место если лень фукцию в запрос или отдельную написать
15 nordbox
 
08.03.16
20:36
+14 В твоем случае
СуммаДок=0;
Пока Запрос.Группировка()=1 Цикл
            СуммаДок=СуммаДок+ДокСумма;
КонецЦикла;
Сообщить(СуммаДок);
16 MathaiShung
 
08.03.16
20:39
(15) Чё за бред? Так вообще хрень какая-то получится, а совсем не то что надо.
17 Злопчинский
 
08.03.16
20:43
(16)  небред стоит ресурсов
Которые выражаются либо в личном затраченном времени
Либо оплате специалисту
18 nordbox
 
08.03.16
20:45
(16) Сам ты бред.
Это будет твоя сумма доков выборки
19 oslokot
 
08.03.16
21:00
Эх,школота. держите реальное рабочее решение

//старт
СуммаИтого=0
днк = создатьобъект("докумет.расходнаянакладная")
док = днк.выбратьДокуметы(ДатаНач,ДатаКон)
пока док.получитьдокумент() = 1 цикл
если док.проведен() = 0 тогда
продолжить
конецесли
если док.контрагент = пко.контрагент тогда
СуммаИтого=СуммаИтого+док.Сумма;
конецесли
конеццикла

пко.СуммаПоКлиентум = СуммаИтого
//останов
20 hhhh
 
08.03.16
21:06
(19) это рабочее?
21 oslokot
 
08.03.16
21:08
(20) думаю да, только подрихтовать  децел нада)
22 HawkEye
 
08.03.16
23:26
весело тут у вас )))
23 Злопчинский
 
08.03.16
23:35
(22)  а то!
Клюшки - веселое дело
24 MathaiShung
 
09.03.16
12:21
(18) (19) Полная чушь! Что вы пишите откровенную бредятину? ДокСумма - это значения сумм по товарам из табличной части одного документа, СуммаДок - итоговые суммы каждого из документов в Цикле. И вы предлагаете их складывать??
25 MathaiShung
 
09.03.16
12:22
Как просуммировать значения перемнной, полученные в Цикле?
26 Ёпрст
 
09.03.16
12:38
(25)
Процедура ПриВыбореКлиента()
    Запрос=СоздатьОбъект("Запрос");
    ТекстЗапроса=
    "
    |Период С ДатаДок По ДатаДок;
    |Без итогов;
    |Печеньки = Документ.РасходнаяНакладная.Сумма;
    |Контрагент = Документ.РасходнаяНакладная.Клиент;
    |Функция ИтогоПеченьки = Сумма(Печеньки);
    |Группировка Контрагент без групп;
    |Условие (Контрагент = Клиент);
    |"
    Запрос.Выполнить(ТекстЗапроса);
    Сообщить("Итого печенек на за дату: "+Запрос.ИтогоПеченьки);
  КонецПроцедуры
27 MathaiShung
 
09.03.16
12:42
(26) Так не получится - я уже писал об этом в (10)
28 Злопчинский
 
09.03.16
12:46
(27) Коллека (позвольте так вас называть) - обращаю внимание, что здесь конечно могут рассказать азы программирования, в т.ч. и как проссуммировать в цикле, но вообщем подразумевается что вы владеете хотя бы начальными навыками основ программирования...
29 Масянька
 
09.03.16
12:47
Афигеть...
Я смотрю, праздник удался... Очень...
30 Злопчинский
 
09.03.16
12:47
(27) а ты попробуй (маловато скиллов у тебя чтобы давать заключения получится или нет)
31 Ёпрст
 
09.03.16
12:50
(27) ты это, неправ, если что
32 MathaiShung
 
09.03.16
12:50
(30) Я пробовал уже, ещё до того как здесь вопросы задавать - нет в документе Расходная накладная такого реквизита Сумма
33 Ёпрст
 
09.03.16
12:51
(32) в табличной части нету ? А какой есть ?
34 Ёпрст
 
09.03.16
12:52
тот и подставь
35 Масянька
 
09.03.16
12:52
(33) Автора Пэй Мэй плохо воспитывал :)
36 MathaiShung
 
09.03.16
12:53
(33) В табличной части есть. Но мне же нужно просуммировать не только Суммы в табличной части, но и суммы этих сумм по всем документам выборки.
37 Масянька
 
09.03.16
12:55
(36) Колоссально...
Слушай, возьми запрос Ё, скопируй, запусти, а потом - попробуй разобраться...
38 Ёпрст
 
09.03.16
12:56
(36) ну так запусти (26) - получишь
39 MathaiShung
 
09.03.16
13:01
(38) Попробую конечно, но я изначально когда уже пытался такое сделать мне конструктор запросов не дал даже добавить эту переменную - пишет: "переменная другого типа данных!". Поэтому решил циклом попробовать. А возможно ли вообще то, что я хотел в (25) ?
40 Злопчинский
 
09.03.16
13:04
(39) вот смотри: писька Ёпрста - 96см, твоя - 1см... ты думаешь такая писька сама вырастает? ни с того ни с сего...?
41 Ёпрст
 
09.03.16
13:04
(39) можно всё, но для начала, проверить (26).
42 Злопчинский
 
09.03.16
13:05
(41) тихо, не спугни!
43 MathaiShung
 
10.03.16
21:08
(26) Всё правильно я говорил - не считается так сумма итогов по всем накладным из выборки. С такой функцией в запросе он просто возвращает итоговые суммы по каждой накладной в отдельности. Попытка засунуть результат этой функции внутрь новой функции Сумма приводит к ошибке, т.к. результатом является несколько параметров. Так как же всё таки посчитать Сумму Итоговых сумм Документов внутри запроса, или при обработке его результатов?
    ДатаНач=РабочаяДата();
    ДатаКон=РабочаяДата();
    Запрос=СоздатьОбъект("Запрос");
    ТекстЗапроса=
    "
    |С ДатаНач По Датакон;
    |Обрабатывать НеПомеченныеНаУдаление;
    |Без итогов;
    |Док = Документ.РасходнаяНакладная.ТекущийДокумент;
    |Контрагент = Документ.РасходнаяНакладная.Клиент;
    |ТовСумм = Документ.РасходнаяНакладная.Сумма;
    |Функция ДокИтог = Сумма(ТовСумм);
    |Группировка Док упорядочить по Док.Клиент без групп все ВошедшиеВЗапрос;
    |Условие(Контрагент = Клиент);
    |";
    Запрос.Выполнить(ТекстЗапроса);
44 zak555
 
10.03.16
21:11
где бухзапрос?
45 MathaiShung
 
10.03.16
21:14
(44) Что за бух запрос?
46 HawkEye
 
10.03.16
22:08
(24) правильно, не слушай их... как их можно складывать? умножай их
47 Злопчинский
 
10.03.16
23:11
(43) Для начала проверить (26)
разобраться как считаются функции для группировок.
разобраться что вернет функция на самом высоком уровне группировки - !!над всеми группировками!! - то есть в ИТОГЕ ЗАПРОСА.
.
При дальнейшем злостном ламерство-чайниковстве - автор будет забанен на некоторый срок, чтобы было время поучиться, а не заниматься фигней.
48 Злопчинский
 
10.03.16
23:12
..+ изучить язык запросов, обратить внимание на Без Итогов
49 MathaiShung
 
10.03.16
23:47
(47) C итогами уже переделал, теперь непонятно как спозиционироваться на этой строке с итогами.
Тому что я спрашиваю нигде не учат - всё на практике приходится осваивать.
50 MathaiShung
 
10.03.16
23:56
+(49) Всё, вопрос решён, сам додумал...
51 Злопчинский
 
11.03.16
00:08
(49) а кто тебя бесплатно будет учить? мы когда учились - инета не было как сейчас. Но как-то выучились...
52 MathaiShung
 
11.03.16
01:20
(51) Я и не претендую на обучение, тем более бесплатное. Здесь задаю исключительно практические вопросы только когда у самого не получается, т.к спросить больше не у кого - я думал для этого форумы и существуют. Если бы я всё сам знал, чего б я тут делал тогда вообще.
Сейчас и за платно никто учить особо не старается - у меня после прохождения базового курса в сертифицированном центре 1С вопросы возникают постоянно при столкновении реальными практическими задачами. Всё потому что обучение так себе - очень поверхностно, сумбурно и не даёт чёткого понимания логики и принципов работы объектной модели.
53 Злопчинский
 
11.03.16
01:26
(52)  ты (26) пробовал?
54 MathaiShung
 
11.03.16
01:35
(53) Да, всё получилось уже - после обработки результатов запроса получил нужную сумму
55 MathaiShung
 
11.03.16
01:37
(54) + ну не совсем ка в (26) конечно - с итогами получилось
56 Злопчинский
 
11.03.16
01:40
(55)  и что тебя не устроило в двух операторах перед концом процедуры?
57 MathaiShung
 
11.03.16
01:43
В смысле..? Почему не устроило?
58 Злопчинский
 
11.03.16
01:48
(57)  чем тебя не устроил вариант 26?
Конкретно - чем?
59 MathaiShung
 
11.03.16
01:51
+(57) Я вот так сделал:
        Запрос=СоздатьОбъект("Запрос");
    ТекстЗапроса=
    "
    |Период с (РабочаяДата()) по (РабочаяДата());
    |Обрабатывать НеПомеченныеНаУдаление;
    |ОбрабатыватьДокументы Проведенные;
    |Док = Документ.РасходнаяНакладная.ТекущийДокумент;
    |Контрагент = Документ.РасходнаяНакладная.Клиент;
    |ТовСумм = Документ.РасходнаяНакладная.Сумма;
    |Функция ДокИтог = Сумма(ТовСумм);
    |Группировка Док упорядочить по Док.ДатаДок;
    |Условие(Контрагент = Клиент);
    |";
    Запрос.Выполнить(ТекстЗапроса);
        Запрос.вНачалоВыборки();
        Сумма=Запрос.ДокИтог;
Теперь думаю над тем как количество накладных в выборке посчитать - Счётчик считатет кол-во товаров в табличной части, а не то что мне надо, а реквизита по которому можно было бы поле кол-ва документов задать у документа нету.
60 Builder
 
11.03.16
01:53
Блин, спать пора, а тут самое интересное начинается..... :)
61 Злопчинский
 
11.03.16
01:55
Автор упорно не хочет сознаваться что вариант из 26 он даже не запускал
62 Злопчинский
 
11.03.16
01:57
(59)  вставь функцию счетчик чере еумляут - и смотри
63 MathaiShung
 
11.03.16
01:58
(61) Как это не запускал? Я его сразу проверил
64 Злопчинский
 
11.03.16
01:59
(63)  и что?
65 MathaiShung
 
11.03.16
02:01
(64) Я сначала неправильно представлял что именно возвращает результат запроса - про то, что итоги по каждой строке сами посчитаются в группировке Итог, поэтому хотел функциями посчитать сумму итогов по всем документам.
66 MathaiShung
 
11.03.16
02:03
(62) Что такое чере емуляут?
67 Злопчинский
 
11.03.16
02:03
(65)  не надо лишних сущностей
Что тебе не понравилось в том итоге что выдал вариант в 26
?
68 Злопчинский
 
11.03.16
02:05
(66)  ну как бы образованный человек должен хотя бы примерно представлять что такое умляуты - а программист одноэс обязан быть образованным хоть в чемто если не в программировании - пояндексишь
69 MathaiShung
 
11.03.16
02:07
(67) Он выдавал список итоговых сумм по каждой накладной, а мне нужно было получить одно число - их сумму
70 Злопчинский
 
11.03.16
02:10
(69) злостно врешь
Код в 26 выдает ЕДИНСТВЕННОЕ ЗНАЧЕНИЕ
он не может выдавать список

Еще раз вопрос
Ты вариант в 26 запускал? Без своих добавок?
Вариант 26 выводит единственное число - сумму всех сумм
Тебе с 26 по 46 пост примерно настойчиво советовали воспользоваться вариантом 26

Еще раз вопрос
Ты вариант 26 запускал?
71 MathaiShung
 
11.03.16
02:12
(70) Запускал, говорю же
72 MathaiShung
 
11.03.16
02:15
+ (71) Только группировку походу поменял
73 Злопчинский
 
11.03.16
02:18
(71) Еще раз: ТЫ ЗЛОСТНО ВРЕШЬ.
в твоем ответе о том что ты запускал вариант 26 фигурирует: "Он выдавал список итоговых сумм по каждой накладной"

в моем пояснении в (70) найстойчиво обращено внимание:
"Код в 26 выдает ЕДИНСТВЕННОЕ ЗНАЧЕНИЕ
он не может выдавать список " - ВЫДАЕТ ЕДИНСТВЕННОЕ ЗНАЧЕНИЕ, НЕ МОЖЕТ ВЫДАВАТЬ СПИСОК.

ты утверждаешь - что код в (26) который ты запускал - выдает СПИСОК

1. Итого из (72): ты вариант из 26 - НЕ ЗАПУСКАЛ. При этом утверждал, что опубликованный вариант выдает неправильно.
2. К тому что тут пишут люди - и не я один - ты злостно не прислушивался/игнорировал - несмотря на то, что люди - по доброте душевной - пришли тебе помось.

Что делать будем?
74 Злопчинский
 
11.03.16
02:21
(72) Даже смена группировки в запросе в варианте 26 не привела бы к выдаче списка, т.е. снова врешь.
75 MathaiShung
 
11.03.16
02:25
(73) (74) Да ничего подобного! Какой смысл мне врать? Я его запускал вчера - получилось не сразу, были сначал ещё другие ошибки, потом по мере их исправления и незначительно модификации запроса стал выдавать список чисел. Сейчас тупо скопипастил вообще без изменений, проверил - вообще 0 выдаёт.
76 Злопчинский
 
11.03.16
02:37
Я встал с дивана...
77 Злопчинский
 
11.03.16
02:38
(75) снова злостно врешь
"незначительно модификации запроса стал выдавать список чисел."
пример в 26 выдает единственное число.
ты выданный тебе пример раздербанил в соответсии со своим миропониманием
78 KoZuB
 
11.03.16
02:46
(77) Врал. Теперь не врет. в (26) "без итогов" лишнее.
79 MathaiShung
 
11.03.16
02:46
(77) Правильно, потому что я не бездумно копирую написанные примеры, а разбираюсь в их логиге. И потом всё равно этот запрос неправильно работает - он 0 выдаёт
80 KoZuB
 
11.03.16
02:48
(79) Ни... Не разобрался.
ЖКК. только ЖКК...
81 MathaiShung
 
11.03.16
02:49
(78) Да, теперь всё правильно...
82 KoZuB
 
11.03.16
02:56
(39) Здесь ты ступил. В конструкторе ты пытался запихнуть в одну переменную различные типы: сумма и клиент. А нужно кнопку нажать "добавить переменную" и потом выбрать уже сумму
83 Злопчинский
 
11.03.16
02:56
(78) не врал. выдает единственное число - пусть даже 0.
то есть запрос работает, осталось поянть - где засада в запросе. если бы разбирался в логике - сразу бы обратил вниамние на БезИтогов и прочитал бы в СП что по этому поводу написано. А там панисано что Без итогов - для обхода следует использовать Запрос.Группировка() без параметров. Запрос.Группировка() - в примере 26 - не используется. Вывод - что-то с БезИтогов - не так. Убираем без итогов - получаем нужный результат.

Епрст всегда кладет мелкие засады в свои примеры. По ним видно - разбирался ли человек с примером или нет, пытался ли вдумчиво к нему подходить или использовал по принципу "ща наляпаю вдруг получится". - не получилось.

тем более - прочитать пост 37 - даже не мой!
!!!!тем более - прочитать пост 48 - где я явно указал что следует обратить внимамние на Без итогов.!!!

нет, автор тупо прет по тому пути, который сам для себя выбрал, митусится, кидается вправо-влево, по дороге которую советуют добрые дровосеки - не идет, хотя пришел с вопросом "где здесь правильная дорога?"
84 MathaiShung
 
11.03.16
02:57
(82) Да, я знаю - уже разобрался. В семёрки для меня непривычный этот конструктор по началу был
85 MathaiShung
 
11.03.16
03:05
(83) Про без итогов - вот именно этим сегодня и занимался, после чего всё получилось, правда перед этим ещё много чего в запросе поперепробовал и поменял. В итоге понял таки ка что делается и в чём було неправильное представление, так что я считаю что не зря пошёл своим путем.
86 Злопчинский
 
11.03.16
03:09
(85) Понимаешь, проблема в чем - программирование не надо читать наискосок, через предложение, даже если это форум... здесь до состояния манной каши редко разжевывают. обычно дают вешки. внимательный человек - идет и смотри вешки. Невнимательному - похрен. конечно, трудно быть внимательным. это требует напряжения мозга. он этому противится. все с этим сталкиваются. поэтому надо тренироваться. здесь тебя 80 постов тренировали, а ты все уприался...
87 Злопчинский
 
11.03.16
03:10
(85) ну так 26 пост запустил с убранными без итогов, выдает правильный результат?
88 Злопчинский
 
11.03.16
03:14
надеюсь, что тренировка не прошла даром и нижеприведенный текст аffтар осилит запустить без отсебятины и пострается понять логику.

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

Процедура ПриВыбореКлиента()
    Запрос=СоздатьОбъект("Запрос");
    ТекстЗапроса=
    "
    |Период С ДатаДок По ДатаДок;
    |Печеньки = Документ.Реализация.Сумма;
    |Контрагент = Документ.Реализация.Контрагент;
    |Функция ИтогоПеченьки = Сумма(Печеньки);
    |Функция СколькоПеченек = Счётчик();
    |Группировка Документ;
    |Условие (Контрагент = Клиент);
    |";
    Запрос.Выполнить(ТекстЗапроса);
    Сообщить("Итого печенек за дату: "+Запрос.ИтогоПеченьки);
    Запрос.Группировка(1);
    Сообщить("Итого печенек в кучке: "+Запрос.СколькоПеченек);
  КонецПроцедуры