Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Если ЗаполненАдрес=0 Тогда
Если ПустаяСтрока(Запрос.ЭлПочта)=0 Тогда
Продолжить;
Иначе
ТЗ.НоваяСтрока();
ТЗ.Код = Запрос.Контрагенты.Код;
ТЗ.Контрагент = Запрос.Контрагенты.Наименование;
ТЗ.ЭлАдрес = Запрос.ЭлПочта;
КонецЕсли;
иначе
Если ПустаяСтрока(Запрос.ЭлПочта)=1 Тогда
Продолжить;
Иначе
ТЗ.НоваяСтрока();
ТЗ.Код = Запрос.Контрагенты.Код;
ТЗ.Контрагент = Запрос.Контрагенты.Наименование;
ТЗ.ЭлАдрес = Запрос.ЭлПочта;
КонецЕсли;
Конецесли;
ЗаполненАдрес - это чекбокс.
Если сократить код, то получится:
Если ЗаполненАдрес<>ПустаяСтрока(Запрос.ЭлПоч та) Тогда
ТЗ.НоваяСтрока();
ТЗ.Код = Запрос.Контрагенты.Код;
ТЗ.Контрагент = Запрос.Контрагенты.Наименование;
ТЗ.ЭлАдрес = Запрос.ЭлПочта;
КонецЕсли;
//часть текста запроса
|ИЗ
| ЭтапыОплатыИсходник КАК ЭтапыОплаты
|//ТекстОтбора
|{ГДЕ
.................
//Добавляем поля если используется отбор
ТекстОтбора="ГДЕ ";
ТекстОтбора=ТекстОтбора+" ИСТИНА";
НомерПеременнойОтбора=1;
Для каждого СтрокаТекущегоОтбора Из ПостроительОтчета.Отбор Цикл
if НЕ СтрокаТекущегоОтбора.Использование then
continue;
endif;
СложноеИмяПоля=ПолучитьИмяПоляБезТочек(СтрокаТекущегоОтбора.ПутьКДанным);
Если ПостроительОтчета.Отбор.Найти(СложноеИмяПоля)=Неопределено Тогда
Если СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.Больше Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" > &ПеременнаяОтбора"+НомерПеременнойОтбора;
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.БольшеИлиРавно Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" >= &ПеременнаяОтбора"+НомерПеременнойОтбора;
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.ВИерархии или
СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.ВСписке или
СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.ВСпискеПоИерархии Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" В (&ПеременнаяОтбора"+НомерПеременнойОтбора+")";
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.ВИерархии Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" В ИЕРАРХИИ(&ПеременнаяОтбора"+НомерПеременнойОтбора+")";
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.Меньше Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" < &ПеременнаяОтбора"+НомерПеременнойОтбора;
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.МеньшеИлиРавно Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" <= &ПеременнаяОтбора"+НомерПеременнойОтбора;
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.НеВСписке или
СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.НеВСпискеПоИерархии Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И НЕ "+"ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" В (&ПеременнаяОтбора"+НомерПеременнойОтбора+")";
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.НеВИерархии Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И НЕ "+"ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" В ИЕРАРХИИ(&ПеременнаяОтбора"+НомерПеременнойОтбора+")";
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.НеРавно Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" <> &ПеременнаяОтбора"+НомерПеременнойОтбора;
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.Равно Тогда
ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" = &ПеременнаяОтбора"+НомерПеременнойОтбора;
Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
НомерПеременнойОтбора=НомерПеременнойОтбора+1
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если НомерПеременнойОтбора>1 Тогда
Запрос.Текст=СтрЗаменить(Запрос.Текст,"//ТекстОтбора",ТекстОтбора);
КонецЕсли;
При этом при всем, в отчете используется 2 построителя ( на одном не смог построить , одного видимо было было мало для стратегии заложенной в голове:) ) + между ними используется куча запросов , в которых выгружаются таблицы (РезультатЗапроса.Выполнить().Выгрузить( )) и передаются в следующие запросы как параметры.
От себя добавлю: Добавлял элементарные вещи, чтобы вывести пару дополнительных колонок - убить 1 час , тоже самое, что ничего не сделать..... Да и к тому же отчет рисуется через "ТабДок.Присоеденить".
//часть текста запроса
|ИЗ
| ЭтапыОплатыИсходник КАК ЭтапыОплаты
|//ТекстОтбора
|{ГДЕ
.................
//Добавляем поля если используется отбор
ТекстОтбора="ГДЕ ";
ТекстОтбора=ТекстОтбора+" ИСТИНА"; //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 час , тоже самое, что ничего не сделать..... Да и к тому же отчет рисуется через "ТабДок.Присоеденить".
Процедура Флажок1ПриИзменении(Элемент)
//выбираем контрагента
ТК = табК.найти(Контрагент, "контрагент");
Первый = 2+2;
для кк=0 по табК.Количество()-1 цикл
элементыформы.МаршрутныйЛистК.Область("C"+число(кк*3+1+Первый)).Видимость = (ОтобразитьВсеМеста и ТабК[кк]=ТК);
конеццикла;
КонецПроцедуры
Продукт "1С:Молокозавод. Международная поставка для пользователей "1С:Управление производственным предприятием "
Форма документа "МОЛ_ЗаказПоМаршруту".
Фирма "ЦНТУиК" (ЗАО "Центр научно-технических услуг и консультаций").
Не понятно что они курят.
Для Индекс = 1 По 4 Цикл
Если Индекс = 1 Тогда
<Действие1...>;
ИначеЕсли Индекс = 2 Тогда
<Действие2...>;
ИначеЕсли Индекс = 3 Тогда
<Действие3...>;
ИначеЕсли Индекс = 4 Тогда
<Действие4...>;
КонецЦикла;
КонецЦикла