|
v7: подскажите алгоритм | ☑ | ||
---|---|---|---|---|
0
aptomilov
29.07.11
✎
09:40
|
Сразу прошу сильно не пинать - зашился сроки пождимают!!
есть табличка вида объект статья документ сумма документа все отсортированно ТабОбъект.Сортировать("Объект,Статья,Док"); на до вывести в на печать в виде объект - сумма статья - сумма документ - сумма щас делаю так - перебираю всю табл ив условиях Если ТекОбъект=СледОбъект Тогда РасходОбъект=РасходОбъект+ТекРасход; ПриходОбъект=ПриходОбъект+ТекПриход; Если ТекСтатья=СледСтатья Тогда РасходСтатья=РасходСтатья+ТекРасход; ПриходСтатья=ПриходСтатья+ТекПриход; ТабСписание.ВывестиСекцию("Документ"); Иначе ПриходСтатья=ПриходСтатья+ТекПриход; РасходСтатья=РасходСтатья+ТекРасход; ТабСписание.ВывестиСекцию("Строка1"); ПриходСтатья=0; РасходСтатья=0; КонецЕсли; Иначе ПриходОбъект=ПриходОбъект+ТекПриход; РасходОбъект=РасходОбъект+ТекРасход; ТабСписание.ВывестиСекцию("Строка2"); ПриходОбъект=0; РасходОбъект=0; КонецЕсли; Но так получается наоборот сначала документы потом статьи и в конце объекты и в каждой группировке теряется 1 документ. Выручайте люди голова не соображает |
|||
1
Ёпрст
29.07.11
✎
09:44
|
как там говорится то ?
"Вон из профессии!" ©Кто-то :) |
|||
2
Ёпрст
29.07.11
✎
09:47
|
врОбъект="";
врСтатья=""; ТабОбъект.ВыбратьСтроки(); Пока ТабОбъект.ПолучитьСтроку()=1 Цикл Объект = ТабОбъект.Объект; Если врОбъект<>Объект Тогда ТабСписание.ВывестиСекцию("Объект"); врОбъект= Объект; КонецЕсли; Статья= ТабОбъект.Статья; Если врСтатья<>СтатьяТогда ТабСписание.ВывестиСекцию("Статья"); врСтатья= СтатьяТогда; КонецЕсли; ТабСписание.ВывестиСекцию("Документ"); КонецЦикла; наслаждайся |
|||
3
aptomilov
29.07.11
✎
09:47
|
15 минут на отчет дали (
|
|||
4
aptomilov
29.07.11
✎
09:49
|
а как я суммы то посчитаю
|
|||
5
aptomilov
29.07.11
✎
09:49
|
я же ещё не прошел группировку то
|
|||
6
_Atilla
29.07.11
✎
09:52
|
ТабОбъект.Сортировать("Объект,Статья,Док");
ТабОбъект.Выгрузить(ТабОбъект1); ТабОбъект1.Свернуть("Объект", "Сумма") ТабОбъект.Выгрузить(ТабОбъект2); ТабОбъект2.Свернуть("Объект,Статья", "Сумма") ТабОбъект.НоваяКолонка("НомТаб"); ТабОбъект1.НоваяКолонка("НомТаб"); ТабОбъект2.НоваяКолонка("НомТаб"); ТабОбъект.Заполнить(3,,,"НомТаб"); ТабОбъект1.Заполнить(1,,,"НомТаб"); ТабОбъект2.Заполнить(2,,,"НомТаб"); ТабОбъект1.Выгрузить(ТабОбъект); ТабОбъект2.Выгрузить(ТабОбъект); ТабОбъект.Сортировать("Объект,НомТаб,Статья,Док"); |
|||
7
_Atilla
29.07.11
✎
09:52
|
Понятно?
|
|||
8
VladZ
29.07.11
✎
09:53
|
(3) Собеседуешься?
|
|||
9
_Atilla
29.07.11
✎
09:55
|
(6) Вместо "НомТаб" используй "НомГруппы"...
|
|||
10
aptomilov
29.07.11
✎
09:56
|
понятно спасибо Атилла
щас пробую как оно будет) |
|||
11
aptomilov
29.07.11
✎
09:57
|
не собеседуюсь
|
|||
12
_Atilla
29.07.11
✎
09:57
|
(10) ТабОбъект.Сортировать("Объект,НомТаб,Статья,Док");
Может ТабОбъект.Сортировать("Объект,Статья,Док,НомТаб"); потестируй... |
|||
13
_Atilla
29.07.11
✎
09:59
|
или ТабОбъект.Сортировать("Объект,Статья,НомТаб,Док");
|
|||
14
Ёпрст
29.07.11
✎
10:01
|
(4) охренеть..
СуммаОбъект=0; СуммаСтатья=0; врОбъект=""; врСтатья=""; ТабОбъект.ВыбратьСтроки(); Пока ТабОбъект.ПолучитьСтроку()=1 Цикл Объект = ТабОбъект.Объект; СуммаДок = ТабОбъект.Сумма; СуммаОбъект = СуммаОбъект+СуммаДок; СуммаСтатья = СуммаСтатья+СуммаДок; Если врОбъект<>Объект Тогда ТабСписание.ВывестиСекцию("Объект"); врОбъект= Объект; СуммаОбъект=0; КонецЕсли; Статья= ТабОбъект.Статья; Если врСтатья<>Статья ТабСписание.ВывестиСекцию("Статья"); врСтатья= СтатьяТогда; СуммаСтатья =0; КонецЕсли; ТабСписание.ВывестиСекцию("Документ"); КонецЦикла; ЗЫ: тут точно, вон из профессии.. :))) |
|||
15
aptomilov
29.07.11
✎
10:02
|
я понял, последний вариант
правильный |
|||
16
povar
29.07.11
✎
10:02
|
(10) а чем (2) не устроило ?
|
|||
17
KRV
29.07.11
✎
10:05
|
(3)Фигассеее... трудно, там, у Вас,.. небось заплату дают еще по понедельникам...
|
|||
18
Ёпрст
29.07.11
✎
10:05
|
(26) ну.. это же надо осмыслять, а тут некогда - в 15 минут не уложиться :)
|
|||
19
povar
29.07.11
✎
10:07
|
(18) понятно, время только на копипасту )
|
|||
20
Aleksey
29.07.11
✎
10:11
|
(0) Индексированная таблица з комплекта 1С++ тебя спасет
|
|||
21
aptomilov
29.07.11
✎
10:12
|
povar, там суммы получить в группировку не могу, мозгов нет чото ваще
|
|||
22
aptomilov
29.07.11
✎
10:18
|
таб.Выгрузить почему не добавляет строки а заменяет собой ту таблицу в которую загружаешь(
|
|||
23
povar
29.07.11
✎
10:20
|
(22) см. (1)
|
|||
24
_Atilla
29.07.11
✎
10:35
|
(22) Посмотри параметры "Выгрузить".
|
|||
25
aptomilov
29.07.11
✎
10:45
|
Atilla, походу с таблицами идея мертвая с сортировкой засада с помощью ней никак не отсортировать так что каждый в свою группу встал.
а по выгрузить там не параметров, подменять или нет собой табл |
|||
26
Mikeware
29.07.11
✎
10:49
|
(24) не Выгрузить(), а Заполнить()
(25) это у тебя соотношение радиусов к бесконечности стремится... |
|||
27
Сияющий Асинхраль
29.07.11
✎
10:52
|
Параметры выгрузить не помогут, соединять тз можно либо с помощью "заполнить" либо перебором
|
|||
28
Сияющий Асинхраль
29.07.11
✎
11:02
|
А вообще самое простое добавить в тз еще одну колонку "уровень" и в момент формирования тз добавлять не по одной строчке, а по три, первая - объект, уровень=3, сумма; вторая - объект, статья, уровень=2, сумма; третья - объект, статья, док, уровень=3, сумма. Достаточно эту тз свернуть и отсортировать. Все готово
|
|||
29
aptomilov
29.07.11
✎
11:11
|
Сияющий Асинхраль эта табл у меня из запроса (группировка документ) + я потом по ней прошелся и добавил объект , который в запросе ну никак не получить вот теперь сижу и думаю как её выводить
|
|||
30
Сияющий Асинхраль
29.07.11
✎
11:25
|
Я просто привел самый простой именно для тебя метод. Реально вариантов очень много. Тебя никто не заставляет, скажем, из твоего запроса выгружать в тз, можно ее формировать перебором результата запроса. Другие варианты расскажу как дойду до рабочего места
|
|||
31
aptomilov
29.07.11
✎
11:30
|
запросом я не могу там нет объекта, проблема в том что у меня как то не было практики формирования группировок из ТЗ(
|
|||
32
Ёпрст
29.07.11
✎
11:44
|
(29) текст запроса покажи и то, что ты там потом в него добавил.
|
|||
33
aptomilov
29.07.11
✎
11:47
|
Текст = "//{{ЗАПРОС(ОтгрузкаТоваров)
|Период с ДатаНач" + ПериодПо + "; | |ОбрабатыватьДокументы Проведенные; |Обрабатывать НеПомеченныеНаУдаление; | |Статья = Документ.ПоступлениеДенежныхСредств.СатьяДДС, | Документ.ПоступлениеДенежныхСредствРасчеты.СатьяДДС, | Документ.ПриходныйОрдер.СатьяДДС, | Документ.ПриходныйОрдерРасчеты.СатьяДДС, | Документ.РасходныйОрдер.СатьяДДС, | Документ.РасходныйОрдерРасчеты.СатьяДДС, | Документ.СписаниеДенежныхСредств.СатьяДДС, | Документ.СписаниеДенежныхСредствРасчеты.СатьяДДС; |ДокОсн = Документ.ПоступлениеДенежныхСредств.ДокументОснование, | Документ.ПоступлениеДенежныхСредствРасчеты.ДокументОснование, | Документ.ПриходныйОрдер.ДокументОснование, | Документ.ПриходныйОрдерРасчеты.ДокументОснование, | Документ.РасходныйОрдер.ДокументОснование, | Документ.РасходныйОрдерРасчеты.ДокументОснование, | Документ.СписаниеДенежныхСредств.ДокументОснование, | Документ.СписаниеДенежныхСредствРасчеты.ДокументОснование; | |корсчет = Документ.ПоступлениеДенежныхСредств.КоррСчет.код, | Документ.СписаниеДенежныхСредств.КоррСчет.код, | Документ.ПриходныйОрдер.КоррСчет.код, | Документ.РасходныйОрдер.КоррСчет.код; |ПриходН = Документ.ПриходныйОрдер.Сумма, | Документ.ПриходныйОрдерРасчеты.Сумма; |ПриходБ = Документ.ПоступлениеДенежныхСредств.Сумма, | Документ.ПоступлениеДенежныхСредствРасчеты.Сумма; |РасходН = Документ.РасходныйОрдер.Сумма, | Документ.РасходныйОрдерРасчеты.Сумма; |РасходБ = Документ.СписаниеДенежныхСредств.Сумма, | Документ.СписаниеДенежныхСредствРасчеты.Сумма; |Функция СумПриходН = Сумма(ПриходН); | |Функция СумРасходН = Сумма(РасходН); | |Функция СумРасходВнН = Сумма(ПриходН) когда (сокрЛП(корсчет) = сч51); | |Функция СумПриходВнН = Сумма(РасходН) когда (сокрЛП(корсчет) = сч51); | |Функция СумПриходБ = Сумма(ПриходБ); | |Функция СумРасходБ = Сумма(РасходБ); | |Функция СумРасходВнБ = Сумма(ПриходБ) когда (сокрЛП(корсчет) = сч51); | |Функция СумПриходВнБ = Сумма(РасходБ) когда (сокрЛП(корсчет) = сч51); | |Группировка Статья Упорядочить по Статья.код; |"; а добавил я потом в таблицу объект и контрагент из документа основания (докосн) |
|||
34
aptomilov
29.07.11
✎
11:53
|
Ёпрст3, твой вариант алгоритма работает)
|
|||
35
DCKiller
29.07.11
✎
12:04
|
(2) Блин, а ведь это то, что я недавно тоже искал :)
|
|||
36
aptomilov
29.07.11
✎
12:08
|
работает но не правильно((( , он суммы считает а потом группировку ставит
|
|||
37
aptomilov
29.07.11
✎
12:08
|
нашел рабочий алгоритм?
|
|||
38
aptomilov
29.07.11
✎
12:10
|
расстановка позиций верная и суммы правильно считает, только берет не там(, надо брать под группировкой а он над ней берет
|
|||
39
Сияющий Асинхраль
29.07.11
✎
12:11
|
Вот чудо то. К 34-му посту выяснил, что показанное в посте (14) работает. Ах-ренеть...
Даю еще варианты: 1) ВсегоСтрок = ТЗ.КоличествоСтрок(); ТЗ.НоваяКолонка("Уровень","Число",9,0); ТЗ.Заполнить(3,,,"Уровень"); Для Счетчик = 1 По ВсегоСтрок Цикл ТЗ.НоваяСтрока(); ТЗ.ОБъект = ТЗ.ПолучитьЗначение(Счетчик,"ОБъект"); ТЗ.Уровень = 1; ТЗ.НоваяСтрока(); ТЗ.Объект = ТЗ.ПолучитьЗначение(СЧетчик,"Объект"); ТЗ.Статья = ТЗ.ПолучитьЗначение(СЧетчик,"Статья"); ТЗ.Уровень = 2; КонецЦикла; ТЗ.Сортировать("ОБъект,Статья,Док,Уровень"); 2)ТЗ1 = СоздатьОбъект("ТаблицаЗначений"); ТЗ.Выгрузить(ТЗ1); ТЗ1.Свернуть("ОБъект,Статья","Сумма"); ТЗ2 = СоздатьОБъект("ТаблицаЗНачений"); ТЗ1.Выгрузить(ТЗ2); ТЗ2.Свернуть("ОБъект","СУмма"); ТЗ2.ВыбратьСтроки(); Пока ТЗ2.ПолучитьСтроку() = 1 Цикл // Здесь Сумма по объекту ТЗ1.ВыбратьСтроки(); Пока ТЗ1.ПолучитьСтроку() = 1 Цикл Если ТЗ2.Объект <> ТЗ1.ОБъект Тогда Продолжить КонецЕсли; // Здесь сумма по статье ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл Если (ТЗ.ОБъект <> ТЗ1.ОБъект) Или (ТЗ.Статья <> ТЗ.Статья) Тогда Продолжить КонецЕсли; // Здесь суммы по документам КонецЦикла; КонецЦикла; КонецЦикла; 3) Влом описывать, то что уже писал здесь: http://delorasoft.ru/index.php?option=com_content&task=view&id=10&Itemid=20 Ну и так далее. Вариант 2 один из самых тупых, поубивал бы авторов, но на этом варианте построены практически все отчеты в семерочном подрядчике строительства |
|||
40
smaharbA
29.07.11
✎
12:12
|
(27) именно, по ходу не только автор в цейтноте
|
|||
41
viktor_vv
29.07.11
✎
12:13
|
Все уже украдено до нас :).
В гугле вводишь "Свернуть ТЗ с подитогами по группировкам". |
|||
42
DCKiller
29.07.11
✎
12:13
|
(31) Почему в запросе нет объекта?
|
|||
43
Сияющий Асинхраль
29.07.11
✎
12:16
|
(+39) В варианте 1) забыл дописать строчки:
ТЗ.Сумма= ТЗ.ПолучитьЗначение(Счетчик,"Сумма"); Для обеих формируемых строчек... |
|||
44
Сияющий Асинхраль
29.07.11
✎
12:21
|
И кстати, если конфа на плане счетов, то пользовать такой запрос как (33) дурной тон :-) , это все надо было вытаскивать из бухгалтерского запроса по операциям...
|
|||
45
DCKiller
29.07.11
✎
12:23
|
(44) Не надо лучше такие страшные термины тут упоминать... :) а то автору еще плохо станет
|
|||
46
aptomilov
29.07.11
✎
12:29
|
Сияющий Асинхраль,если честно я не понял зачем мы впихиваем в основную таблицу уровни если мы их потом не используем
|
|||
47
Сияющий Асинхраль
29.07.11
✎
12:33
|
(46) Чтобы при распечатке ты мог отличить какой же ты уровень печатаешь - уровень объекта, уровень статьи или уровень документа...
|
|||
48
Сияющий Асинхраль
29.07.11
✎
12:34
|
+(47) Например выведя каждую из этих строчек отдельным цветом, чтобы красиво было...
|
|||
49
aptomilov
29.07.11
✎
12:35
|
непонятно как в первом варианте получать сумму по группировке(
|
|||
50
Сияющий Асинхраль
29.07.11
✎
12:38
|
+(47) Ну и попутно для правильной сортировки..
Перед сортировать должна быть еще одна строчка: ТЗ.Свернуть("ОБъект,Статья,ДОк,Уровень","Сумма"); После этого на первом уровне будут уже готовые суммы по объектам, на втором по статьям, а третий по документам, но они не изменятся... |
|||
51
Сияющий Асинхраль
29.07.11
✎
12:41
|
Итого полный первый вариант имеет вид:
ВсегоСтрок = ТЗ.КоличествоСтрок(); ТЗ.НоваяКолонка("Уровень","Число",9,0); ТЗ.Заполнить(3,,,"Уровень"); Для Счетчик = 1 По ВсегоСтрок Цикл ТЗ.НоваяСтрока(); ТЗ.ОБъект = ТЗ.ПолучитьЗначение(Счетчик,"ОБъект"); ТЗ.Сумма= ТЗ.ПолучитьЗначение(Счетчик,"Сумма"); ТЗ.Уровень = 1; ТЗ.НоваяСтрока(); ТЗ.Объект = ТЗ.ПолучитьЗначение(СЧетчик,"Объект"); ТЗ.Статья = ТЗ.ПолучитьЗначение(СЧетчик,"Статья"); ТЗ.Сумма= ТЗ.ПолучитьЗначение(Счетчик,"Сумма"); ТЗ.Уровень = 2; КонецЦикла; ТЗ.Свернуть("ОБъект,Статья,ДОк,Уровень","Сумма"); ТЗ.Сортировать("ОБъект,Статья,Док,Уровень"); |
|||
52
aptomilov
29.07.11
✎
12:56
|
второй вариант повторяет постоянно одни и те же документы(( будем пробовать первый
|
|||
53
Сияющий Асинхраль
29.07.11
✎
13:01
|
(52) Какие документы? Ты хоть немножко своих мозгов прикладывай к тому, что написано, а не только чужие юзай. Тебе уже вариантов до хрена написали ни над одним не задумался а как же это работает... Тебе сразу циферки готовые выдать надо?!
|
|||
54
Сияющий Асинхраль
29.07.11
✎
13:03
|
Во втором варианте опечатка была, которую мог бы и сам заметить:
Если (ТЗ.ОБъект <> ТЗ1.ОБъект) Или (ТЗ.Статья <> ТЗ1.Статья) Тогда Продолжить КонецЕсли; // Здесь суммы по документам КонецЦикла; |
|||
55
aptomilov
29.07.11
✎
13:04
|
Спасибо большое всем - будем разбираться.
Тебе Сияющий Асинхраль в особенности!! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |