|
OFF: шедевр от франча | ☑ | ||
---|---|---|---|---|
0
Skom
12.05.14
✎
11:42
|
так просто, поржать
Процедура ОтчетПоТаре(ТабДок, НачПериода, КонПериода) Экспорт НачПериодаГраница = НачалоДня(НачПериода); КонПериодаГраница = КонецДня(КонПериода); ТЗ = Новый ТаблицаЗначений; тз.Колонки.Добавить("Склад"); тз.Колонки.Добавить("Услуга"); тз.Колонки.Добавить("Кол"); тз.Колонки.Добавить("Сумма"); тз.Колонки.Добавить("НДС"); тз.Колонки.Добавить("СуммаВсего"); КоличествоО = 0; СуммаО = 0; НДСО = 0; ВсегоО = 0; ВсегоОПров = 0; Макет = ПолучитьМакет("Макет"); Секция = Макет.ПолучитьОбласть("Заголовок"); Секция.Параметры.ЗаголовокМакета="Отчет по Товарам за период с "+Формат(НачПериода,"ДФ=dd.MM.yyyy")+" по "+Формат(КонПериода,"ДФ=dd.MM.yyyy"); ТабДок.Вывести(Секция); ДокВыбР = Документы.ОтчетОРозничныхПродажах.Выбрать(НачПериодаГраница, КонПериодаГраница); пока ДокВыбР.Следующий() цикл если ДокВыбР.Проведен тогда иначе Продолжить; КонецЕсли; для Каждого ДокРСтрока из ДокВыбР.Товары цикл стрТЗ = тз.Добавить(); стртз.Склад = СокрЛП(ДокВыбР.Склад); стртз.Услуга = СокрЛП(ДокРСтрока.Номенклатура); стртз.Кол = ДокРСтрока.количество; Если ДокВыбР.СуммаВключаетНДС тогда стртз.Сумма = ДокРСтрока.Сумма-ДокРСтрока.СуммаНДС; стртз.НДС = ДокРСтрока.СуммаНДС; стртз.СуммаВсего = ДокРСтрока.Сумма; Иначе стртз.Сумма = ДокРСтрока.Сумма; стртз.НДС = ДокРСтрока.СуммаНДС; стртз.СуммаВсего = ДокРСтрока.Сумма+ДокРСтрока.СуммаНДС; КонецЕсли; КонецЦикла; КонецЦикла; //тз.ВыбратьСтроку(); тз.Свернуть("Склад,Услуга","Кол,сумма,ндс,СуммаВсего"); Для каждого ТекСтрока из ТЗ цикл Секция = Макет.ПолучитьОбласть("Строка"); Секция.Параметры.Склад = ТекСтрока.Склад; Секция.Параметры.Наименование = ТекСтрока.Услуга; Секция.Параметры.Количество = ТекСтрока.Кол; Секция.Параметры.Сумма = ТекСтрока.Сумма; Секция.Параметры.НДС = ТекСтрока.Ндс; Секция.Параметры.Всего = ТекСтрока.Ндс+ТекСтрока.Сумма; Секция.Параметры.ВсегоПров = ТекСтрока.СуммаВсего; КоличествоО = КоличествоО+ТекСтрока.Кол; СуммаО = СуммаО+ТекСтрока.Сумма; НДСО = НДСО+ТекСтрока.Ндс; ВсегоО = ВсегоО+ТекСтрока.Ндс+ТекСтрока.Сумма; ВсегоОПров = ВсегоОПров+ТекСтрока.СуммаВсего; ТабДок.Вывести(Секция); КонецЦикла; Секция = Макет.ПолучитьОбласть("Подвал"); Секция.Параметры.КоличествоО = КоличествоО; Секция.Параметры.СуммаО = СуммаО; Секция.Параметры.НДСО = НДСО; Секция.Параметры.ВсегоО = ВсегоО; Секция.Параметры.ВсегоОПров = ВсегоОПров; ТабДок.Вывести(Секция); КонецПроцедуры |
|||
122
Skom
13.05.14
✎
06:20
|
Уважаемые психологи, а вы знаете, что все, что вы пишите, это лишь проекция ваших психических процессов на ситуацию. Так что, кто тут неуверен в себю, я бы поспорил!
|
|||
123
Skom
13.05.14
✎
06:21
|
*в себе
|
|||
124
mishaPH
модератор
13.05.14
✎
06:22
|
у меня 2 вопроса к автору
1. код работает? 2. Код который предложишь ты будет работать быстрее? если ответ 1.да, 2.Нет - убейся о стену. ;) |
|||
125
Pahomich
13.05.14
✎
06:54
|
Азы прикладного программирования: 1. Работает - не трожь!; 2. Лучшее - враг хорошего;......N.....N+n. Лень - двигатель прогресса!
|
|||
126
Lexik
13.05.14
✎
08:04
|
(124) +100500
|
|||
127
NcSteel
13.05.14
✎
09:09
|
(0) Есть большая вероятность что код написал ты.
|
|||
128
mdocs
13.05.14
✎
09:24
|
честно е нравится только СокрЛП() в колонках, в остальном нормальный семерошный код.
|
|||
129
Aleksey
13.05.14
✎
09:37
|
Смешно когда жертвы маркетинга рассказывают о том что код написан эстетически не красиво.
Завтра 1С объявит оператор "если" - прошлым веком и все будут с пеной у рта доказывать, что если в коде есть этот оператор то это овно код, потому что 1С так сказало? И будут писать 200 строк кода в том месте где можно просто написать "если..." |
|||
130
Aleksey
13.05.14
✎
09:38
|
(128) Неявное преобразование в строку + удаления лишних пробелов
|
|||
131
APXi
13.05.14
✎
10:41
|
(0) Интересно, а автор сам всегда начинает писать как спец, даже если не знает языка?
|
|||
132
StanLee
13.05.14
✎
11:02
|
я недавно такуууую конструкцию кода нарисовал, сюда однозначно было бы стыдно выкладывать, но оно работает и менять ничо не буду :) камент там только напишу для потомков, что "// прости меня дуру грешную, индусский код написал. пьян был" :)
|
|||
133
timurhv
13.05.14
✎
11:07
|
(128) Человек правильно написал - СокрЛП() заметно отразится на производительности при выводе областей в лучшую сторону :)
|
|||
134
х86
13.05.14
✎
12:54
|
(0)запрос в цикле?
на кол |
|||
135
ИС-2
naïve
13.05.14
✎
13:40
|
думаю это писал 1 человек:
Для каждого СтрокаТовары из Товары цикл лАдрес = ПолучитьАдресНоменклатуры(СтрокаТовары.Номенклатура, СтрокаТовары.Склад); ПечСклад=СтрокаТовары.Номенклатура.Склад.Наименование; Если ПечСклад="1 склад" тогда СтрокаТаб=ТЗ1.Добавить(); СтрокаТаб.НомерСтроки=ТЗ1.Количество(); СтрокаТаб.адрес=СокрЛП(лАдрес); СтрокаТаб.товар=СтрокаТовары.Номенклатура.Ссылка; СтрокаТаб.коэффициент=СтрокаТовары.Коэффициент; Строкатаб.количество=СтрокаТовары.Количество; Строкатаб.Сумма=СтрокаТовары.Сумма; Строкатаб.СуммаНДС=СтрокаТовары.СуммаНДС; ИначеЕсли ПечСклад="2 склад" тогда СтрокаТаб=ТЗ2.Добавить(); СтрокаТаб.НомерСтроки=ТЗ2.Количество(); СтрокаТаб.адрес=СокрЛП(лАдрес); СтрокаТаб.товар=СтрокаТовары.Номенклатура.Ссылка; СтрокаТаб.коэффициент=СтрокаТовары.Коэффициент; Строкатаб.количество=СтрокаТовары.Количество; Строкатаб.Сумма=СтрокаТовары.Сумма; .... |
|||
136
Skom
13.05.14
✎
13:41
|
(127) Ты худшая Ванга этой ветки :-)
|
|||
137
Aleksey
13.05.14
✎
13:52
|
(134) ээ а где там запрос? или не читал, но осуждаю?
|
|||
138
SanGvin
13.05.14
✎
13:59
|
(0) зато, какой-то Вася Пупкин благодаря Вам делает первые шаги в 8.х
|
|||
139
х86
13.05.14
✎
14:03
|
(137)неявные
|
|||
140
Мебиус
13.05.14
✎
14:04
|
(0)
!!!!! млять........ и за это платят деньги за это убивать надо на месте морально |
|||
141
Skom
13.05.14
✎
14:09
|
(140) 20 тыс абонентка в месяц. за 3 месяца были консультации пользователей + 2 вот таких как в (0) отчета. и все))))
они черти релиз даже не обновили до актуального за это время. |
|||
142
Мебиус
13.05.14
✎
14:18
|
(141)
Се ля ви Позвоните директору франча, а не поможет - ищите другого подрядчика. Благо конкуренция на рынке стандартных конфигураций высокая. Если конечно не регион, но и там удаленка вас спасет. |
|||
143
Skom
13.05.14
✎
14:23
|
(142) На аутсорсе наше подразделение в соседнем регионе было до моего прихода на работу в эту компанию. Сейчас наш отдел их обслуживает.
|
|||
144
Галахад
гуру
13.05.14
✎
14:30
|
(141) Ну вот. Это гораздо меньше чем твоя зарплата.
Т.е. они еще и экономили :-) |
|||
145
Поpyчик-4
13.05.14
✎
15:21
|
(140) Да, за ЭТО платят деньги, ибо конечному потребителю пое..плевать, что внутри, главное, чтобы правильно считало.
|
|||
146
Sasha_1CK
13.05.14
✎
15:24
|
(145) А кто-нибудь может внятно обяснить, чем запрос к документу лучше перебора документов?
|
|||
147
Поpyчик-4
13.05.14
✎
15:27
|
(146) Хотя бы потому что, удобнее получить нужную выборку сразу и в цикле сразу заполнять параметры в макете для вывода.
Про СКД уже говорил. |
|||
148
х86
13.05.14
✎
15:27
|
(146)всё дело в производительности
|
|||
149
Поpyчик-4
13.05.14
✎
15:28
|
(146) Клюшечнику со стажем всё равно сразу не понять.
|
|||
150
ДенисЧ
13.05.14
✎
15:31
|
(149) Я прекрасно понимаю. Причём (вы будете смеяться) у меня и в 77 запросы нормально работали...
|
|||
151
Галахад
гуру
13.05.14
✎
15:33
|
(146) 1. Дергаем всю информацию сразу и только ту, что нужно.
2. Лезем в базу при каждом получении ссылки. |
|||
152
kanat
13.05.14
✎
15:41
|
(55) а у меня работодатель СКД не жалует...типа чего там делать, так и я смогу....
|
|||
153
Поpyчик-4
13.05.14
✎
15:46
|
(152) Хреновый работодатель. У нас СКД одно из первых, про что спрашиваем при приёме на работу.
|
|||
154
Sasha_1CK
13.05.14
✎
15:46
|
(147) "удобнее" не аргумент.
первые 1-2 месяца переучивания с клюшек - удобнее делать перебор документов - пока не доведешь до нужного уровня навыки работы с конструктором запросов и не запомнишь основные приемы работы с запросом. Вопрос именно в "лучше" в контексте приведенного отчета. Никаких дополнительных отборов в отчете не используется Что касается заполнения макета - то макет.параметры.Заполнить(Строка); работает одинаково что для строки ТЗ, что для выборки запроса. То, что эта конструкция не использована - лишь лишний раз подтверждает, что автор кода махровый клюшечник. Но отнюдь не делает код шедевром безграмотности. (151) Я не вижу отборов, а так же серверных директив - поэтому в данном контексте ни 1) ни 2) каких то особых преимуществ не дают. поэтому повторяю вопрос - в чем в данном конкретном отчете выразиться преимущество запроса к документу по сравнению с перебором. |
|||
155
ОбычныйЧеловек
13.05.14
✎
15:47
|
(142) Деньги платят не за код а за работающую обработку (которая делает то, что нужно пользователю)... А асли (0) хочет, что бы код радовал его глаз - ну пусть заплатит франчу - уверен франч напишет именно такую (красивую) обработку.
|
|||
156
RomarioAgro
13.05.14
✎
15:50
|
(151) а если мы заранее не знаем сколько нужно? т.е. нужно будет брать по максимуму, т.е. полбазы в запрос?
|
|||
157
ДенисЧ
13.05.14
✎
15:53
|
(156) А голова у тебя дана не только, чтобы в неё есть...
|
|||
158
Галахад
гуру
13.05.14
✎
15:53
|
(154) Еще раз. Один раз - много раз.
(156) Не знаем чего надо получить? Это как? |
|||
159
RomarioAgro
13.05.14
✎
15:53
|
+(156) в определенных ситуациях не факт что запрос будет быстрее выборки
|
|||
160
ДенисЧ
13.05.14
✎
15:54
|
(159) А. Тогда извиняюсь. Действительно - только есть...
|
|||
161
КонецЦикла
13.05.14
✎
15:57
|
Раньше меня такое злило, теперь на этом можно заработать (если попросят). Иначе пропускаю.
ЗЫ. Автор, или работать сцуко |
|||
162
RomarioAgro
13.05.14
✎
15:57
|
(160) и как мне теперь дальше жить после твоей строгой оценки о мудрейший из людей))
|
|||
163
ДенисЧ
13.05.14
✎
15:58
|
(162) Есть ты можешь, так что с голоду не помрёшь :-)
|
|||
164
Галахад
гуру
13.05.14
✎
15:59
|
Иногда, лучше жевать :)
|
|||
165
х86
13.05.14
✎
15:59
|
(154)...
пока ДокВыбР.Следующий() цикл если ДокВыбР.Проведен тогда иначе Продолжить; КонецЕсли; для Каждого ДокРСтрока из ДокВыбР.Товары цикл стрТЗ = тз.Добавить(); стртз.Склад = СокрЛП(ДокВыбР.Склад); стртз.Услуга = СокрЛП(ДокРСтрока.Номенклатура); ... п1.вот ты как думаешь при выборке документа таб часть Товары тоже участвует в выборке? п2. посмотри как отработает вот эта вот конструкция СокрЛП(ДокРСтрока.Номенклатура) |
|||
166
RomarioAgro
13.05.14
✎
16:00
|
(163) ну ты то теперь полюбому на месяц дольше проживешь))
|
|||
167
DexterMorgan
13.05.14
✎
16:15
|
Как я рад, что есть 1с-ники, которые пишут код из (0). Это замечательно, что есть люди, которые пишут "работает не трожь", "ну а что? нормально все"..Спасибо, что вы есть..
|
|||
168
wms
13.05.14
✎
16:19
|
(7)"А что такого? Старый добрый семерочный код от старых добрых программистов, не имеющих отношения к бухгалтерии."
работал с одним старичком во франче 7-к хороший был, на 8-ке так и писал как в (0) изучать ее не хотел да и возраст, дедуле под 70было для его возраста круто |
|||
169
х86
13.05.14
✎
16:23
|
я вот могу понять код из (0), могу понять того кто это писал
но скажите мне как эти люди дорабатывают к примеру УТ 11, или точнее то что работает на УФ или вебе??? Вот наверное где треш полный |
|||
170
Поpyчик-4
13.05.14
✎
16:31
|
(169) Я могу понять для разовой работы, сгодится чо, но не для тиражной конфы или дорабатываемой типовой.
|
|||
171
Armando
13.05.14
✎
16:31
|
(0) Выкладывай своих отчетов - вместе поржем.
|
|||
172
IVT_2009
13.05.14
✎
16:34
|
начинал когда серьезно писать под 8 ка - почище городил. В конце концов он наверное работает.
|
|||
173
Hans
13.05.14
✎
16:37
|
(0) я занимался такой херней когда нужно было тупо сделать "как в семерке было", а в логике отчета разбираться дольше чем тупо код семерочный переделать на восмерочный.
|
|||
174
IVT_2009
13.05.14
✎
16:43
|
только что ваял на управляемых формах это:
&наСервере функция печатьДокументов() если объект.Проведен = ложь тогда ЭтотДокумент = РеквизитФормыВЗначение("Объект"); ЭтотДокумент.Записать(РежимЗаписиДокумента.Проведение); ЗначениеВРеквизитФормы(ЭтотДокумент, "Объект"); конецЕсли; вых = новый структура; Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Договор"); ТабДок = Новый ТабличныйДокумент; Область = Макет.ПолучитьОбласть("Шапка"); Область.Параметры.ДатаДок = Формат(объект.Дата,"ДЛФ=DD"); Область.Параметры.номер = объект.Номер; Область.Параметры.ФиоЗаказчика = объект.ФИО.Наименование; Область.Параметры.АдресЗаказчика = объект.ФИО.Адрес; Область.Параметры.Паспорт = объект.ФИО.Паспорт; Область.Параметры.Выдан = Формат(объект.ФИО.Выдан,"ДФ=dd.MM.yyyy"); Область.Параметры.п_усл = объект.ВидУслуги; ФормСтрока = "Л = ru_RU; ДП = Истина"; ПарПредмета = "рубль,рубля,рублей,м,копейка,копейки,копеек,м,2"; ПрописьЧисла = ЧислоПрописью(объект.Услуги.Итог("Сумма"), ФормСтрока, ПарПредмета); Область.Параметры.с_усл = уп(объект.СуммаДокумента) +",("+ПрописьЧисла+")"; ТабДок.Вывести(Область); ТабДок.ОтображатьСетку = Ложь; ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет; ТабДок.АвтоМасштаб = Истина; вых.Вставить("договор",ТабДок); ////////////////////////////////////////калькуляция//////////////////////////////////////////// Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Калькуляция"); ТабДок = Новый ТабличныйДокумент; Область = Макет.ПолучитьОбласть("Шапка"); Область.Параметры.ФиоЗаказчика = объект.ФИО.Наименование; Область.Параметры.ВидУслуги = объект.ВидУслуги.Наименование; Область.Параметры.Профессия = объект.ФИО.Профессия.Наименование; Область.Параметры.датаДог = Формат(объект.Дата,"ДЛФ=DD"); Область.Параметры.номерДог = объект.Номер; ТабДок.Вывести(Область); Для ее = 0 по объект.Услуги.Количество()-1 Цикл поз = объект.Услуги.Получить(ее); Область = Макет.ПолучитьОбласть("Строчка"); Область.Параметры.Услуга = Поз.Услуга; Область.Параметры.Кол = поз.Количество; Область.Параметры.Сумма = поз.Сумма; ТабДок.Вывести(Область); КонецЦикла; Область = Макет.ПолучитьОбласть("Итог"); Область.Параметры.Итог = объект.Услуги.Итог("Сумма"); ТабДок.Вывести(Область); Область = Макет.ПолучитьОбласть("Итог2"); ТабДок.Вывести(Область); если объект.Услуги.Количество()>12 тогда табДок.ВывестиГоризонтальныйРазделительСтраниц(); иначе ТабДок.Вывести(Макет.ПолучитьОбласть("пропуск")); конецЕсли; ///////// Область = Макет.ПолучитьОбласть("Шапка"); Область.Параметры.ФиоЗаказчика = объект.ФИО.Наименование; Область.Параметры.ВидУслуги = объект.ВидУслуги.Наименование; Область.Параметры.Профессия = объект.ФИО.Профессия.Наименование; Область.Параметры.датаДог = Формат(объект.Дата,"ДЛФ=DD"); Область.Параметры.номерДог = объект.Номер; ТабДок.Вывести(Область); Для ее = 0 по объект.Услуги.Количество()-1 Цикл поз = объект.Услуги.Получить(ее); Область = Макет.ПолучитьОбласть("Строчка"); Область.Параметры.Услуга = Поз.Услуга; Область.Параметры.Кол = поз.Количество; Область.Параметры.Сумма = поз.Сумма; ТабДок.Вывести(Область); КонецЦикла; Область = Макет.ПолучитьОбласть("Итог"); Область.Параметры.Итог = объект.Услуги.Итог("Сумма"); ТабДок.Вывести(Область); Область = Макет.ПолучитьОбласть("Итог2"); ТабДок.Вывести(Область); //////// ТабДок.ОтображатьСетку = Ложь; ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет; ТабДок.АвтоМасштаб = Истина; вых.Вставить("калькуляция",ТабДок); ///////////////////////////////////////////////авр//////////////////////////////////////////// Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("АВР1"); ТабДок = Новый ТабличныйДокумент; Область = Макет.ПолучитьОбласть("АВ1"); Область.Параметры.ДатаДок = Формат(объект.Дата,"ДЛФ=DD"); Область.Параметры.НомерДок = объект.Номер; Область.Параметры.ФиоЗаказчика = объект.ФИО.Наименование; ФормСтрока = "Л = ru_RU; ДП = Истина"; ПарПредмета ="рубль,рубля,рублей,м,копейка,копейки,копеек,м,2"; ПрописьЧисла = ЧислоПрописью(объект.Услуги.Итог("Сумма"), ФормСтрока, ПарПредмета); Область.Параметры.Итог = ПрописьЧисла; Область.Параметры.ФиоЗаказчика = объект.ФИО.Наименование; Область.Параметры.Паспорт = объект.ФИО.Паспорт ; Область.Параметры.Выдан = Формат(объект.ФИО.Выдан,"ДФ=dd.MM.yyyy"); ТабДок.Вывести(Область); ТабДок.Вывести(Макет.ПолучитьОбласть("пропуск")); Область = Макет.ПолучитьОбласть("АВ1"); Область.Параметры.ДатаДок = Формат(объект.Дата,"ДЛФ=DD"); Область.Параметры.НомерДок = объект.Номер; Область.Параметры.ФиоЗаказчика = объект.ФИО.Наименование; ФормСтрока = "Л = ru_RU; ДП = Истина"; ПарПредмета ="рубль,рубля,рублей,м,копейка,копейки,копеек,м,2"; ПрописьЧисла = ЧислоПрописью(объект.Услуги.Итог("Сумма"), ФормСтрока, ПарПредмета); Область.Параметры.Итог = ПрописьЧисла; Область.Параметры.ФиоЗаказчика = объект.ФИО.Наименование; Область.Параметры.Паспорт = объект.ФИО.Паспорт ; Область.Параметры.Выдан = Формат(объект.ФИО.Выдан,"ДФ=dd.MM.yyyy"); ТабДок.Вывести(Область); ТабДок.ОтображатьСетку = Ложь; ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет; вых.Вставить("авр",ТабДок); возврат вых; конецФункции //функция печатьДокументов() наверное нужно покраснеть. |
|||
175
Sasha_1CK
13.05.14
✎
16:48
|
(165) вот это ближе к теме.
Судя по отладчику - основные потери идут на СокрЛП(ДокРСтрока.Номенклатура) где то треть. Затем потери на переборе документов. тоже где то треть. Потери на переборе строк минимальны. Разница между скоростью выполнения запроса и перебором на периоде 1-7 дней невооруженным глазом не видна. На промежутке 1-12 месяцев уже ощутима и доходит до 10 раз Для примера запустил отчет (только заполнение ТЗ, без вывода на экран) в базе БП за 4 года. 1. Оригинал отчета - Док: 3 824 Строк: 352 174 Время обработки 73 сек 2. Оригинал отчета Без СокрЛП - Док: 3 824 Строк: 352 174 Время обработки 50 сек 3. Запрос - Док: 3 824 Строк: 352 174 Время обработки 5 сек |
|||
176
wowik
13.05.14
✎
16:48
|
(0) и че такого? где ключевое слово "лопата"?
|
|||
177
х86
13.05.14
✎
16:51
|
(174)>> = объект.ФИО.Наименование
за это пожизненный эзих с гвоздями |
|||
178
х86
13.05.14
✎
16:55
|
(175)>> ... основные потери ...
вот в этом и есть косяк, так называемый запрос в цикле проблемма не в том что ты медленно получаешь данные, а в том что ты долбишь сервак запросами снижая производительность всей системы |
|||
179
Sasha_1CK
13.05.14
✎
17:07
|
(178) но почему то все пеняют автору именно на отсутствие запроса.
Что как бы навевает мысли всякие на тему "не суди, и не судим будешь" |
|||
180
х86
13.05.14
✎
17:08
|
(179)>>пеняют автору именно на отсутствие запроса
для многих это очевидно ) |
|||
181
RomarioAgro
13.05.14
✎
17:28
|
(158) ну допустим есть определенные суммы по контрагентам на которые нужно подобрать документы из прошлого, по каждому контрагенту суммы свои и документы могли быть введены вчера, а могли быть 2 года назад, как сделать такой запрос, чтобы в него попали только документы, которые выберут сумму и не попадали другие?
|
|||
182
Torquader
13.05.14
✎
19:49
|
(181) Если в таблице документа есть индексируемое поле, которое будет участвовать в отборе, то, конечно, запрос окажется быстрее и удобнее.
Если же такого поля нет, то будет полное сканирование таблицы, и запрос не покажет хорошей скорости. Просто, из-за того, что в восьмёрке ко всем объектам добавили табличные части - выборка перебором идёт очень и очень медленно, так как из базы загружаются данные всех табличных частей объекта при каждом переходе к следующему. В запросе же можно указать только нужные поля - из-за этого количество выбираемых данных будет меньше и скорость исполнения - выше. Во всё остальном - перебор ничем не хуже запроса - особенно, если мы только потом решаем, когда нам остановится (в запросе, правда, для этого есть ключевое слово ПЕРВЫЕ). Конечно, почему-то считается, что нагрузить сервер один раз намного лучше, чем обращаться к нему по каждому поводу, но вопрос актуальности данных и отсутствие возможности сделать запрос на измерение всё-таки оставляет необходимость использования прямого перебора (запрос с вызовом функции ПолучитьОбъект для каждого результата уже быстрее не будет). |
|||
183
rsv
13.05.14
✎
23:25
|
(0) полностью читабельный код и легко сопрвождаем.
Приемлем к быстрой доработке. |
|||
184
zak555
13.05.14
✎
23:26
|
автор в 0 не знает о заполнитьЗначенияСвойств
|
|||
185
rsv
13.05.14
✎
23:28
|
Независим от версии платформы
|
|||
186
rsv
13.05.14
✎
23:29
|
(184) это что то меняет ?
|
|||
187
zak555
13.05.14
✎
23:36
|
(186) код сократится в разы
|
|||
188
rsv
13.05.14
✎
23:38
|
(187) Это важно ?
|
|||
189
zak555
13.05.14
✎
23:39
|
(188) естественно
|
|||
190
rsv
13.05.14
✎
23:40
|
(172) а если несерьезно то это как ?
|
|||
191
rsv
13.05.14
✎
23:40
|
(189) для кого ?
|
|||
192
rsv
13.05.14
✎
23:41
|
Могу сказать что точно не бизнесу
|
|||
193
zak555
13.05.14
✎
23:43
|
(191) следующего смотрителю
(192) есть код прост, то его проще разбирать => меньше времени на это будет потрачено, а => деньги бизнеса будут целее |
|||
194
Armando
14.05.14
✎
00:19
|
(174) облить себя бензином и сжечь)))
|
|||
195
User_Agronom
14.05.14
✎
00:21
|
(0) (33) А что вам собственно не нравится?
Только аргументированно. Вполне удовлетворительный код. Не было времени на оптимизацию, но стабильно работающий. |
|||
196
Злопчинский
14.05.14
✎
00:50
|
хотел написать много, но передумал...
|
|||
197
АйЭм
14.05.14
✎
05:31
|
(0)
Хи-хи. Когда я тут создал тему, как 30 строк заменил одной, меня забанили. Автор - радуйся, что не забанили. |
|||
198
Skom
14.05.14
✎
05:44
|
(197) меня за суп из младенцев на год банили) ничего. я за год из 7.7 на 8.2 перешел :-)
Я и не думал что моя ветка породит такую оживленную дискуссию. |
|||
199
Skom
14.05.14
✎
05:46
|
(171) на, посмейся
ТекстЗапроса = " |SELECT | Выборка.ОЦПредприятие as [ОЦПредприятие $Справочник.ОЦПредприятия], | Выборка.ИД as ИД, | Выборка.Код as Код, | Выборка.Наименование as Наименование, | Выборка.Контрагент as [Контрагент $Справочник.Контрагенты], | Выборка.ВидТоплива as [ВидТоплива $Справочник.Ресурсы], | Выборка.ВидЛимита as [ВидЛимита $Перечисление.ВидыЛимита], | Выборка.Лимит as Лимит, | Выборка.ДатаВыдачиЧипа as ДатаВыдачиЧипа, | Выборка.ДатаСдачиЧипа as ДатаСдачиЧипа, | Выборка.НомерКарты as НомерКарты, | Выборка.УчНомер as УчНомер, | Выборка.Запрет as [Запрет $Перечисление.ДаНет], | Выборка.ИДЗаписи as ИДЗаписи, | Выборка.ДатаДо as ДатаДо, | Выборка.ПИН as ПИН |FROM | ( | SELECT | ОЦВодила.ParentExt as ОЦПредприятие, | ОЦВодила.ID as ИД, | ОЦВодила.CODE as Код, | ОЦВодила.DESCR as Наименование, | Период.Значение as Контрагент, | $ОЦВодила.ВидТоплива as ВидТоплива, | $ОЦВодила.ВидЛимита as ВидЛимита, | $ОЦВодила.Лимит as Лимит, | nullif($ОЦВодила.ДатаВыдачиЧипа, '17530101') as ДатаВыдачиЧипа, | nullif($ОЦВодила.ДатаСдачиЧипа, '17530101') as ДатаСдачиЧипа, | $ОЦВодила.НомерКарты as НомерКарты, | $ОЦВодила.УчНомер as УчНомер, | $ОЦВодила.Запрет as Запрет, | $ОЦВодила.ИДЗаписи as ИДЗаписи, | nullif($ОЦВодила.ДатаДо, '17530101') as ДатаДо, | $ОЦВодила.ПИН as ПИН | FROM $Справочник.ОЦВодила as ОЦВодила (NoLock) | LEFT JOIN | (SELECT | Период.objid as objid, | Период.value as Значение | FROM _1SCONST as Период | WHERE | Период.id = 1036 AND | Период.date IN | (SELECT | MAX(Константа.date) | FROM _1SCONST as Константа | WHERE (Константа.date <= :ВыбДата) AND (Константа.id = 1036) AND (Константа.objid = Период.objid)) | ) as Период ON Период.Objid = ОЦВодила.ID | "+ФильтрКонтрагент+" |"; ЮНИОН = " |UNION ALL | |SELECT | ОЦВодила.ParentExt as ОЦПредприятие, | ОЦВодила.ID as ИД, | ОЦВодила.CODE as Код, | ОЦВодила.DESCR as Наименование, | isnull(Период.Значение,"+ПустойИД9+") as Контрагент, | $ОЦВодила.ВидТоплива as ВидТоплива, | $ОЦВодила.ВидЛимита as ВидЛимита, | $ОЦВодила.Лимит as Лимит, | nullif($ОЦВодила.ДатаВыдачиЧипа, '17530101') as ДатаВыдачиЧипа, | nullif($ОЦВодила.ДатаСдачиЧипа, '17530101') as ДатаСдачиЧипа, | $ОЦВодила.НомерКарты as НомерКарты, | $ОЦВодила.УчНомер as УчНомер, | $ОЦВодила.Запрет as Запрет, | $ОЦВодила.ИДЗаписи as ИДЗаписи, | nullif($ОЦВодила.ДатаДо, '17530101') as ДатаДо, | $ОЦВодила.ПИН as ПИН | FROM $Справочник.ОЦВодила as ОЦВодила (NoLock) | LEFT JOIN | (SELECT | Период.objid as objid, | Период.value as Значение | FROM _1SCONST as Период | WHERE | Период.id = 1036 AND | Период.date IN | (SELECT | MAX(Константа.date) | FROM _1SCONST as Константа | WHERE (Константа.date <= :ВыбДата) AND (Константа.id = 1036) AND (Константа.objid = Период.objid)) | ) as Период ON Период.Objid = ОЦВодила.ID | WHERE | isnull(Период.Значение,"+ПустойИД9+") = "+ПустойИД9+" AND | ОЦВодила.ParentExt IN | ( | Select | ОЦПредприятия.ID | From | $Справочник.ОЦПредприятия as ОЦПредприятия (NoLock) | LEFT JOIN | (SELECT | Период.objid as objid, | Период.value as Значение | FROM _1SCONST as Период | WHERE | Период.id = 1033 AND | Период.date IN | (SELECT | MAX(Константа.date) | FROM _1SCONST as Константа | WHERE (Константа.date <= :ВыбДата) AND (Константа.id = 1033) AND (Константа.objid = Период.objid)) | ) as Период ON Период.Objid = ОЦПредприятия.ID | WHERE | ОЦПредприятия.ParentExt = "+СвойОЦ+" AND Период.Значение = "+текКонтрагент+" | ) |"; ТекстЗапроса = ТекстЗапроса + ?(Контрагент.Выбран()=1,ЮНИОН,"") + " |) as Выборка | |WHERE | 1=1 | "+ФильтрВид+" | "+фильтрСтатус+" | "+ФильтрКарта+" |"; |
|||
200
SeraFim
14.05.14
✎
06:12
|
(200) две сотки!
|
|||
201
Skom
14.05.14
✎
06:15
|
(200) даже как-то удивительно! что ветка дожила до таких глубоких седин, я думал на 15-м ответе затухнет))
|
|||
202
IVT_2009
14.05.14
✎
09:33
|
(194) часто проще так чем долго думать и получить по голове. Система СКД мне не показалась оптимальной для отчета типа договор . По крайней мере времени уйдет много , а программу хотят вчера. Особенно если писать на УФ с которыми иметь дело примерно третий месяц.
|
|||
203
rsv
14.05.14
✎
10:28
|
(198) Цель дискуссии имхо - не важно как вы кодите или кодинг ради кодинга :) Суть - выполнить задачу . Методы и средства заказчику от бизнеса параллельны.
|
|||
204
rsv
14.05.14
✎
10:32
|
(199) Если бааааа вы написали
ТекстЗапроса=" |Select |* |From |МояТабличнаяФункция(Парм1,,) |"; Бвло бааа короче намного... не находите ? :) |
|||
205
Skom
15.05.14
✎
06:48
|
нет
|
|||
206
Лохматые Уши
15.05.14
✎
09:59
|
(0) покажи свой код, может тоже поржем :)
|
|||
207
Shurjk
15.05.14
✎
10:01
|
(203) Заказчику ад - но себя тоже нужно уважать. К тому же видя такой год я обычно говорю - не жалко тебе своего труда? Ведь это не проживет долго, придет человек который просто чем разбираться в этом похерит и напишет заново.
|
|||
208
Любопытная
15.05.14
✎
10:03
|
(207) А тебе не пофиг? Если человек придет, значит он придет на твое место, значит тебя там уже нет.
|
|||
209
ДенисЧ
15.05.14
✎
10:05
|
(208) Необязательно. А если придёт дополнительный человек в команду?
|
|||
210
х86
15.05.14
✎
10:08
|
(207-208)о чём Вы?
это франч выкатил, и за это еще и деньги получил |
|||
211
Любопытная
15.05.14
✎
10:11
|
(209)То вкусы не совпали, вы не сработались, кто-то из вас выживет другого.
(210) Я исключительно про (207). (0) Уже обсудили по-моему. Если заказчик это дело принял, то какие претензии к франчу по поводу денег? |
|||
212
ДенисЧ
15.05.14
✎
10:13
|
(211) А вкусы причём? Я сейчас работаю в команде из 5х 1сников.
Неплохая з/п. И что, из-за того, что кто-то код не так форматирует, мне работу менять? |
|||
213
Любопытная
15.05.14
✎
10:15
|
(212)Искренне за тебя рада. Вы ведь находите как-то компромисс? Или постоянная ругань на тему "кто так пишет?"?
|
|||
214
ДенисЧ
15.05.14
✎
10:24
|
(213) Постоянной ругани нет, постепенно адаптируются к моему восприятию :-)
Или я к ним, тут не поймёшь... |
|||
215
Shurjk
15.05.14
✎
10:25
|
(208) Нет не пофиг, мне иногда очень приятно узнать что то что сделал до сих пор работает.
|
|||
216
Любопытная
15.05.14
✎
10:35
|
(215)а носом в код тыкали? Вот так, как в (0)? С криком "фу, какая гадость"? В такие моменты, интересно, тоже приятно, что твой код до сих пор работает?
|
|||
217
Shurjk
15.05.14
✎
10:37
|
(216) Нет не тыкали. И сам никого не тыкал, просто матерился про себя и переделывал по своему.
|
|||
218
rsv
15.05.14
✎
12:58
|
(217) Обычно это с возрастом проходит :)
|
|||
219
rsv
15.05.14
✎
12:59
|
Переписвывание в смысле ...
|
|||
220
bolobol
15.05.14
✎
13:05
|
Всё не читал, уж простите. Про "заложиться на оптимизацию по скорости" уже писали? Двойная оплата одной работы, это же франч!
|
|||
221
Shurjk
15.05.14
✎
13:06
|
(219) Иногда проще переписать чем разгребать то что было написано.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |