|
Уязвимая часть запроса | ☑ | ||
---|---|---|---|---|
0
cube033
20.11.12
✎
10:43
|
Не могу найти уязвимое место:
Стандартная конфа Хеликса - салон красоты. Всегда нормально считала остаток денег на лицевом счете, а тут выдает неадекватные цифры. Код запроса: Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ | ЛицевойСчет.СтруктурнаяЕдиница, | ЛицевойСчет.Контрагент, | ЛицевойСчет.СуммаКонечныйОстаток КАК СуммаОстаток |ИЗ | РегистрНакопления.ДенежныеСредстваНаЛицевыхСчетах.ОстаткиИОбороты( | , | &Дата, | Авто, | , | Контрагент = &Контрагент | И СтруктурнаяЕдиница = &СтруктурнаяЕдиница) КАК ЛицевойСчет |ГДЕ | ЛицевойСчет.Регистратор <> &Регистратор"); Запрос.УстановитьПараметр("СтруктурнаяЕдиница", СтруктурнаяЕдиница); Запрос.УстановитьПараметр("Контрагент", Контрагент); Запрос.УстановитьПараметр("Регистратор", Ссылка); Запрос.УстановитьПараметр("Дата", Дата); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Выборка.Следующий(); Если Выборка.СуммаОстаток < СуммаДокумента Тогда Сообщить("Остаток лицевого счета "+ Формат(Выборка.СуммаОстаток,"ЧЦ=15; ЧДЦ=2")+" р. меньше возвращаемой суммы!"); Отказ = Истина; КонецЕсли; Иначе Сообщить("Остаток лицевого счета 0 р."); Отказ = Истина; КонецЕсли; Стандартный подсчет на калькуляторе говорит, что на сегодня остаток 4025р: 13.06.2012 15:31:33 300,00 + 14.06.2012 20:34:15 300,00 - 16.06.2012 14:06:10 7 200,00 + 16.06.2012 17:22:38 1 200,00 - 17.06.2012 18:31:30 1 470,00 - 18.06.2012 21:11:12 1 200,00 - 19.06.2012 20:52:53 930,00 - 21.06.2012 20:03:21 1 200,00 - 24.06.2012 19:05:25 1 200,00 - 16.10.2012 14:16:02 675,00 - 09.11.2012 19:44:09 225,00 - 10.11.2012 18:24:00 225,00 - 11.11.2012 12:00:00 3 800,00 + а отладчик пишет, что переменная Выборка.СуммаОстаток выдает то 0, то 300р |
|||
1
cube033
20.11.12
✎
10:47
|
Не совсем понимаю, что за "Выбрать разрешенные", что входит в "СуммаКонечныйОстаток" и что за параметр "Авто" у ДенежныеСредстваНаЛицевыхСчетах.ОстаткиИОбороты
|
|||
2
dmpl
20.11.12
✎
10:47
|
(0) Э--э-э, а что это:
Если оно вообще работает - значит, в результате запроса более 1 строки. А без упорядочивания порядок никто не гарантирует. |
|||
3
Cube
20.11.12
✎
10:47
|
(0) Выбери себе другой ник, плагиатчик!))
|
|||
4
salvator
20.11.12
✎
10:48
|
(0) Вопрос: а зачем использовать таблицу ОстаткиИОбороты, если тебе нужен только остаток?
|
|||
5
salvator
20.11.12
✎
10:49
|
+(4) А, там проверка на регистратор. Вопрос снимается.
|
|||
6
cube033
20.11.12
✎
10:53
|
Я тоже кстати не совсем понимаю зачем два раза Выборка.Следующий()
Но раньше код работал P.S. Мой ник у меня с 2007 (Может 08) года, образован из названия и бортового номера моего автомобиля и я не вижу повода его менять |
|||
7
mzelensky
20.11.12
✎
10:54
|
(6) Скорее всего первый "выбрать.следующий" убирает (пропускает) переходящий остаток. Ты же по регистратору делаешь.
|
|||
8
mzelensky
20.11.12
✎
10:56
|
(0) советую засунуть этот запрос в консоль и посмотреть результат в более полномформате:
регистратор, начальныйОст, приход, расход, конечныйОст тогда может увидишь почему так. |
|||
9
mikecool
20.11.12
✎
10:56
|
блин... я разочарован, думал обнаружилась уязвимость в 1с (
|
|||
10
НЕА123
20.11.12
✎
11:01
|
(0)
кто это писал? учитывая условие на дату ЛицевойСчет.Регистратор <> &Регистратор лишнее. не? |
|||
11
mzelensky
20.11.12
✎
11:01
|
(9) у меня тоже такая мысль была :(
|
|||
12
Прохожий
20.11.12
✎
11:02
|
(9) Ага, по просьбе РПЦ ввели. Иногда система ссама генерит проводку по кассе и пишет "Бог дал" или "Бог взял" и рублей триста-четыреста сумма обычно.
|
|||
13
Прохожий
20.11.12
✎
11:03
|
+(12) А к 2015 будет 500 рублей
|
|||
14
cube033
20.11.12
✎
11:12
|
Писал Хеликс
регистратор -документ, в форме которого нажимаешь провести дата - дата в Форме этого документа на момент нажатия "Провести" Но документ мог быть проведен(создать запись в регистре) вчера, а сегодня ты его хочешь перепровести новой датой, тогда при выборке он попал бы под условия, если бы прямым текстом не было сказано про регистратор |
|||
15
cube033
20.11.12
✎
11:20
|
Не могу найти консоль под упр формы(
|
|||
16
Classic
20.11.12
✎
11:23
|
Странно, что оно работало :)
Всего два первых регистратора обрабатывается после запроса |
|||
17
cube033
20.11.12
✎
11:34
|
На самом деле не факт, что работало. Смысл данной выборки - получить Остаток, чтобы сравнить его с суммой РКО, нигде и никогда не выводился результат, только Истина либо Ложь.
|
|||
18
cube033
20.11.12
✎
11:36
|
Беда в том, что отчет по данному регистру показывает нужную сумму, а РКО говорит, что денег не хватает.
|
|||
19
Classic
20.11.12
✎
11:49
|
(17)
Еще раз. Постобработка запроса(там где выбрать-следующий) выбирает только первых два регистратора регистра. И все. Дело не в запросе - дело в обработке результата |
|||
20
cube033
20.11.12
✎
11:58
|
Спасибо) Увидел. Даже не первых два, а если есть хоть один, тогда выбирает второй - не хватает цикла, оттуда 300р.
И как это раньше работало?! |
|||
21
Classic
20.11.12
✎
12:01
|
(20)
Может раньше было всего два регистратора? :) |
|||
22
dmpl
20.11.12
✎
12:07
|
(20) Скорее всего, просто никогда не вылезал запрет тогда, когда не надо, вот и не замечали.
|
|||
23
cube033
20.11.12
✎
12:11
|
Документ не самый распространенный, вполне возможно, что несколько раз случайно проскочил проверку. Главное вроде выяснили, что беда конфы - дальше передам вопрос разработчику.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |