|
v7: Отчет по продажам | ☑ | ||
---|---|---|---|---|
0
san4ez1008
27.01.17
✎
08:28
|
Добрый день. Ребят,помогите с выводом секции, чет бьюсь уже второй день.. Типовая конфигурация ТиС 9.2. Собственно код:
Для К = 1 по ТЗВспом.КоличествоСтрок() цикл Код = "( "+ТЗВспом.ПолучитьЗначение(К, "Код")+" )"; Номенклатура = ТЗВспом.ПолучитьЗначение(К, "Номенклатура"); Остаток = ТЗВспом.ПолучитьЗначение(К, "Остаток"); Сумма = ТЗВспом.ПолучитьЗначение(К, "Сумма"); Филиал = ТЗВспом.ПолучитьЗначение(К, "Филиал"); Если Номен <> Номенклатура тогда Если Сумма<>0 тогда Запас = Окр(Остаток/Сумма,4); Иначе Запас = 0; КонецЕсли; Номен = Номенклатура; Для с = 1 по ТЗ1.КоличествоСтрок() цикл Товар = ТЗ1.получитьЗначение(с, "Номенклатура"); СумОст= ТЗ1.ПолучитьЗначение(с, "Остаток"); СумСум= ТЗ1.ПолучитьЗначение(с, "Сумма"); Если СумСум<>0 тогда СумЗапас = окр(СумОст/СумСум,2); Иначе СумЗапас = 0; КонецЕсли; если К>1 тогда если товар=номенклатура тогда Таб.ПрисоединитьСекцию("Строка|Прав"); КонецЕсли; конецесли; КонецЦикла; Таб.ВывестиСекцию("Строка|Лев"); Если сокр = 0 тогда Таб.ПрисоединитьСекцию("Строка|Сред"); КонецЕсли; иначе Если Сумма<>0 тогда Запас = Окр(Остаток/Сумма,4); Иначе Запас = 0; КонецЕсли; Если Сокр = 0 тогда Таб.ПрисоединитьСекцию("Строка|Сред"); КонецЕсли; КонецЕсли; КонецЦикла; пробегаясь по ТЗВспом вывожу основные данные. Перед тем,как меняется номенклатура, нужно вывести секцию строка|прав и вывести суммарные данные из ТЗ1. Вроде бы и все в порядке, но первая строка из ТЗ1 не выводится,теряется,и естественно, в конце не хватает данных.. Что добавить надо в код, чтобы вывод строк был корректным? |
|||
1
HawkEye
27.01.17
✎
09:12
|
(0) у тебя написано
если товар=номенклатура тогда Таб.ПрисоединитьСекцию("Строка|Прав"); КонецЕсли; но нигде не написано что такое Товар... т.е. либо это не весь код, либо условие никогда не выполняется.... |
|||
2
san4ez1008
27.01.17
✎
09:14
|
(1) Товар = ТЗ1.получитьЗначение(с, "Номенклатура");
|
|||
3
HawkEye
27.01.17
✎
09:16
|
(2) ага нашел... так-то, мне кажется отладчик - даст ответ на твой вопрос...
Если Номен <> Номенклатура тогда //тут номен не равен Номенклатуре, т.е. у тебя все перешло к следущей, в номен - у тебя предыдущая, в номенклатуре - следующая... в "Строка|Прав" - ты хочешь вывести инфу о предыдущей... так? |
|||
4
san4ez1008
27.01.17
✎
09:33
|
сейчас у меня данные в строка|прав выводятся таким образом, что первая строка из ТЗ1 выводится еще в шапке, потому что я сначала присоединил строка|прав, а затем вывел строка|лев. Мне же нужно, чтобы это было наоборот, но тогда в этом случае будет строка|лев строка|сред строка|прав строка|сред строка|прав....
а надо строка|лев строка|сред строка|сред строка|сред строка|сред строка|прав строка|прав |
|||
5
HawkEye
27.01.17
✎
09:44
|
(4) в Номен у тебя "товар А", в Номенклатуре "ТОвар Б".
условие Если Номен <> Номенклатура тогда - выполнилось. Номен = Номенклатура; - теперь у тебя и в Номен и в Номенклатуре - "Товар Б" Для с = 1 по ТЗ1.КоличествоСтрок() цикл Товар = ТЗ1.получитьЗначение(с, "Номенклатура"); если К>1 тогда если товар=номенклатура тогда //почему ты сравниваешь ТОвар с "Товаром Б", если тебе надо вывести секцию для "Товара А"? Таб.ПрисоединитьСекцию("Строка|Прав"); КонецЕсли; конецесли; КонецЦикла; |
|||
6
Это_mike
27.01.17
✎
09:50
|
за что банят в отладчике?
|
|||
7
san4ez1008
27.01.17
✎
09:50
|
(5) изначально номен="";
если номен<>номенклатура(товар А) (истина) номен=номенклатура (товар А) Для с = 1 по ТЗ1.КоличествоСтрок() цикл Товар = ТЗ1.получитьЗначение(с, "Номенклатура"); (тоже товар А) если товар=номенклатура (истина) тогда Таб.ПрисоединитьСекцию("Строка|Прав"); |
|||
8
san4ez1008
27.01.17
✎
10:02
|
и получается такая штука, что он секцию "Строка|Прав" присоединяет до того, как дойдет до вывода секции "Строка|Лев", то есть присоединяет ее в шапке...
|
|||
9
ТакВотЖе
27.01.17
✎
10:12
|
обработку кинь на почту, посмотрю
|
|||
10
san4ez1008
27.01.17
✎
10:22
|
(9) кинул
|
|||
11
san4ez1008
27.01.17
✎
10:28
|
Ёпрст, есть мысли?
|
|||
12
Ёпрст
27.01.17
✎
10:34
|
(11) есть. Всё в топку
|
|||
13
Ёпрст
27.01.17
✎
10:34
|
Особенно радует вложенный бестолковый цикл по ТЗ1
|
|||
14
ТакВотЖе
27.01.17
✎
10:34
|
(12) 100 баллов )))
|
|||
15
san4ez1008
27.01.17
✎
10:38
|
(13) я по-другому не умею...
|
|||
16
Ёпрст
27.01.17
✎
10:42
|
кинь своё изделие на [email protected]
|
|||
17
san4ez1008
27.01.17
✎
10:52
|
(16) кинул...
|
|||
18
Ёпрст
27.01.17
✎
11:07
|
(17) ну смотри, начнём с начала:
Запросы в цикле не есть гуд, ну да ладно. Ты в цикле всё время делаешь ТЗВспом.Выгрузить(ТЗ1); тем самым, у тебя в ТЗ1 - всегда, только последний выгруженный запрос по циклу таблички периодов. Что не верно. Нужно для первой итерации выгружать, для следующих - Заполнить(). |
|||
19
ТакВотЖе
27.01.17
✎
11:08
|
строка 200 нужно
если товар=номен тогда |
|||
20
ТакВотЖе
27.01.17
✎
11:09
|
код просто жесть)
|
|||
21
Ёпрст
27.01.17
✎
11:10
|
вот эти строки ТЗВспом.Выгрузить(ТЗ1);
вынеси ЗА цикл. Потом, заполнение ТЗ на форме - это тормоз. Если так хочешь ЭТО показывать, то заполняй в коде другую табличку, потом уже целиком делай Выгрузить в тз на форме |
|||
22
san4ez1008
27.01.17
✎
11:12
|
(19) да,вывел с первой позиции в ТЗ1, теперь в конце по последней строке в ТЗВспом не хватает данных...
(21)заполнения ТЗ на форме не будет, это я пока что для себя сделал, чтобы видеть,правильно ли все выводится |
|||
23
Ёпрст
27.01.17
✎
11:32
|
(22) ты не выводишь последнюю номенклатуру
|
|||
24
Ёпрст
27.01.17
✎
11:37
|
т.е вот эта вот вся хрень
Если Номен <> Номенклатура тогда если К=1 тогда иначе Для с = 1 по ТЗ1.КоличествоСтрок() цикл Товар = ТЗ1.получитьЗначение(с, "Номенклатура"); СумОст= ТЗ1.ПолучитьЗ у тебя должна стоять еще за циклом |
|||
25
Это_mike
27.01.17
✎
11:41
|
(24) репетитор по информатике? :-)
|
|||
26
san4ez1008
27.01.17
✎
11:42
|
(24) и это вывело только для одного периода...
|
|||
27
san4ez1008
27.01.17
✎
13:03
|
как доделать то? у меня уже мозг вскипает((
|
|||
28
Ёпрст
27.01.17
✎
13:06
|
(27) всё переписать :)
|
|||
29
san4ez1008
27.01.17
✎
13:10
|
(28) не..надо добить...подскажи,как(( (24) не помогло(
|
|||
30
Это_mike
27.01.17
✎
13:12
|
+(28) сделать с нуля, и сделать сразу правильно.
|
|||
31
san4ez1008
27.01.17
✎
13:16
|
(30) делаю как могу..
что надо после цикла добавить, чтобы вывести последние значения? |
|||
32
san4ez1008
27.01.17
✎
13:31
|
как обычно,самые умные поржали и ушли..
|
|||
33
zgarick
27.01.17
✎
13:34
|
кинь на мыло [email protected]
|
|||
34
Ёпрст
27.01.17
✎
13:36
|
(31) ну смотри, ты в цикле сравниваешь с переменной, что если она не равна текущей номенклатуре, то выводим из тз1 всяку каку и присоединяем секции.
Цикл закончился, следовательно, нужно вывести последнюю номенклатуру, ибо переменная же не изменилась. Фирштейн ? |
|||
35
Ёпрст
27.01.17
✎
13:37
|
А вообще, открой для себя индексированную ТЗ, там и группировки есть и вывод проще.
|
|||
36
san4ez1008
27.01.17
✎
13:52
|
(34) фирштейн,все сделал,спасибо
|
|||
37
san4ez1008
27.01.17
✎
13:53
|
а,и еще вопрос сразу... наверху у меня выводятся названия филиалов, как сделать так, чтобы они объединилсь?
|
|||
38
san4ez1008
27.01.17
✎
13:58
|
то есть не так,как сейчас,а вот так
филиал1 филиал2 филиал3 с....по с....по с....по с....по с....по с....по |
|||
39
Это_mike
27.01.17
✎
14:05
|
(38) (37) видимо, объединять после вывода...
|
|||
40
Ёпрст
27.01.17
✎
14:06
|
(38) через Объединить()
|
|||
41
Ёпрст
27.01.17
✎
14:07
|
Ибо через "По выделенным колонкам" не подойдёт, так тебе вообще один общий заголовок слепит
|
|||
42
Ёпрст
27.01.17
✎
14:24
|
На вот, играйся
Если Сокр = 0 тогда Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Таблица"); //Таб.ВывестиСекцию("Заголовок"); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Таб.ВывестиСекцию("Шапка1|Лев"); //Таб.ВывестиСекцию("Шапка2|Лев"); Таб.ВывестиСекцию("Шапка|Лев"); Если (ВыбРубли=1) и (ВыбШТ=0) ТОгда зн = "руб."; ИначеЕсли (ВыбРубли=0) и (ВыбШТ=1) тогда зн = "шт."; КонецЕсли; // стр=""; Высота = Таб.ВысотаТаблицы()-3; ТекСтрокаВТаблице = ТаблицаМФ.ТекущаяСтрока(2); Для н=1 по СписокЭлементовМФ.РазмерСписка() цикл ТТ = СписокЭлементовМФ.ПолучитьЗначение(н,стр); Начало = Таб.ШиринаТаблицы()+1; //Таб.ПрисоединитьСекцию("Шапка2|Сред"); Для к=1 По КолПериодов Цикл НачДата = ТЗПериод.ПолучитьЗначение(к,"Период_С"); КонДата = ТЗПериод.ПолучитьЗначение(к,"Период_По"); Периодтек = "С "+НачДата+" по "+КонДата; Таб.ПрисоединитьСекцию("Шапка|Сред"); КонецЦикла; Таб.Область(Высота,Начало,Высота,Таб.ШиринаТаблицы()).Объединить(); КонецЦикла; Для к=1 По КолПериодов Цикл НачДата = ТЗПериод.ПолучитьЗначение(к,"Период_С"); КонДата = ТЗПериод.ПолучитьЗначение(к,"Период_По"); Периодтек = "С "+НачДата+" по "+КонДата; Таб.ПрисоединитьСекцию("Шапка|Прав"); КонецЦикла; иначе Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Таблица"); //Таб.ВывестиСекцию("Заголовок"); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Таб.ВывестиСекцию("Шапка1"); //Таб.ВывестиСекцию("Шапка2|Лев"); Таб.ВывестиСекцию("Шапка|Лев"); Если (ВыбРубли=1) и (ВыбШТ=0) ТОгда зн = "руб."; ИначеЕсли (ВыбРубли=0) и (ВыбШТ=1) тогда зн = "шт."; КонецЕсли; Для к=1 По КолПериодов Цикл НачДата = ТЗПериод.ПолучитьЗначение(к,"Период_С"); КонДата = ТЗПериод.ПолучитьЗначение(к,"Период_По"); Периодтек = "С "+НачДата+" по "+КонДата; Таб.ПрисоединитьСекцию("Шапка|Прав"); КонецЦикла; КонецЕсли; |
|||
43
san4ez1008
07.02.17
✎
04:36
|
(42) чет мучался,мучался-нифига не получилось..
это,тут другой вопрос, при выборе периода,например, с 15.01 по 15.02 начинаются какие-то глюки с выводом данных, подозреваю, что остатки считаются на конец месяца 31.01 и на 15.02.. Подскажите, каким методом воспользоваться, чтобы остатки выводились именно на последнюю дату,а не за 2 разные ? |
|||
44
san4ez1008
07.02.17
✎
05:44
|
А,текст запроса...
Если (ВыбРубли=0) и (ВыбШТ=1) ТОгда зн = "шт."; //Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с НачДата по КонДата; |Обрабатывать НеПомеченныеНаУдаление; |Без итогов; |ТекущийДокумент = Документ.ОтчетККМ.ТекущийДокумент; |Филиал = Документ.ОтчетККМ.Склад, Регистр.ОстаткиТМЦ.Склад; |Номенклатура = Документ.ОтчетККМ.Номенклатура,Регистр.ОстаткиТМЦ.Номенклатура; |Остаток = Регистр.ОстаткиТМЦ.Количество; |Сумма = Документ.ОтчетККМ.Количество; |Скидка = Документ.ОтчетККМ.Скидка; |Функция КоличествоКонОст = КонОст(Остаток); |Функция КоличествоСумма = Сумма(Сумма); |Группировка Номенклатура без групп все; |Группировка Филиал все ; |Группировка Месяц; |"//}}ЗАПРОС ; Загол=""; глПриСменеСтрокиТаблицыМФ(1,ТекСтрокаВТаблице,Контекст); // записываем изменения если они были глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Номенклатура",ВыбТМЦ,"ВыбТМЦ",ТекстЗапроса,Загол,"СвойстваНоменклатуры"); глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Филиал",ВыбСклад,"ВыбСклад",ТекстЗапроса,Загол,"СвойстваСкладов"); // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; |
|||
45
Это_mike
07.02.17
✎
07:23
|
(44) у тебя группировка - месяц.
|
|||
46
san4ez1008
07.02.17
✎
08:32
|
(45) ёп..
|
|||
47
Это_mike
07.02.17
✎
08:36
|
||||
48
san4ez1008
07.02.17
✎
08:43
|
(47) ты не зае..мучался рисовать?...
|
|||
49
Это_mike
07.02.17
✎
08:44
|
(48) оно само строит в любом нужном разрезе...
|
|||
50
san4ez1008
07.02.17
✎
08:50
|
и еще вопрос, в коде есть вывод шапки (где я пытался объединить ячейки), если во вкладке МФ не поставлю курсор на строку "По складам", в шапке будет выводиться номенклатура, в коде явно указываю
ТаблицаМФ.ПолучитьСтрокуПоНомеру(2) но ему как-то по-барабану... ТаблицаМФ.ПолучитьСтрокуПоНомеру(2); Для н=1 по СписокЭлементовМФ.РазмерСписка() цикл ТТ = СписокЭлементовМФ.ПолучитьЗначение(н,стр); Начало = Таб.ШиринаТаблицы()+1; //Таб.ПрисоединитьСекцию("Шапка2|Сред"); Для к=1 По КолПериодов Цикл НачДата = ТЗПериод.ПолучитьЗначение(к,"Период_С"); КонДата = ТЗПериод.ПолучитьЗначение(к,"Период_По"); Периодтек = "С "+НачДата+" по "+КонДата; Таб.ПрисоединитьСекцию("Шапка|Сред"); КонецЦикла; |
|||
51
san4ez1008
08.02.17
✎
02:12
|
ап
|
|||
52
Злопчинский
08.02.17
✎
02:19
|
(21) > Потом, заполнение ТЗ на форме - это тормоз.
для существенного ускорения - на порядок как минимум Форма.ТЗ.Видимость(0); //код по заполнению ТЗ Форма.ТЗ.Видимость(1); |
|||
53
san4ez1008
08.02.17
✎
02:22
|
(52) я на форму не вывожу ТЗ,это я для проверки выводил
сейчас разбираюсь с (50) |
|||
54
Злопчинский
08.02.17
✎
02:23
|
(51) во всю тему не вткал. но для начала сдела йпросто.
заполни ПЛОСКУЮ ТЗ нужными тебе данными. дальше ТЗ подсунь в НотаБене http://catalog.mista.ru/public/14794/ - она тебе и группировки выведет всякие и шахматку хоть по периодам хоть по чему построит, например http://catalog.mista.ru/public/14381/ |
|||
55
Злопчинский
08.02.17
✎
02:23
|
(53) пофиг, совет - пригодится.
|
|||
56
Злопчинский
08.02.17
✎
02:24
|
(53) покажи прототип готовой таблицы (хоть в экселе нарисованный) который ты желаешь увидеть
|
|||
57
Злопчинский
08.02.17
✎
02:24
|
только быстро, быстро!
|
|||
58
Злопчинский
08.02.17
✎
02:28
|
"..зачем изобретать вечный двигатель, достаточно устранить вечный тормоз!..."
ушел спать |
|||
59
san4ez1008
08.02.17
✎
02:30
|
http://radikal.ru][img]http://s019.radikal.ru/i638/1702/9b/05a23d03b252.jpg
вот так хочу,но не могу объединить ячейки,где ТТ1 и ТТ2 и еще не получается (50) |
|||
60
san4ez1008
08.02.17
✎
02:34
|
если во МФ не поставлю курсор на строку "По складам", тогда в шапке будет выводиться номенклатура вместо названия ТТ. Указываю ему перед циклом заполнения шапки ТаблицаМФ.ПолучитьСтрокуПоНомеру(2);
и ему как-то все равно... ПолучитьСтрокуПоНомеру(<?>); Синтаксис: ПолучитьСтрокуПоНомеру(<НомерСтроки>) Назначение: Получить строку таблицы значений по номеру. Указанная строка становится текущей. |
|||
61
Злопчинский
08.02.17
✎
02:37
|
не, такого нотабеней не получиттся.
с точки зреняи вывести порстыню - можно такой отчет нарисовать. для удобного практического применения - не пригоден. двоные группировки по вертикали - жпс. периоды проще сравнивать когда они один под другим. поэтому периоды вынести в строки, ТТ вынести в столбцы - отчет будет подлинее - но легко читабельный и сравниваемый по точкам и периодам. да и реализуется ноотабеней без программинга |
|||
62
Злопчинский
08.02.17
✎
02:38
|
вдобавок такой отчет на раз сворачивается ЙОКСЕЛЕМ - тоже без программирования (кнопкой на панели) в экселеподобнгый вид с плсюсиками разворота по строкам.
|
|||
63
Злопчинский
08.02.17
✎
02:39
|
вдобавок та же самя нотабеня автоматом поддерживает расшифровку какой-нить общей суммы (когда схлопнуто измерение вывода)
|
|||
64
san4ez1008
08.02.17
✎
02:39
|
(62) так не я ж придумал такой отчет,девки попросили именно в таком виде..)
|
|||
65
Злопчинский
08.02.17
✎
02:40
|
так что сдела йпростую плоскую таблицу
товар, описательпериода, описательскладаточки, числовойпокатаель1, числовойпоказатель2... и подсунь в нотабеню. |
|||
66
Злопчинский
08.02.17
✎
02:42
|
(64) девки в большинстве своем тупые. в части того, что пока не увидят как правильно - сами не смогут представить - ибо мяслят шаблонами. программеру шаблоны в части мышления вредны. поэтому ПЕРВЫМ шагом - сделай как сказал. дай им поиграться. пока будут играться - не спеша нпишешь мегакарсивый вывод ненужнйо никому простыни.
хотя фигли я учу. если кодер - то рисуй по шаблонам что девки дали. вывести такую прсотыню - больше времени займет программирование вывода, чем какая-то полезная работа. |
|||
67
san4ez1008
08.02.17
✎
02:44
|
(66) да понимаю, реально больше мучался с выводом данных, только я с 1С знаком всего полгода, а понимание языка дается туго( вот и учусь на таких простынях...попробую поиграться с нотабеней,посмотрим,что получится,спасибо за помощь
а по поводу (60) не подскажете? |
|||
68
Злопчинский
08.02.17
✎
02:45
|
подсказка:
выводи тупо построчно-постолбиково. потом, после вывода таблицы - зная что выведено и сколько выведено - можно объединить нуные столбцы-ячейки итп. поэтому когда выведешь ЭН периодов по столбикам - станут ищзвестны диапазоны ячеек для объединения заголовка таблицы по токчам |
|||
69
Злопчинский
08.02.17
✎
02:46
|
(67) по (60)_ - не, не подскажу. сложного там ничего нет, но влазить в 60 постов чтобы разобраться что к чему - мну влом.
|
|||
70
san4ez1008
08.02.17
✎
02:50
|
(69) ок...спасибо большое за помощь
|
|||
71
Злопчинский
08.02.17
✎
02:51
|
если делать тупо и быстро
группировка товар-точка-период группировка товар вывел строка-столбец товар. обнулил накопитель группировка точка группировка период вывел период просуммировал текущий период в накопитель конец группировка период конецгруппировка точка цикл по периодам (размерност накопителя) присоединил итог по периоду конеццикла; конецгруппировка товар |
|||
72
Злопчинский
08.02.17
✎
12:04
|
ну, заборол?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |