1. Для кода 
используй [code][/code] или 
[code=e1cv8][/code]!!!
2. Пиши код аккуратней (отступы) - легче будет разобраться
3. Всю конструкцию
Если НЕ ЗначениеЗаполнено(МОЛ) Тогда
    Если  ОтобратьПоПустомуМОЛ = Истина  Тогда
        Запрос.УстановитьПараметр("МОЛ",МОЛ);
        ...;
    Иначе
        ...;
    КонецЕсли;
ИначеЕсли ЗначениеЗаполнено(МОЛ) Тогда
    Запрос.УстановитьПараметр("МОЛ",МОЛ);
    ...;
КонецЕсли;
логичней (для простоты чтения кода) заменить
Если ЗначениеЗаполнено(МОЛ) ИЛИ (ОтобратьПоПустомуМОЛ = Истина) Тогда
    Запрос.УстановитьПараметр("МОЛ",МОЛ);
    ...;
Иначе
    ...;
КонецЕсли;
4. Строки для замены лучше оформлять как параметры, тогда можно будет легко использовать конструктор запросов. Вместо:
"...
|ГДЕ
|        ...
|        УсловиеНаМОЛ
|        УсловиеНаМестонахождение
|...";
лучше написать
"...
|ГДЕ
|        ...
|        И &УсловиеНаМОЛ
|        И &УсловиеНаМестонахождение
|...";
и тогда:
Если ЗначениеЗаполнено(ПодразделениеОрганизаций) Тогда
    Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловиеНаМестонахождение", "(МестонахождениеОССрезПоследних.Местонахождение = &Местонахождение)");
    Запрос.УстановитьПараметр("Местонахождение", ПодразделениеОрганизаций);
Иначе
    Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловиеНаМестонахождение", "ИСТИНА");
КонецЕсли;
Выполнишь все пожелания - в результате думаю легко будет найти ошибку, ибо тут скорее ошибка от неаккуратности (где-то опечатка или что-то подобное)