- 1
- 2
- 3
- 4
- 5
- 6
require_once 'numberspelling.php';
$number=$_POST['textnumber'];
$language=$_POST['selectlanguage'];
$numberspellingobj=new numberspelling($number, $language);
$spelling=$numberspellingobj->spell();
echo $spelling;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+158
require_once 'numberspelling.php';
$number=$_POST['textnumber'];
$language=$_POST['selectlanguage'];
$numberspellingobj=new numberspelling($number, $language);
$spelling=$numberspellingobj->spell();
echo $spelling;
Это файл "receivenumber.php", который получает данные от клиента (число и язык).
+155
}
if(isset($this->digits[1])) {//разряд десятков
if($this->digits[1]>1)
$result.=$this->spelling['ties'][$this->language][$this->digits[1]]." ";
if($this->digits[1]==1) $result.=$this->spelling['teens'][$this->language][$this->digits[0]]." ";
}
if(isset($this->digits[0])) {//разряд единиц
if((isset($this->digits[1]))&&($this->digits[1]!=1))
$result.=$this->spelling['ones'][$this->language][$this->digits[0]]." ";
if(!isset($this->digits[1])) {
if($this->digits[0]==0) $result.=$this->spelling['nought'][$this->language]." ";
else $result.=$this->spelling['ones'][$this->language][$this->digits[0]]." ";
}
}
return $result;
}
}
Часть программы, которая преобразовывает целое число из промежутка [-9999999; 9999999] в текст (разговорный) на трех языках (Russian, Ukrainian, English). Состоит из трех классов. Это продолжение класса numberspelling , начиная с закрытой скобки последнего if`а предыдущего поста. Именно класс numberspelling преобразует цифру из уже имеющегося массива number в массив в произношение этой цифры на данном языке, в соответствии с её весом (той степенью числа 10, на которую она умножена). Например, если цифра 5 в уже имеющемся массиве стоит под номером 2, то она будет произносится "пятьсот". Напомню, номер элемента в массиве соответствует степени числа 10, на которую надо умножить элемент.
+155
require_once 'number.php';
class numberspelling extends number {
//put your code here
private $spelling=array(
'nought'=>array(
'eng'=>'nought',
'ukr'=>'нуль',
'rus'=>'ноль'
),
'ones'=>array(
'eng'=>array("", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"),
'ukr'=>array("", "один", "два", "три", "чотири", "п`ять", "шість", "сім", "вісім", "дев`ять"),
'rus'=>array("", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять")
),
'teens'=>array(
'eng'=>array("ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"),
'ukr'=>array("десять", "одинадцять", "дванадцять", "тринадцять", "чотирнадцять", "п`ятнадцять", "шістнадцять", "сімнадцять", "вісімнадцять", "дев`ятнадцять"),
'rus'=>array("десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать")
),
'ties'=>array(
'eng'=>array("", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"),
'ukr'=>array("", "десять", "двадцять", "тридцять", "сорок", "п`ятдесят", "шістдесят", "сімдесят", "вісімдесят", "дев`яносто"),
'rus'=>array("", "десять", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семдесят", "восемдесят", "девяносто")
),
'hundreds'=>array(
'eng'=>array("", "hundred", "two hundred", "three hundred", "four hundred", "five hundred", "six hundred", "seven hundred", "eight hundred", "nine hundred"),
'ukr'=>array("", "сто", "двісті", "триста", "чотириста", "п`ятсот", "шістсот", "сімсот", "вісімсот", "дев`ятсот"),
'rus'=>array("", "сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот")
)
);
private $greatnumbersspelling=array(
'thousands'=>array(
'eng'=>array("", "one thousand", "two thousand", "three thousand", "four thousand", "thousand"),
'ukr'=>array("", "одна тисяча", "дві тисячі", "три тисячі", "чотири тисячі", "тисяч"),
'rus'=>array("", "одна тысяча", "две тысячи", "три тысячи", "четыре тысячи", "тысяч")
),
'millions'=>array(
'eng'=>array("", "one million", "two million", "three million", "four million", "million"),
'ukr'=>array("", "один мільйон", "два мільйони", "три мільйони", "чотири мільйони", "мільйонів"),
'rus'=>array("", "один миллион", "два миллиона", "три миллиона", "четыре миллиона", "миллионов")
)
);
private $signspelling=array(
'negative'=>array(
'eng'=>'minus',
'ukr'=>'мінус',
'rus'=>'минус'
),
'positive'=>array(//для удобства изменения кода при необходимости
'eng'=>'',
'ukr'=>'',
'rus'=>''
)
);
private $language;
public function __construct($number, $language) {
parent::__construct($number);
$this->language=$language;
}
public function spell() {
//spelling
$result="";
if($this->sign==-1)
$result=$result.
$this->signspelling['negative'][$this->language]." ";
else $result.=$this->signspelling['positive'][$this->language]." ";
if(isset($this->digits[6])) {//разряд миллионов
for($i=1; $i<5; $i++) {
if($this->digits[6]==$i) {
$result.=$this->greatnumbersspelling['millions'][$this->language][$i]." ";
}
}
if($this->digits[6]>=5) {
$result.=$this->spelling['ones'][$this->language][$this->digits[6]]." ".$this->greatnumbersspelling['millions'][$this->language][5]." ";
}
}
if(isset($this->digits[5])) {//разряд сотен тысяч
$result.=$this->spelling['hundreds'][$this->language][$this->digits[5]]." ";
if(($this->digits[5]!=0)&($this->digits[4]==0)&($this->digits[3]==0)) $result.=$this->greatnumbersspelling['thousands'][$this->language][5]." ";
}
if(isset($this->digits[4])) {//разряд десятков тысяч
if($this->digits[4]>1) {
$result.=$this->spelling['ties'][$this->language][$this->digits[4]]." ";
if($this->digits[3]==0) $result.=$this->greatnumbersspelling['thousands'][$this->language][5]." ";
}
if($this->digits[4]==1) $result.=$this->spelling['teens'][$this->language][$this->digits[3]]." ".$this->greatnumbersspelling['thousands'][$this->language][5]." ";
}
if(isset($this->digits[3])) {//разряд тысяч
for($i=1; $i<5; $i++) {
if($this->digits[3]==$i) {
if(!isset($this->digits[4])||(isset($this->digits[4])&&$this->digits[4]!=1)) $result.=$this->greatnumbersspelling['thousands'][$this->language][$i]." ";
}
}
if($this->digits[3]>=5) {
if(!isset($this->digits[4])||(isset($this->digits[4])&&$this->digits[4]!=1))
$result.=$this->spelling['ones'][$this->language][$this->digits[3]]." ".$this->greatnumbersspelling['thousands'][$this->language][5]." ";
}
}
if(isset($this->digits[2])) {//разряд сотен
$result.=$this->spelling['hundreds'][$this->language][$this->digits[2]]." ";
Часть программы, которая преобразовывает целое число из промежутка [-9999999; 9999999] в текст (разговорный) на трех языках (Russian, Ukrainian, English). Состоит из трех классов. Это класс numberspelling - основной класс программы. Точнее его часть. Остальное - в следующем посте. Именно он преобразует цифру из уже имеющегося массива number в массив в произношение этой цифры на данном языке, в соответствии с её весом (той степенью числа 10, на которую она умножена). Например, если цифра 5 в уже имеющемся массиве стоит под номером 2, то она будет произносится "пятьсот". Напомню, номер элемента в массиве соответствует степени числа 10, на которую надо умножить элемент.
+155
class number {
//put your code here
protected $digits;/*массив цифр числа. 0й эл-т - самый правый разряд*/
protected $sign;/*знак числа*/
public function __construct($number) {
if(($number>=-9999999)&($number<=9999999)) {
if(intval($number)<0) {
$this->sign=-1;
}
else {
$this->sign=1;
}
$this->digits= preg_split("//", $number*$this->sign, -1,
PREG_SPLIT_NO_EMPTY);//преобразовываем число в массив цифр
$this->digits=array_reverse($this->digits);/*переворачиваем массив,
* чтобы индексы соответствовали степеням числа 10*/
}
else {
exit("Введено число вне диапазона или неверного типа!<br>".
"The number from non-essential range or type!<br>");
}
}
public function isNegative() {
if($this->sign==-1) return true;
else return false;
}
public function isPositive() {
if($this->sign==-1) return false;
else return true;
}
public function getSign() {return $this->sign;}
public function getDigits() {return $this->digits;}
public function getDigit($cn) {
if(($cn>=0)&($cn<=7)) return $this->digits[$cn];
else return 0;
}
}
Часть программы, которая преобразовывает целое число из промежутка [-9999999; 9999999] в текст (разговорный) на трех языках (Russian, Ukrainian, English). Состоит из трех классов. Это класс number , основное назначение которого - преобразовать число в массив цифр, номера цифр в котором соответствуют степерям числа 10.
+156
jQuery(document).ready(function(){
jQuery("a.m1_show").click(function(){
jQuery('div#emul_1').addClass('mshow').show();
jQuery('div#emul_2').addClass('minvis').hide();
jQuery('div#emul_3').addClass('minvis').hide();
jQuery('div#emul_4').addClass('minvis').hide();
jQuery('div#emul_5').addClass('minvis').hide();
//jQuery('li#emul_6').addClass('minvis').hide();
});
});
jQuery(document).ready(function(){
jQuery("a.m2_show").click(function(){
jQuery('div#emul_2').addClass('mshow').show();
jQuery('div#emul_1').addClass('minvis').hide();
jQuery('div#emul_3').addClass('minvis').hide();
jQuery('div#emul_4').addClass('minvis').hide();
jQuery('div#emul_5').addClass('minvis').hide();
//jQuery('li#emul_6').addClass('minvis').hide();
});
});
jQuery(document).ready(function(){
jQuery("a.m3_show").click(function(){
jQuery('div#emul_3').addClass('mshow').show();
jQuery('div#emul_1').addClass('minvis').hide();
jQuery('div#emul_2').addClass('minvis').hide();
jQuery('div#emul_4').addClass('minvis').hide();
jQuery('div#emul_5').addClass('minvis').hide();
//jQuery('li#emul_6').addClass('minvis').hide();
});
});
jQuery(document).ready(function(){
jQuery("a.m4_show").click(function(){
jQuery('div#emul_4').addClass('mshow').show();
jQuery('div#emul_1').addClass('minvis').hide();
jQuery('div#emul_3').addClass('minvis').hide();
jQuery('div#emul_2').addClass('minvis').hide();
jQuery('div#emul_5').addClass('minvis').hide();
//jQuery('li#emul_6').addClass('minvis').hide();
});
});
jQuery(document).ready(function(){
jQuery("a.m5_show").click(function(){
jQuery('div#emul_5').addClass('mshow').show();
jQuery('div#emul_1').addClass('minvis').hide();
jQuery('div#emul_3').addClass('minvis').hide();
jQuery('div#emul_2').addClass('minvis').hide();
jQuery('div#emul_4').addClass('minvis').hide();
//jQuery('li#emul_6').addClass('minvis').hide();
});
});
function but_1 () {
jQuery('span#emul_img_1').addClass('img_none').hide();
jQuery('span#emul_img_2').addClass('img_inline').show();
jQuery('span#emul_img_3').addClass('img_inline').show();
jQuery('span#emul_img_4').addClass('img_inline').show();
jQuery('span#emul_img_5').addClass('img_inline').show();
jQuery('span#emul_img_none_1').addClass('img_inline').show();
jQuery('span#emul_img_none_1').addClass('current_tab').show();
jQuery('span#emul_img_none_2').addClass('img_none').hide();
jQuery('span#emul_img_none_3').addClass('img_none').hide();
jQuery('span#emul_img_none_4').addClass('img_none').hide();
jQuery('span#emul_img_none_5').addClass('img_none').hide();
}
function but_2 () {
jQuery('span#emul_img_2').addClass('img_none').hide();
jQuery('span#emul_img_1').addClass('img_inline').show();
jQuery('span#emul_img_3').addClass('img_inline').show();
jQuery('span#emul_img_4').addClass('img_inline').show();
jQuery('span#emul_img_5').addClass('img_inline').show();
jQuery('span#emul_img_none_2').addClass('img_inline').show();
jQuery('span#emul_img_none_2').addClass('current_tab').show();
jQuery('span#emul_img_none_1').addClass('img_none').hide();
jQuery('span#emul_img_none_3').addClass('img_none').hide();
jQuery('span#emul_img_none_4').addClass('img_none').hide();
jQuery('span#emul_img_none_5').addClass('img_none').hide();
}
function but_3 () {
jQuery('span#emul_img_3').addClass('img_none').hide();
jQuery('span#emul_img_2').addClass('img_inline').show();
jQuery('span#emul_img_1').addClass('img_inline').show();
jQuery('span#emul_img_4').addClass('img_inline').show();
jQuery('span#emul_img_5').addClass('img_inline').show();
jQuery('span#emul_img_none_3').addClass('img_inline').show();
jQuery('span#emul_img_none_3').addClass('current_tab').show();
Сегодня наткнулся на такой вот скрипт для табов. Кому нужен - воруйте. Скрипт лаконичный. Работает шустро.
−404
UIImageView *footerWhite1PxLineThatOnlyAndersWillNotice = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"sidebar_line_white"]];
ох уж этот Андерс!
−124
//часть текста запроса
|ИЗ
| ЭтапыОплатыИсходник КАК ЭтапыОплаты
|//ТекстОтбора
|{ГДЕ
.................
//Добавляем поля если используется отбор
ТекстОтбора="ГДЕ ";
ТекстОтбора=ТекстОтбора+" ИСТИНА";
НомерПеременнойОтбора=1;
Для каждого СтрокаТекущегоОтбора Из ПостроительОтчета.Отбор Цикл
if НЕ СтрокаТекущегоОтбора.Использование then
continue;
endif;
СложноеИмяПоля=ПолучитьИмяПоляБезТочек(СтрокаТекущегоОтбора.ПутьКДанным);
Если ПостроительОтчета.Отбор.Найти(СложноеИмяПоля)=Неопределено Тогда
Если СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.Больше Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" > &ПеременнаяОтбора"+НомерПеременнойОтбора;
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.БольшеИлиРавно Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" >= &ПеременнаяОтбора"+НомерПеременнойОтбора;
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.ВИерархии или
СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.ВСписке или
СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.ВСпискеПоИерархии Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" В (&ПеременнаяОтбора"+НомерПеременнойОтбора+")";
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.ВИерархии Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" В ИЕРАРХИИ(&ПеременнаяОтбора"+НомерПеременнойОтбора+")";
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.Меньше Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" < &ПеременнаяОтбора"+НомерПеременнойОтбора;
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.МеньшеИлиРавно Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" <= &ПеременнаяОтбора"+НомерПеременнойОтбора;
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.НеВСписке или
СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.НеВСпискеПоИерархии Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И НЕ "+"ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" В (&ПеременнаяОтбора"+НомерПеременнойОтбора+")";
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.НеВИерархии Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И НЕ "+"ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" В ИЕРАРХИИ(&ПеременнаяОтбора"+НомерПеременнойОтбора+")";
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.НеРавно Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" <> &ПеременнаяОтбора"+НомерПеременнойОтбора;
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.Равно Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" = &ПеременнаяОтбора"+НомерПеременнойОтбора;
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если НомерПеременнойОтбора>1 Тогда
Запрос.Текст=СтрЗаменить(Запрос.Текст,"//ТекстОтбора",ТекстОтбора);
КонецЕсли;
При этом при всем, в отчете используется 2 построителя ( на одном не смог построить , одного видимо было было мало для стратегии заложенной в голове:) ) + между ними используется куча запросов , в которых выгружаются таблицы (РезультатЗапроса.Выполнить().Выгрузить( )) и передаются в следующие запросы как параметры.
От себя добавлю: Добавлял элементарные вещи, чтобы вывести пару дополнительных колонок - убить 1 час , тоже самое, что ничего не сделать..... Да и к тому же отчет рисуется через "ТабДок.Присоеденить".
−125
//часть текста запроса
|ИЗ
| ЭтапыОплатыИсходник КАК ЭтапыОплаты
|//ТекстОтбора
|{ГДЕ
.................
//Добавляем поля если используется отбор
ТекстОтбора="ГДЕ ";
ТекстОтбора=ТекстОтбора+" ИСТИНА"; //NP002
НомерПеременнойОтбора=1;
Для каждого СтрокаТекущегоОтбора Из ПостроительОтчета.Отбор Цикл
if НЕ СтрокаТекущегоОтбора.Использование then
continue;
endif;
СложноеИмяПоля=ПолучитьИмяПоляБезТочек(СтрокаТекущегоОтбора.ПутьКДанным);
Если ПостроительОтчета.Отбор.Найти(СложноеИмяПоля)=Неопределено Тогда
Если СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.Больше Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" > &ПеременнаяОтбора"+НомерПеременнойОтбора; //NP002
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.БольшеИлиРавно Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" >= &ПеременнаяОтбора"+НомерПеременнойОтбора; //NP002
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.ВИерархии или
СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.ВСписке или
СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.ВСпискеПоИерархии Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" В (&ПеременнаяОтбора"+НомерПеременнойОтбора+")"; //NP002
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.ВИерархии Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" В ИЕРАРХИИ(&ПеременнаяОтбора"+НомерПеременнойОтбора+")"; //NP002
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.Меньше Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" < &ПеременнаяОтбора"+НомерПеременнойОтбора; //NP002
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.МеньшеИлиРавно Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" <= &ПеременнаяОтбора"+НомерПеременнойОтбора; //NP002
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.НеВСписке или
СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.НеВСпискеПоИерархии Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И НЕ "+"ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" В (&ПеременнаяОтбора"+НомерПеременнойОтбора+")"; //NP002
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.НеВИерархии Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И НЕ "+"ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" В ИЕРАРХИИ(&ПеременнаяОтбора"+НомерПеременнойОтбора+")"; //NP002
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.НеРавно Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" <> &ПеременнаяОтбора"+НомерПеременнойОтбора; //NP002
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.Равно Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" = &ПеременнаяОтбора"+НомерПеременнойОтбора; //NP002
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если НомерПеременнойОтбора>1 Тогда
Запрос.Текст=СтрЗаменить(Запрос.Текст,"//ТекстОтбора",ТекстОтбора);
КонецЕсли;
При этом при всем, в отчете используется 2 построителя ( на одном не смог построить , одного видимо было было мало для стратегии заложенной в голове:) ) + между ними используется куча запросов , в которых выгружаются таблицы (РезультатЗапроса.Выполнить().Выгрузить( )) и передаются в следующие запросы как параметры.
От себя добавлю: Добавлял элементарные вещи, чтобы вывести пару дополнительных колонок - убить 1 час , тоже самое, что ничего не сделать..... Да и к тому же отчет рисуется через "ТабДок.Присоеденить".
+136
Prelude> [(-1/0),1 .. 1]
[-Infinity,1.0,Infinity,Infinity]
Целых 2 бесконечности между единицей.
+139
#ifndef STDC
# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
# define const /* note: need a more gentle solution here */
# endif
#endif
Совместимость