|
v7: Как посчитать в отчете итоги в 1с 7.7? | ☑ | ||
---|---|---|---|---|
0
Luffy
20.01.16
✎
05:53
|
Подскажите пожалуйста, как подсчитать итог дала?
Вот код добавления одной строки в таблицу // ПечатьСтроки(Запрос,Ном,НазваниеСекции,ПечТекстСтроки,ТекРасшифровка) // // Параметры: // Запрос - объект "Запрос", на основании которого строится отчет // Ном - Номер группировки запроса (Число) // НазваниеСекции - название секции, которую следует использовать (Строка) // ПечТекстСтроки - текстовое представление текущей строки // ТекРасшифровка - расшифровка текущей строки // // Возвращаемое значение: // Нет // // Вызывается из формул элементов диалога: // // Описание: // Производит вывод в печатную форму одной строки запроса. // Процедура ПечатьСтроки(Запрос,Ном,НазваниеСекции,ПечТекстСтроки,ТекРасшифровка) ПечЕд = Запрос.Номенклатура.ОсновнаяЕдиница; //начальный остаток ПечНачОстС = глФРМ(Запрос.НачОстС); ПечНачОстК = глФРМКоличество(Запрос.НачОстК,ПечЕд); ПечНачОстД = ФРМКоличество(Запрос.НачОстД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10,ПечЕд); Таб.ВывестиСекцию(НазваниеСекции+"|Начало"); //Область = Таб.ПолучитьСекцию("Итого"); //Область.Параметры.ИтогоСумма = Таб.Итог("ПечНачОстД"); //Таб.Вывести(Область); Область = Таб.Область("R10C3:R16C3"); СуммаПечНачОстД = Ф // приходы (по операциям) ПриходС = Запрос.ПриходС; ПриходК = Запрос.ПриходК; ПриходД = Запрос.ПриходД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10; ВсегоСтрок = СписокОперДебет.РазмерСписка(); Для СчЦикла=1 по ВсегоСтрок Цикл НазвОперации = СписокОперДебет.ПолучитьЗначение(ВсегоСтрок - СчЦикла + 1).Идентификатор(); ТекПриходС = Запрос.ПолучитьАтрибут(НазвОперации+"ПриходС"); ТекПриходК = Запрос.ПолучитьАтрибут(НазвОперации+"ПриходК"); ТекПриходД = Запрос.ПолучитьАтрибут(НазвОперации+"ПриходД")*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10; ПриходС = ПриходС - ТекПриходС; ПриходК = ПриходК - ТекПриходК; ПриходД = ПриходД - ТекПриходД; ПечПриходС = глФРМ(ТекПриходС); ПечПриходК = глФРМКоличество(ТекПриходК,ПечЕд); ПечПриходД = ФРМКоличество(ТекПриходД,ПечЕд); Таб.ПрисоединитьСекцию(НазваниеСекции+"|Приход"); КонецЦикла; ПечПриходС = глФРМ(ПриходС); ПечПриходК = глФРМКоличество(ПриходК,ПечЕд); ПечПриходД = ФРМКоличество(ПриходД,ПечЕд); Таб.ПрисоединитьСекцию(НазваниеСекции+"|Приход"); // расходы (по операциям) РасходС = Запрос.РасходС; РасходК = Запрос.РасходК; РасходД = Запрос.РасходД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10; РасходОборот = Запрос.РасходВыручка; ВсегоСтрок = СписокОперКредит.РазмерСписка(); Для СчЦикла=1 по ВсегоСтрок Цикл НазвОперации = СписокОперКредит.ПолучитьЗначение(ВсегоСтрок - СчЦикла + 1).Идентификатор(); ТекРасходС = Запрос.ПолучитьАтрибут(НазвОперации+"РасходС"); ТекРасходК = Запрос.ПолучитьАтрибут(НазвОперации+"РасходК"); ТекРасходД = Запрос.ПолучитьАтрибут(НазвОперации+"РасходД"); ТекРасходОборот = Запрос.ПолучитьАтрибут(НазвОперации+"РасходВыручка"); РасходС = РасходС - ТекРасходС; РасходК = РасходК - ТекРасходК; РасходД = РасходД - ТекРасходД; РасходОборот = РасходОборот - ТекРасходОборот; ПечРасходС = глФРМ(ТекРасходС); ПечРасходК = глФРМКоличество(ТекРасходК,ПечЕд); ПечРасходД = ФРМКоличество(ТекРасходД,ПечЕд); ПечРасходОборот = глФРМ(ТекРасходОборот); Таб.ПрисоединитьСекцию(НазваниеСекции+"|Расход"); КонецЦикла; ПечРасходС = глФРМ(РасходС); ПечРасходК = глФРМКоличество(РасходК,ПечЕд); ПечРасходД = ФРМКоличество(РасходД,ПечЕд); ПечРасходОборот = глФРМ(РасходОборот); Таб.ПрисоединитьСекцию(НазваниеСекции+"|Расход"); // конечный остаток ПечКонОстС = глФРМ(Запрос.КонОстС); ПечКонОстК = глФРМКоличество(Запрос.КонОстК,ПечЕд); ПечКонОстД = ФРМКоличество(Запрос.КонОстД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10,ПечЕд); Таб.ПрисоединитьСекцию(НазваниеСекции+"|КонечныйОстаток"); глОживить(1); КонецПроцедуры |
|||
1
Любопытная
20.01.16
✎
05:56
|
Итог чего?
|
|||
2
Luffy
20.01.16
✎
06:00
|
Итог ПечНачОстД,ПечКонОстД,ПечПриходД,ПечРасходД
|
|||
3
VladZ
20.01.16
✎
06:29
|
Запихай в ТЗ и считай там.
|
|||
4
Luffy
20.01.16
✎
06:36
|
(3) Можешь набросать код пожалуйста, как примерно это будет выглядеть?
|
|||
5
GreyK
20.01.16
✎
06:37
|
(0) Подсчитать количество даллов в запросе не предлагать?
|
|||
6
Luffy
20.01.16
✎
06:41
|
(5) Можно, но как будет это выглядеть?
|
|||
7
GreyK
20.01.16
✎
06:55
|
(6) Первым запросом подготавливаешь данные, а вторым считаешь количество в далах по самой последней группировке функцией Сумма() примерно так, если делаешь только по товарам, без документов:
|Функция КолНачОстаток = Сумма(КолНачОстатокВдалах(Товар)); |Функция КолПриход = Сумма(КолПриходВдалах(Товар)); |
|||
8
Ёпрст
20.01.16
✎
07:09
|
(0) ДО или После (смотря куда итоги нужно пихать) группировки выводишь значения показателей.
ЗЫ: в типовой всё есть, и этот отчет (тобой допиленный) тоже это умеет. Делай, по-аналогии. |
|||
9
Luffy
20.01.16
✎
07:34
|
(8) Можешь скинуть, где типовая находится?
|
|||
10
фобка
20.01.16
✎
07:47
|
Итог в далах! А не далА. Далы это декалитры
|
|||
11
Luffy
20.01.16
✎
07:52
|
(10) Да верно!
|
|||
12
Ёпрст
20.01.16
✎
08:21
|
(9) Ты на неё сейчас смотришь в пофигураторе
|
|||
13
Ёпрст
20.01.16
✎
08:22
|
Если че, там в рекурсии обходятся группироки запроса через вывестиГруппировку, перед обходом каждой группировки будут итоги по этой группировке. Бери их и вставляй куда тебе нужно
|
|||
14
Luffy
20.01.16
✎
08:29
|
Да вот код этой процедуры
Процедура ВывестиГруппировку(Запрос,Ном) Если Ном <= КоличествоГруппировок Тогда НазваниеГруппировки = СписокГруппировок.ПолучитьЗначение(Ном); Если НазваниеГруппировки = "Документ" Тогда ТекОстС = Запрос.НачОстС; ТекОстК = Запрос.НачОстК; ТекОстД = Запрос.НачОстД; КонецЕсли; Пока Запрос.Группировка(Ном) = 1 Цикл Если НазваниеГруппировки = "Документ" Тогда НазваниеСекции="Документ"; Иначе НазваниеСекции="Строка"+Ном; КонецЕсли; ПечТекстСтроки = Запрос.ПолучитьАтрибут(НазваниеГруппировки); Если (ТипЗначенияСтр(ПечТекстСтроки) = "Документ") или (ТипЗначенияСтр(ПечТекстСтроки) = "Справочник") Тогда ТекРасшифровка = ПечТекстСтроки; Иначе ТекРасшифровка = ""; КонецЕсли; Если (ТипЗначенияСтр(ПечТекстСтроки) = "Справочник") Тогда Если ПечТекстСтроки.Вид()="ВВП" Тогда ПечТекстСтроки = ПечТекстСтроки.Код+" "+ПечТекстСтроки; КонецЕсли; КонецЕсли; Если НазваниеГруппировки = "Партия" Тогда ПечТекстСтроки = СформироватьИнформациюОПартии(ПечТекстСтроки); ИначеЕсли (НазваниеГруппировки = "СвойствоПартии") и (ПустоеЗначение(ПечТекстСтроки) = 0) Тогда ПечТекстСтроки = ""+ПечТекстСтроки.Владелец+": "+СокрЛП(ПечТекстСтроки); ИначеЕсли НазваниеГруппировки = "Документ" Тогда ПечТекстСтроки = "" + глПредставлениеДокумента(ПечТекстСтроки) + " (" + СокрЛП(глИнформацияПоДокументуВЖурнале(ПечТекстСтроки)) + ")"; ИначеЕсли НазваниеГруппировки = "Номенклатура" Тогда ПечТекстСтроки = "" + ПечТекстСтроки + ?(Константа.ПоказыватьАртикул = 1, " " + СокрЛП(Запрос.Номенклатура.Артикул), "") ИначеЕсли (НазваниеГруппировки = "Производитель") Тогда // Сообщить("Запрос.Производитель"+ Запрос.Производитель); Попытка Производитель_ИНН = Запрос.Производитель.ЮрФизЛицо.ИНН Исключение Производитель_ИНН=""; КонецПопытки; Попытка Производитель_КПП = Запрос.Производитель.ЮрФизЛицо.КПП Исключение Производитель_КПП=""; КонецПопытки; ПечТекстСтроки = "" + ПечТекстСтроки + Производитель_ИНН+?(СтрДлина(СокрЛП(Производитель_КПП))<>0,"\"+СокрЛП(Производитель_КПП),""); ИначеЕсли (НазваниеГруппировки = "Импортер") Тогда Попытка Импортер_ИНН = Запрос.Импортер.ЮрФизЛицо.ИНН Исключение Импортер_ИНН=""; КонецПопытки; Попытка Импортер_КПП = Запрос.Импортер.ЮрФизЛицо.КПП Исключение Импортер_КПП=""; КонецПопытки; ПечТекстСтроки = "" + ПечТекстСтроки + Импортер_ИНН+?(СтрДлина(СокрЛП(Импортер_КПП))<>0,"\"+СокрЛП(Импортер_КПП),""); КонецЕсли; ПечТекстСтроки = ?(ПустоеЗначение(ПечТекстСтроки)=1,глПредставлениеПустогоЗначения(НазваниеГруппировки),ПечТекстСтроки); Выводить=1; Если (НазваниеГруппировки = "Контрагент") И (ПоГруппам=1) Тогда Если (Запрос.ЭтоГруппа("Контрагент")=0) Тогда Выводить=0; КонецЕсли; КонецЕсли; Если Выводить=1 Тогда Если НазваниеГруппировки = "Документ" Тогда ПечатьСтрокиДокумента(Запрос,Ном,НазваниеСекции,ПечТекстСтроки,ТекРасшифровка,ТекОстС,ТекОстК,ТекОстД); Иначе ПечатьСтроки(Запрос,Ном,НазваниеСекции,ПечТекстСтроки,ТекРасшифровка); КонецЕсли; КонецЕсли; // если есть более детальная группировка - выведем ее Если КоличествоГруппировок > Ном Тогда ВывестиГруппировку(Запрос,Ном+1); КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры // ВывестиГруппировку() |
|||
15
Ёпрст
20.01.16
✎
08:32
|
(14) ну, теперь читай, что тебе пишут, много думай.
|
|||
16
Luffy
20.01.16
✎
11:06
|
(7) То есть типо та сделать?)
ТекстЗапроса = ТекстЗапроса + "Функция ПечНачОстД = Сумма(НачОст(Далы)); |Функция ПечПриходД = Сумма(Приход(Далы)); |Функция ПечРасходД = Сумма(Расход(Далы)); |Функция ПечКонОстД = Сумма(КонОст(Далы));"; |
|||
17
Luffy
20.01.16
✎
11:15
|
(13) Как это сделать можно, я не знаю, скажи пожалуйста?
|
|||
18
Luffy
21.01.16
✎
09:20
|
Может кто нибудь помочь пожалуйста?
|
|||
19
Luffy
21.01.16
✎
09:51
|
Проблема в том, что нормализации строки, где нет умножения там выводит итог, где есть не выводит, что делать?
Здесь выводит итог: ПечНачОстК = глФРМКоличество(Запрос.НачОстК,ПечЕд); А здесь не выводит: ПечНачОстД=ФРМКоличество(Запрос.НачОстД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10,ПечЕд); |
|||
20
Luffy
21.01.16
✎
10:14
|
(3) Я пробовал записать в таблицу значения, но она не сохраняется, каждый раз новое значение добавляет и сразу суммировать не получается из за этого.
|
|||
21
VladZ
21.01.16
✎
11:34
|
(19) Я не понимаю, что у тебя за проблема. Тебе уже предложили несколько вариантов. Могу предложить еще один вариант: кидаешь мне на мыло базу и отчет. За 500 рублей пришлю готовый вариант. Правда, не сразу. А часов через 6. Сейчас пока занят.
|
|||
22
HawkEye
21.01.16
✎
15:36
|
(19)
напиши так: Сообщить("НачОст: " + Запрос.НачОстД); Сообщить("Емкость б.е.: " + Запрос.Номенклатура.ЕмкостьБазовойЕдиницы); Сообщить("Произведение: " + Запрос.НачОстД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10); ПечНачОстД=ФРМКоличество(Запрос.НачОстД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10,ПечЕд); |
|||
23
HawkEye
21.01.16
✎
15:36
|
да... все не читал ))) кто там кому дала или не дала?
|
|||
24
asady
21.01.16
✎
15:46
|
(0) http://catalog.mista.ru/public/142961/
когда-то давно делал подобное - может подойдет... что вес, что объем - принцип одинаковый |
|||
25
Luffy
22.01.16
✎
05:16
|
(22) Неа все равно не сработала, нет итогов, отчет выглядит так же http://catalog.mista.ru/public/142961/ только вместо веса дал, дал по НачОст, КонОст, Приход, Расход, в низу должно про суммироваться в итог ))
|
|||
26
Luffy
22.01.16
✎
05:17
|
(24) А есть другая ссылка? а то от туда скачать не могу(
|
|||
27
Luffy
22.01.16
✎
05:35
|
(23) Когда умножения происходит в этих строках
ПечНачОстД=ФРМКоличество(Запрос.НачОстД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10,ПечЕд); ПриходД=Запрос.ПриходД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10; РасходД=Запрос.РасходД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10; ПечКонОстД=ФРМКоличество(Запрос.КонОстД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10); Итоги не выводит, как только убираю *Запрос.Номенклатура.ЕмкостьБазовойЕдиницы Итог появляется такой же как в ПечНачОстК = глФРМКоличество(Запрос.НачОстК,ПечЕд); ПечПриходК = глФРМКоличество(ПриходК,ПечЕд); ПечРасходК = глФРМКоличество(РасходК,ПечЕд); ПечКонОстК = глФРМКоличество(Запрос.КонОстК,ПечЕд); Так как, числа одинаковые просто в тех умножается и делится на 10. Может причина в функции ФРМКоличество? вот код Функция ФРМКоличество(Знач ЧислЗнач, Единица="", РаздТриад=" ") Экспорт Если ПустоеЗначение(Единица)=0 Тогда Если ТипЗначения(Единица)=11 Тогда ЧислЗнач = ?(Единица.Коэффициент=0,0,ЧислЗнач / Единица.Коэффициент); КонецЕсли; КонецЕсли; Стр=СокрЛ(Формат(ЧислЗнач,"Ч015.4." + РаздТриад)); Возврат Стр; КонецФункции //глФРМКоличество() |
|||
28
VladZ
22.01.16
✎
06:00
|
(25) Что пишет в Сообщить("Емкость б.е.: " + Запрос.Номенклатура.ЕмкостьБазовойЕдиницы); ?
|
|||
29
Luffy
22.01.16
✎
06:07
|
(28) НачОст: 8
Емкость б.е.: 0.25 Произведение: 0.2 НачОст: 3 Емкость б.е.: 1 Произведение: 0.3 НачОст: 53 Емкость б.е.: 0.5 Произведение: 2.65 НачОст: 14 Емкость б.е.: 0.5 Произведение: 0.7 НачОст: 5 Емкость б.е.: 0.75 Произведение: 0.375 И так 229 строк. |
|||
30
VladZ
22.01.16
✎
06:16
|
Судя по (20) - не тем ты занимаешься...
|
|||
31
VladZ
22.01.16
✎
06:17
|
Задача в целом не сложная. Решение можно найти в интернете. Или ты ждешь, что тебе тут готовое решение дадут?
|
|||
32
Luffy
22.01.16
✎
06:20
|
(30) Есть идеи, как это реализовать? если для тебя не сложная, так подскажи пожалуйста)
|
|||
33
VladZ
22.01.16
✎
06:24
|
(32) Чем тебя не устроил вариант с ТЗ?
|
|||
34
Luffy
22.01.16
✎
06:28
|
(33) По одной строки добавляет, возвращается с новой строкой, не сохраняется старая строка
|
|||
35
VladZ
22.01.16
✎
06:29
|
(34) Покажи, где объявил переменную для ТЗ.
Вариант с расчетом в запросе: Умножение в запросе [Решение] |
|||
36
Luffy
22.01.16
✎
06:29
|
(33)
ПечНачОстД = ФРМКоличество(Запрос.НачОстД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10,ПечЕд); Если ПечНачОстД <> "" Тогда СуммаНачОстД = СоздатьОбъект("ТаблицаЗначений"); СуммаНачОстД.НоваяКолонка("НачОстД",,,,,15); СуммаНачОстД.НоваяСтрока(); СуммаНачОстД.НачОстД = ПечНачОстД; КонецЕсли; |
|||
37
VladZ
22.01.16
✎
06:33
|
(36) Красава! Сам понимаешь, что делаешь? Таблица значений СуммаНачОстД создается каждый раз заново при выводе одного значения (!!!!). Процесс разработки программы начинается с разработке алгоритма. Глядя на тебя создается впечатление, что ты пытаешься писать код методом тыка. Не проканает! Сначала нужно придумать работающий алгоритм (!!!). На основании алгоритма - писать код. Если ты думаешь, что процесс программирования - это "вот я ща тут воткну пару строк кода и вот тут - и все взлетит!" ты жестоко ошибаешься.
|
|||
38
VladZ
22.01.16
✎
06:35
|
"Придумать" - неверное слово. Алгоритм нужно разработать.
|
|||
39
ЧеловекДуши
22.01.16
✎
06:36
|
(0) Написать нормальный отчет на подобие СКД от 8.х :)
И радоваться расчету :) |
|||
40
Luffy
22.01.16
✎
06:37
|
(37) Да ты прав, просто тыкаю, без всякого алгоритма. 0 опыта, да и подсказывать не кому(
|
|||
41
ЧеловекДуши
22.01.16
✎
06:37
|
(36) Холоп, все придумано до тебя. Главное найти и понять :)
|
|||
42
VladZ
22.01.16
✎
06:41
|
(40) Метод "тыка" - это конечно замечательно. Дает много практических знаний. Представь, что ты решил стать электриком. Тебе приносят какую-то "шайтан-машину" и просят починить. Внимание вопрос: Ты хотя бы постараешься вникнуть, как эта фигня работает? Или будешь пальцАми тыкать во все подряд, пока тебя током не шарахнет?
|
|||
43
VladZ
22.01.16
✎
06:46
|
Еще раз повторюсь: задача простая. Показывает несколько интересных вещей:
1. насколько испытуемый понимает в программировании в целом. 2. насколько испытуемый умеет пользоваться поиском подобных решений в Инете. Ты что-то совсем не радуешь не по первому пункту, ни по второму. |
|||
44
Luffy
22.01.16
✎
06:47
|
(42) Начался троллинг, от того, что ты сейчас пишешь, проблема не решиться, попробую создать документ кароч, туда будет добавлять в таб.часть, далы по НачОст, КонОст, Приход, Расход, и от туда выведу итоги.
|
|||
45
Luffy
22.01.16
✎
06:49
|
(43) Ессно документ будет записываться, как искать и что может быть подобное? если есть источники, я весь внимание.
|
|||
46
Luffy
22.01.16
✎
06:51
|
(43) Я же не просто сюда обратился, а от не знания, думал хоть тут дадут какой то базис, но пока, что то не очень(
|
|||
47
VladZ
22.01.16
✎
06:53
|
(45) Я тебе в (35) дал ссылку. Как раз твоя тема
|
|||
48
VladZ
22.01.16
✎
06:55
|
Вариант с ТЗ: вынеси создание ТЗ из процедуры "Печать" в процедуру "Сформировать".
|
|||
49
Luffy
22.01.16
✎
06:55
|
(47) Щас гляну, в любом случае спасибо вам, что не оставили без внимания)
|
|||
50
Luffy
22.01.16
✎
06:56
|
(48) Щас по пробую
|
|||
51
VladZ
22.01.16
✎
06:57
|
(46) Сейчас в инете инфы - вагон и маленькая тележка. Ищи и читай. Учить тебя специально никто не будет.
|
|||
52
Luffy
22.01.16
✎
08:25
|
(51) Вообщем запросом не получилось, хотя и вывел данные в итоги, но число не то, делал так, добавил функцию.
ТекстЗапроса = ТекстЗапроса + "Функция НачОстД = НачОст(Далы); |Функция ПриходД = Приход(Далы); |Функция РасходД = Расход(Далы); |Функция КонОстД = КонОст(Далы); |Функция СуммаНачОстД = Сумма(Запрос.НачОстД * Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10);"; И здесь прост выводил ПечНачОстД = ФРМКоличество(Запрос.СуммаНачОстД,ПечЕд); Сейчас попробую через документ. |
|||
53
oslokot
22.01.16
✎
08:27
|
Я один не понимаю что такое "итог дала" ?
|
|||
54
Luffy
22.01.16
✎
08:30
|
(53) Это просто Количество*ЕмкостьБазовойЕдиницы/10
|
|||
55
HawkEye
22.01.16
✎
08:32
|
(25) понятно что не сработало... показало то чего?
|
|||
56
HawkEye
22.01.16
✎
08:33
|
(29) ну вот... а говоришь нет итогов )) все есть оказывается ))
|
|||
57
Luffy
22.01.16
✎
08:51
|
(56) Итогов нету, при формирование отчета
|
|||
58
HawkEye
22.01.16
✎
08:53
|
(57) ну так-то в коде из (0) нет строчек с выводом Итогов...
|
|||
59
Luffy
22.01.16
✎
08:59
|
(58) Вот код Сформировать.
Процедура Сформировать(ЗакрытьДиалог=0) Перем Запрос, ТекстЗапроса; Если глПроверкаДаты(ДатаНачала,ДатаКонца)=0 Тогда Возврат; КонецЕсли; глПриСменеСтрокиТаблицыМФ(1,ТекСтрокаВТаблице,Контекст); // записываем изменения если они были Если ПроверкаУчетнойПолитики() = 0 Тогда Возврат; КонецЕсли; Если (ТипЗначенияСтр(Таб) <> "Таблица") ИЛИ (Обновить = 0) Тогда Таб = СоздатьОбъект("Таблица"); Иначе Таб.Очистить(); КонецЕсли; Таб.ИсходнаяТаблица( "ВедомостьПоПартиямТМЦ" ); // Здесь формируется отчет, который использует регистры, критичные к // последовательности проведения документов // поэтому сравним установленные даты периода формируемого отчета с ГП Если глПроверкаАктуальностиОтчета(ДатаНачала,ДатаКонца,Последовательность.ОсновнаяПоследовательность)=0 Тогда Возврат; КонецЕсли; ЗаполнитьСпискиОпераций(); Расшифровка = СоздатьОбъект("СписокЗначений"); Расшифровка.Установить("Отчет", "ВедомостьПоПартиямТМЦ"); // все настройки помещаем в список Расшифровка.Установить("ДатаНачала", ДатаНачала); Расшифровка.Установить("ДатаКонца", ДатаКонца); Расшифровка.Установить("ВыбРазделитель1",ВыбРазделитель1); Расшифровка.Установить("ВыбРазделитель2",ВыбРазделитель2); Расшифровка.Установить("ВыбРазделитель3",ВыбРазделитель3); Расшифровка.Установить("ВидРазделителя",ВидРазделителя); Расшифровка.Установить("ВыбВВП", ВыбВВП); Расшифровка.Установить("ВыбНоменклатура", ВыбНоменклатура); Расшифровка.Установить("ВыбМОЛ", ВыбМОЛ); Расшифровка.Установить("ВыбПоставщик", ВыбПоставщик); Расшифровка.Установить("ВыбПроизводитель", ВыбПроизводитель); Расшифровка.Установить("ВыбИмпортер", ВыбИмпортер); Расшифровка.Установить("ПоОперациям", ПоОперациям); Расшифровка.Установить("ПоГруппам", ПоГруппам); Расшифровка.Установить("ВидСуммы", ВидСуммы); Расшифровка.Установить("Группировки", Группировки); // запомним МФ только если он задан Если глМножественныйФильтрЗадан(ТаблицаМФ) = 1 Тогда Расшифровка.Установить("ТаблицаМФ", ТаблицаМФ); КонецЕсли; глПриСменеСтрокиТаблицыМФ(1,ТекСтрокаВТаблице,Контекст); // записываем изменения если они были //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ДатаНачала по ДатаКонца; |Фирма = Регистр.ПартииНаличие.Фирма; |УпрАналитика = Регистр.ПартииНаличие.Фирма.УпрАналитика; |ЮрЛицо = Регистр.ПартииНаличие.Фирма.ЮрЛицо; |Алкоголь = Регистр.ПартииНаличие.Номенклатура.Алкоголь; |Номенклатура = Регистр.ПартииНаличие.Номенклатура; |ВВП = Регистр.ПартииНаличие.Номенклатура.ВВП; |МОЛ = Регистр.ПартииНаличие.МОЛ; |Партия = Регистр.ПартииНаличие.Партия; |Поставщик = Регистр.ПартииНаличие.Партия.Поставщик; |Производитель = Регистр.ПартииНаличие.Номенклатура.Производитель; |Импортер = Регистр.ПартииНаличие.Номенклатура.Импортер; |Док = Регистр.ПартииНаличие.ТекущийДокумент; |Контрагент = Регистр.ПартииНаличие.ТекущийДокумент.ПоступлениеТМЦ.Контрагент, | Регистр.ПартииНаличие.ТекущийДокумент.ВозвратПоставщику.Контрагент, | Регистр.ПартииНаличие.ТекущийДокумент.Реализация.Контрагент, | Регистр.ПартииНаличие.ТекущийДокумент.ОтчетККМ.Контрагент, // | Регистр.ПартииНаличие.ТекущийДокумент.РеализацияСобств.Контрагент, | Регистр.ПартииНаличие.ТекущийДокумент.ВозвратОтПокупателя.Контрагент; // |ВидЛицензии = Регистр.ПартииНаличие.ТекущийДокумент.ПоступлениеТМЦ.Контрагент.ОсновнаяЛицензия.ВидДеятельности, // | Регистр.ПартииНаличие.ТекущийДокумент.ВозвратПоставщику.Контрагент.ОсновнаяЛицензия.ВидДеятельности, // | Регистр.ПартииНаличие.ТекущийДокумент.Реализация.Контрагент.ОсновнаяЛицензия.ВидДеятельности, // | Регистр.ПартииНаличие.ТекущийДокумент.РеализацияСобств.Контрагент.ОсновнаяЛицензия.ВидДеятельности, // | Регистр.ПартииНаличие.ТекущийДокумент.ВозвратОтПокупателя.Контрагент.ОсновнаяЛицензия.ВидДеятельности; |КодОперации = Регистр.ПартииНаличие.КодОперации;"; // |Условие (Алкоголь=Перечисление.Булево.Да);"; Если ВидСуммы = 1 Тогда // бух с НДС ТекстЗапроса = ТекстЗапроса + "Сумма = Регистр.ПартииНаличие.СуммаРуб;"; ИначеЕсли ВидСуммы = 2 Тогда // бух без НДС ТекстЗапроса = ТекстЗапроса + "Сумма = Регистр.ПартииНаличие.СуммаБезНДС;"; Иначе ТекстЗапроса = ТекстЗапроса + "Сумма = Регистр.ПартииНаличие.СуммаУпр;"; КонецЕсли; ТекстЗапроса = ТекстЗапроса + "Выручка = Регистр.ПартииНаличие.ПродСтоимость;"; ТекстЗапроса = ТекстЗапроса + "Далы = Регистр.ПартииНаличие.Количество;"; ТекстЗапроса = ТекстЗапроса + "Количество = Регистр.ПартииНаличие.Количество;"; ТекстЗапроса = ТекстЗапроса + "Функция НачОстС = НачОст(Сумма); |Функция ПриходС = Приход(Сумма); |Функция РасходС = Расход(Сумма); |Функция КонОстС = КонОст(Сумма);"; ТекстЗапроса = ТекстЗапроса + "Функция НачОстК = НачОст(Количество); |Функция ПриходК = Приход(Количество); |Функция РасходК = Расход(Количество); |Функция КонОстК = КонОст(Количество);"; ТекстЗапроса = ТекстЗапроса + "Функция НачОстД = НачОст(Далы); |Функция ПриходД = Приход(Далы); |Функция РасходД = Расход(Далы); |Функция КонОстД = КонОст(Далы); |Функция СуммаНачОстД = Сумма(Запрос.НачОстД * Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10);"; ТекстЗапроса = ТекстЗапроса + "Функция РасходВыручка = Расход(Выручка);"; ТекстЗапроса = ТекстЗапроса + //"Условие((КодОперации <> глКО.ПередачаВРозницу)и(КодОперации <> глКО.Перемещение)и((Док.Вид() <> ""РеализацияРозница"")и(Док.Вид()<>""ОтчетККМ"")));"; // Кулагин(20151230 // Перемещения тоже должны попадать если Фирмы разные. "Условие(((КодОперации <> глКО.ПередачаВРозницу)и(КодОперации <> глКО.Перемещение)));"; //|и((Док.Вид() <> ""РеализацияРозница"")и(Док.Вид()<>""ОтчетККМ""))));"; // Кулагин) Для СчЦикла=1 по СписокОперДебет.РазмерСписка() Цикл НазвОперации = СписокОперДебет.ПолучитьЗначение(СчЦикла).Идентификатор(); ТекстЗапроса = ТекстЗапроса + РазделительСтрок+ "Функция "+НазвОперации+"ПриходС = Приход(Сумма) когда (КодОперации = глКО."+НазвОперации+");"+ "Функция "+НазвОперации+"ПриходК = Приход(Количество) когда (КодОперации = глКО."+НазвОперации+");"+ "Функция "+НазвОперации+"ПриходД = Приход(Далы) когда (КодОперации = глКО."+НазвОперации+");"; КонецЦикла; Для СчЦикла=1 по СписокОперКредит.РазмерСписка() Цикл НазвОперации = СписокОперКредит.ПолучитьЗначение(СчЦикла).Идентификатор(); ТекстЗапроса = ТекстЗапроса + РазделительСтрок+ "Функция "+НазвОперации+"РасходС = Расход(Сумма) когда (КодОперации = глКО."+НазвОперации+");"+ "Функция "+НазвОперации+"РасходК = Расход(Количество) когда (КодОперации = глКО."+НазвОперации+");"+ "Функция "+НазвОперации+"РасходД = Расход(Далы) когда (КодОперации = глКО."+НазвОперации+");"+ "Функция "+НазвОперации+"РасходВыручка = Расход(Выручка) когда (КодОперации = глКО."+НазвОперации+");"; КонецЦикла; Загол=""; НетОш = 1; // нет ошибок при наложении фильтров Если ВидРазделителя = 1 Тогда НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Фирма",ВыбРазделитель1,"ВыбРазделитель1",ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "ЮрЛицо",,,ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "УпрАналитика",,,ТекстЗапроса,Загол); ИначеЕсли ВидРазделителя = 2 Тогда НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "ЮрЛицо",ВыбРазделитель2,"ВыбРазделитель2",ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Фирма",,,ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "УпрАналитика",,,ТекстЗапроса,Загол); ИначеЕсли ВидРазделителя = 3 Тогда НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "УпрАналитика",ВыбРазделитель3,"ВыбРазделитель3",ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Фирма",,,ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "ЮрЛицо",,,ТекстЗапроса,Загол); КонецЕсли; НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Номенклатура",ВыбНоменклатура,"ВыбНоменклатура",ТекстЗапроса,Загол,"СвойстваНоменклатуры"); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "ВВП",ВыбВВП,"ВыбВВП",ТекстЗапроса,Загол,"СвойстваНоменклатуры"); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "МОЛ",ВыбМОЛ,"ВыбМОЛ",ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Поставщик",ВыбПоставщик,"ВыбПоставщик",ТекстЗапроса,Загол,"СвойстваКонтрагентов"); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Контрагент",ВыбКонтрагент,"ВыбКонтрагент",ТекстЗапроса,Загол,"СвойстваКонтрагентов"); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Производитель",ВыбПроизводитель,"ВыбПроизводитель",ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Импортер",ВыбИмпортер,"ВыбИмпортер",ТекстЗапроса,Загол); Если НетОш = 0 Тогда Возврат; КонецЕсли; НомерГруппировкиПоВВП = 9999; // невозможно большое значение ПечЗаголовокСтолбца = ""; ПечЗаголовок = "Ведомость по видам ТМЦ (" + ?(ВидСуммы = 3,глДоллары,"" + глРубли + ?(ВидСуммы=1,""," без НДС"))+")"; УстановитьГруппировкиЗапроса(ТекстЗапроса, ПечЗаголовокСтолбца); КоличествоГруппировок = СписокГруппировок.РазмерСписка(); Если КоличествоГруппировок > 5 Тогда Предупреждение("Нельзя сделать больше 5 группировок!",60); Возврат; КонецЕсли; //Сообщить(ТекстЗапроса); // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; глЧислоСтрок = 0; Таб.ВывестиСекцию("Кнопки"); Таб.ВывестиСекцию("Шапка"); Таб.ВывестиСекцию("ШапкаТаблицы|Начало"); // выводим шапку на каждой странице НачПовт = Таб.ВысотаСекции("Кнопки") + Таб.ВысотаСекции("Шапка"); КонПовт = НачПовт + Таб.ВысотаСекции("ШапкаТаблицы"); Таб.ПовторятьПриПечатиСтроки(НачПовт + 1, КонПовт); // сформируем шапку, исходя из выбранной формы представления данных ВсегоСтрок = СписокОперДебет.РазмерСписка(); Для СчЦикла=1 по ВсегоСтрок Цикл НазвОперации = СписокОперДебет.ПолучитьЗначение(ВсегоСтрок - СчЦикла + 1).Идентификатор(); Если (Запрос.ПолучитьАтрибут(НазвОперации+"ПриходК")=0) и (Запрос.ПолучитьАтрибут(НазвОперации+"ПриходС")=0) Тогда // уберем лишние горизонтальные группировки (по которым нет итогов) СписокОперДебет.УдалитьЗначение(ВсегоСтрок - СчЦикла + 1); Иначе НазвОперации = СписокОперДебет.ПолучитьЗначение(ВсегоСтрок - СчЦикла + 1); Таб.ПрисоединитьСекцию("ШапкаТаблицы|Приход"); КонецЕсли; КонецЦикла; НазвОперации = ?(ПоОперациям=1,"Приход - прочее","Приход"); Таб.ПрисоединитьСекцию("ШапкаТаблицы|Приход"); ВсегоСтрок = СписокОперКредит.РазмерСписка(); Для СчЦикла=1 по ВсегоСтрок Цикл НазвОперации = СписокОперКредит.ПолучитьЗначение(ВсегоСтрок - СчЦикла + 1).Идентификатор(); Если (Запрос.ПолучитьАтрибут(НазвОперации+"РасходК")=0) И (Запрос.ПолучитьАтрибут(НазвОперации+"РасходС")=0) Тогда // уберем лишние горизонтальные группировки (по которым нет итогов) СписокОперКредит.УдалитьЗначение(ВсегоСтрок - СчЦикла + 1); Иначе НазвОперации = СписокОперКредит.ПолучитьЗначение(ВсегоСтрок - СчЦикла + 1); Таб.ПрисоединитьСекцию("ШапкаТаблицы|Расход"); КонецЕсли; КонецЦикла; НазвОперации = ?(ПоОперациям=1,"Расход - прочее","Расход"); Таб.ПрисоединитьСекцию("ШапкаТаблицы|Расход"); Таб.ПрисоединитьСекцию("ШапкаТаблицы|КонечныйОстаток"); глОживить(1); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 2, "ВедомостьПоВидамТМЦ", "ВедомостьПоВидамТМЦ"); // ВЫВОД ГРУППИРОВОК ЗАПРОСА ВывестиГруппировку(Запрос,1); Таб.ОбластьПечати(3,,,); // Заполнение полей "Итого" ПечатьСтроки(Запрос,0,"Итого","",""); // Вывод заполненной формы Таб.ТолькоПросмотр(1); Если глПолучитьПолномочие("РазрешитьРедактированиеТаблиц") = 0 Тогда Таб.Защита(1); КонецЕсли; Таб.ПараметрыСтраницы(2,,,,,,,,,1,,); Таб.Показать("Ведомость по видам ТМЦ", ""); Если (Обновить = 2)ИЛИ(ЗакрытьДиалог=1) Тогда СтрокаДействийФормы = "#Закрыть"; КонецЕсли; КонецПроцедуры |
|||
60
HawkEye
22.01.16
✎
09:08
|
(59) я так понимаю, твои шаловливые ручки уже покорежили оригинальный, рабочий текст, да?
1. ПечатьСтроки(Запрос,0,"Итого","",""); 2. Процедура ПечатьСтроки(Запрос,Ном,НазваниеСекции,ПечТекстСтроки,ТекРасшифровка) ПечЕд = Запрос.Номенклатура.ОсновнаяЕдиница; //начальный остаток ПечНачОстС = глФРМ(Запрос.НачОстС); ПечНачОстК = глФРМКоличество(Запрос.НачОстК,ПечЕд); ПечНачОстД = ФРМКоличество(Запрос.НачОстД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10,ПечЕд); видимо ты считаешь, что в Запрос.НачОстС у тебя итог? |
|||
61
Luffy
22.01.16
✎
09:17
|
(60) Да в ПечНачОстС и ПечНачОстК присутствует итог в сформированом отчете, а в ПечНачОстД нет итога(
|
|||
62
Luffy
22.01.16
✎
09:19
|
(60) Нет, я только итоги делаю по далам, до меня видимо кто то поправил оригинал)
|
|||
63
HawkEye
22.01.16
✎
09:42
|
(61) присутствует правильный итог?
|
|||
64
Luffy
22.01.16
✎
09:44
|
(63) Да там правильный итог
|
|||
65
HawkEye
22.01.16
✎
09:52
|
(64) ну если ты говоришь, что итоги показываются и в (29) все сообщается, напиши просто
ПечНачОстД =Запрос.НачОстД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10; |
|||
66
Luffy
22.01.16
✎
09:59
|
(65) Неа, теперь в итоге просто 0 стоит, а не пустое поле
|
|||
67
HawkEye
22.01.16
✎
10:02
|
(66) т.е. у тебя написано:
Сообщить("НачОст: " + Запрос.НачОстД); Сообщить("Емкость б.е.: " + Запрос.Номенклатура.ЕмкостьБазовойЕдиницы); Сообщить("Произведение: " + Запрос.НачОстД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10); ПечНачОстД=Запрос.НачОстД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10; при этом в сообщить НачОст: 8 Емкость б.е.: 0.25 Произведение: 0.2 а в таблице: 0 да? |
|||
68
Luffy
22.01.16
✎
10:05
|
(67) Да, а в отчете 0
|
|||
69
HawkEye
22.01.16
✎
13:21
|
(68) завязывай с программированием...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |