Добрый день. Начинающий программист. Подскажите пожалуйста. Мне нужно сравнить значение топов номенклатуры из Exel документа с базой 1с и те значения, которые будут не совпадать (с базой) вывести в обычный табличный документ. Результат у меня выходит не корректно, так как не важно, совпадают значения или нет, выводятся данные Exel документа. Я так понимаю, что у меня проблема где то в запросе, но сам не могу найти ошибку. Подскажите пожалуйста.

```1c
    Процедура КнопкаВыполнитьНажатие(Кнопка)

    ТабДок = Новый ТабличныйДокумент;
    Макет = ПолучитьМакет("Макет");
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьТело = Макет.ПолучитьОбласть("Тело");
    ТабДок.Вывести(ОбластьШапка);

    ТЗНоменклатуры = Новый ТаблицаЗначений;
    ТЗНоменклатуры.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
    ТЗНоменклатуры.Колонки.Добавить("ТопПрогноз", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.СвойстваОбъектов"));
    ТЗНоменклатуры.Колонки.Добавить("ЗначениеТопаПрогноз", Новый ОписаниеТипов("СправочникСсылка.ЗначенияСвойствОбъектов"));

    Для Каждого Строка ИЗ ТабличноеПоле Цикл

    НоменклатураДокументаТекст = СокрЛП(Строка[0]);
    НоменклатураДокумента = Справочники.Номенклатура.НайтиПоНаименованию(НоменклатураДокументаТекст);

    Если НоменклатураДокумента.Пустая() ИЛИ НоменклатураДокумента.ЭтоГруппа ИЛИ НоменклатураДокументаТекст = " Тогда
    Продолжить;
    КонецЕсли;

    НоваяСтрока = ТЗНоменклатуры.Добавить();
    НоваяСтрока.Номенклатура = НоменклатураДокумента;

    ТопПрогнозДокумента = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду("000000467");
    НоваяСтрока.ТопПрогноз = ТопПрогнозДокумента;

    ЗначениеТопаПрогнозДокументаТекст = СокрЛП(Строка[8]);
    ЗначениеТопаПрогнозДокумента = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(ЗначениеТопаПрогнозДокументаТекст);

    Если ЗначениеТопаПрогнозДокумента.Пустая() Тогда
    Продолжить;
    КонецЕсли;

    НоваяСтрока.ЗначениеТопаПрогноз = ЗначениеТопаПрогнозДокумента;

    КонецЦикла;

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ТЗНоменклатуры.Номенклатура КАК НоменклатураДокумента,
    | ТЗНоменклатуры.ТопПрогноз КАК ТопПрогнозДокумента,
    | ТЗНоменклатуры.ЗначениеТопаПрогноз КАК ЗначениеTOPGPДокумента
    |ПОМЕСТИТЬ ТЗНоменклатурыДокумента
    |ИЗ
    | &ТЗНоменклатуры КАК ТЗНоменклатуры
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | ТЗНоменклатурыДокумента.НоменклатураДокумента КАК НоменклатураДокумента,
    | ТЗНоменклатурыДокумента.ТопПрогнозДокумента КАК ТопПрогнозДокумента,
    | ТЗНоменклатурыДокумента.ЗначениеTOPGPДокумента КАК ЗначениеTOPGPДокумента
    |ИЗ
    | ТЗНоменклатурыДокумента КАК ТЗНоменклатурыДокумента
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    | ПО ТЗНоменклатурыДокумента.НоменклатураДокумента = ЗначенияСвойствОбъектов.Объект
    |ГДЕ
    | ЗначенияСвойствОбъектов.Свойство.Код = "000000467"
    | И ЗначенияСвойствОбъектов.Значение <> ТЗНоменклатурыДокумента.ЗначениеTOPGPДокумента";

    Запрос.УстановитьПараметр("ТЗНоменклатуры", ТЗНоменклатуры);
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();

    Пока Выборка.Следующий() Цикл

    ОбластьТело.Параметры.Номенклатура = Выборка.НоменклатураДокумента;
    ОбластьТело.Параметры.ЗначениеТопаПрогноз = Выборка.ЗначениеTOPGPДокумента;
    ТабДок.Вывести(ОбластьТело);

    КонецЦикла;

    Если НЕ Результат.Пустой() Тогда
    ТабДок.Показать();
    Сообщить("Обработка завершена.", СтатусСообщения.Информация);
    Иначе
    Сообщить("Обработка завершена.", СтатусСообщения.Информация);
    КонецЕсли;

    КонецПроцедуры
```
---
```1c
    ТабДок = Новый ТабличныйДокумент;
    Макет = ПолучитьМакет("Макет");
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьТело = Макет.ПолучитьОбласть("Тело");
    ТабДок.Вывести(ОбластьШапка);

    Массив = Новый Массив;
    Массив.Добавить(Тип("Строка"));

    ОписаниеТиповСтрока = Новый ОписаниеТипов(Массив, , Новый КвалификаторыСтроки(100));

    ТЗНоменклатуры = Новый ТаблицаЗначений;
    ТЗНоменклатуры.Колонки.Добавить("Номенклатура", ОписаниеТиповСтрока);
    ТЗНоменклатуры.Колонки.Добавить("ЗначениеТопаПрогноз", ОписаниеТиповСтрока);

    Для Каждого Строка ИЗ ТабличноеПоле Цикл

    НоменклатураДокументаТекст = СокрЛП(Строка[0]);
    Если НоменклатураДокументаТекст = " ИЛИ НоменклатураДокументаТекст = "Номенклатура" Тогда
    Продолжить;
    КонецЕсли;

    НаименованиеЗначенияТопаПрогнозДокумента = СокрЛП(Строка[8]);

    НоваяСтрока = ТЗНоменклатуры.Добавить();
    НоваяСтрока.Номенклатура = НоменклатураДокументаТекст;
    НоваяСтрока.ЗначениеТопаПрогноз = НаименованиеЗначенияТопаПрогнозДокумента;

    КонецЦикла;

    Запрос = Новый Запрос;
    Запрос.Текст =

    "ВЫБРАТЬ
    | ТЗНоменклатуры.Номенклатура КАК НоменклатураДокумента,
    | ТЗНоменклатуры.ЗначениеТопаПрогноз КАК ЗначениеТопаПрогноз
    |ПОМЕСТИТЬ ТЗНоменклатурыДокумента
    |ИЗ
    | &ТЗНоменклатуры КАК ТЗНоменклатуры
    |
    |ИНДЕКСИРОВАТЬ ПО
    | НоменклатураДокумента
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | ЗначенияСвойствОбъектов.Объект.Наименование КАК Номенклатура,
    | ЗначенияСвойствОбъектов.Значение.Наименование КАК ЗначениеТопаНаименование
    |ПОМЕСТИТЬ РСНоменклатуры
    |ИЗ
    | РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    |ГДЕ
    | ЗначенияСвойствОбъектов.Свойство.Код = "000000467"
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    | ТЗНоменклатурыДокумента.НоменклатураДокумента КАК НоменклатураДокумента,
    | ВЫБОР
    | КОГДА РСНоменклатуры.ЗначениеТопаНаименование ЕСТЬ NULL
    | И ТЗНоменклатурыДокумента.ЗначениеТопаПрогноз = ""
    | ТОГДА ТЗНоменклатурыДокумента.ЗначениеТопаПрогноз
    | КОГДА РСНоменклатуры.ЗначениеТопаНаименование ЕСТЬ NULL
    | И ТЗНоменклатурыДокумента.ЗначениеТопаПрогноз <> ""
    | ТОГДА ТЗНоменклатурыДокумента.ЗначениеТопаПрогноз
    | КОГДА РСНоменклатуры.ЗначениеТопаНаименование <> ТЗНоменклатурыДокумента.ЗначениеТопаПрогноз
    | ТОГДА ТЗНоменклатурыДокумента.ЗначениеТопаПрогноз
    | КОНЕЦ КАК ЗначениеТопаПрогноз,
    | ВЫБОР
    | КОГДА РСНоменклатуры.ЗначениеТопаНаименование ЕСТЬ NULL
    | ТОГДА "NULL"
    | КОНЕЦ КАК ЗначениеТопаНаименование
    |ИЗ
    | ТЗНоменклатурыДокумента КАК ТЗНоменклатурыДокумента
    | ЛЕВОЕ СОЕДИНЕНИЕ РСНоменклатуры КАК РСНоменклатуры
    | ПО ТЗНоменклатурыДокумента.НоменклатураДокумента = РСНоменклатуры.Номенклатура";

    Запрос.УстановитьПараметр("ТЗНоменклатуры", ТЗНоменклатуры);
    Выборка = Запрос.Выполнить().Выбрать();

    Пока Выборка.Следующий() Цикл

    Если Выборка.ЗначениеТопаНаименование = "NULL" И Выборка.ЗначениеТопаПрогноз = " Тогда
    Продолжить;

    ИначеЕсли Выборка.ЗначениеТопаПрогноз <> Выборка.ЗначениеТопаНаименование Тогда

    ОбластьТело.Параметры.Номенклатура = Выборка.НоменклатураДокумента;
    ОбластьТело.Параметры.ЗначениеТопаПрогноз = Выборка.ЗначениеТопаПрогноз;
    ТабДок.Вывести(ОбластьТело);

    КонецЕсли;

    КонецЦикла;

    ТабДок.Показать();
    Сообщить("Обработка завершена.", СтатусСообщения.Информация);
```
---
Такой вариант попробуйте:

```1c
    Запрос.Текст =
    "ВЫБРАТЬ
    | ТЗНоменклатуры.Номенклатура КАК НоменклатураДокумента,
    | ТЗНоменклатуры.ТопПрогноз КАК ТопПрогнозДокумента,
    | ТЗНоменклатуры.ЗначениеТопаПрогноз КАК ЗначениеTOPGPДокумента
    |ПОМЕСТИТЬ ТЗНоменклатурыДокумента
    |ИЗ
    | &ТЗНоменклатуры КАК ТЗНоменклатуры
    |;
    |
    |////////////////////////////////////////////////////////////­­////////////////////
    |ВЫБРАТЬ
    | ТЗНоменклатурыДокумента.НоменклатураДокумента КАК НоменклатураДокумента,
    | ТЗНоменклатурыДокумента.ТопПрогнозДокумента КАК ТопПрогнозДокумента,
    | ТЗНоменклатурыДокумента.ЗначениеTOPGPДокумента КАК ЗначениеTOPGPДокумента
    |ИЗ
    | ТЗНоменклатурыДокумента КАК ТЗНоменклатурыДокумента
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    | ПО ТЗНоменклатурыДокумента.НоменклатураДокумента = ЗначенияСвойствОбъектов.Объект
    | И ЗначенияСвойствОбъектов.Свойство.Код = "000000467"
    |ГДЕ
    | (ЗначенияСвойствОбъектов.Значение IS NULL)
    | ИЛИ (ЗначенияСвойствОбъектов.Значение <> ТЗНоменклатурыДокумента.ЗначениеTOPGPДокумента)";
```
---
К сожалению, такой вариант тоже не верный, так как всё равно выводятся одинаковые позиции.
---
Хорошо.
Тогда давайте такой диагностический запрос выполним, посмотрим, что получится:

```1c
    Запрос.Текст =
    "ВЫБРАТЬ
    | ТЗНоменклатуры.Номенклатура КАК НоменклатураДокумента,
    | ТЗНоменклатуры.ТопПрогноз КАК ТопПрогнозДокумента,
    | ТЗНоменклатуры.ЗначениеТопаПрогноз КАК ЗначениеTOPGPДокумента
    |ПОМЕСТИТЬ ТЗНоменклатурыДокумента
    |ИЗ
    | &ТЗНоменклатуры КАК ТЗНоменклатуры
    |;
    |
    |////////////////////////////////////////////////////////////­­////////////////////
    |ВЫБРАТЬ
    | ТЗНоменклатурыДокумента.НоменклатураДокумента КАК НоменклатураДокумента,
    | ТЗНоменклатурыДокумента.ТопПрогнозДокумента КАК ТопПрогнозДокумента,
    | ТЗНоменклатурыДокумента.ЗначениеTOPGPДокумента КАК ЗначениеTOPGPДокумента,
    | ЗначенияСвойствОбъектов.Значение КАК ЗначениеСвойстваИзБазы
    |ИЗ
    | ТЗНоменклатурыДокумента КАК ТЗНоменклатурыДокумента
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    | ПО ТЗНоменклатурыДокумента.НоменклатураДокумента = ЗначенияСвойствОбъектов.Объект
    | И ТЗНоменклатурыДокумента.ТопПрогнозДокумента = ЗначенияСвойствОбъектов.Свойство
    |
    |";
```
---
Нашёл проблему, пытаюсь её корректно исправить. Как минимум проблема в том, что у меня в базе есть характеристики TOP и TOP(GP). Следовательно, у них разные значения (для TOP одни, для TOP(GP) другие). Но по сути наименования у них одинаковые (например у характеристики TOP есть значение с наименованием "E" и у характеристики TOP(GP) есть значение с наименованием "E"), а вот коды у них разные. Получается когда я формирую ТЗ и выполняю
```1c
    ЗначениеТопаПрогнозДокументаТекст = СокрЛП(Строка[8]);
    ЗначениеТопаПрогнозДокумента = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(ЗначениеТопаПрогнозДокументаТекст);
```
 у меня присваиваются коды характеристики TOP. Вот и запрос верно отрабатывает, так как код значения характеристики TOP <> коду значения характеристики TOP(GP).
---
Ну да, по сути Вы правы. Только в запросе не коды элементов сравниваются между собой, а внутренние идентификаторы элементов. Это строка длиной 36 символов, состоящая из цифр от 0 до 9 и букв от А до F формата UUID.
---
Только в запросе не коды элементов сравниваются между собой, а внутренние идентификаторы элементов. Это строка длиной 36 символов, состоящая из цифр от 0 до 9 и букв от А до F формата UUID.

Возможно, но я к тому, что я изначально не совсем верные данные в ТЗ передаю.
---
Сделал так:
```1c
    Процедура КнопкаВыполнитьНажатие(Кнопка)

    ТабДок = Новый ТабличныйДокумент;
    Макет = ПолучитьМакет("Макет");
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьТело = Макет.ПолучитьОбласть("Тело");
    ТабДок.Вывести(ОбластьШапка);

    ТЗНоменклатуры = Новый ТаблицаЗначений;
    ТЗНоменклатуры.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
    ТЗНоменклатуры.Колонки.Добавить("ЗначениеТопаПрогноз", Новый ОписаниеТипов("СправочникСсылка.ЗначенияСвойствОбъектов"));

    Для Каждого Строка ИЗ ТабличноеПоле Цикл

    НоменклатураДокументаТекст = СокрЛП(Строка[0]);
    НоменклатураДокумента = Справочники.Номенклатура.НайтиПоНаименованию(НоменклатураДокументаТекст);

    Если НоменклатураДокумента.Пустая() ИЛИ НоменклатураДокумента.ЭтоГруппа ИЛИ НоменклатураДокументаТекст = " Тогда
    Продолжить;
    КонецЕсли;

    НоваяСтрока = ТЗНоменклатуры.Добавить();

    НоваяСтрока.Номенклатура = НоменклатураДокумента;

    ЗначенияТопаПрогнозДокументаТекст = СокрЛП(Строка[8]);
    TOPGP = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду("000000467");
    ЗначенияТопаПрогнозДокумента = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(ЗначенияТопаПрогнозДокументаТекст, Истина,, TOPGP);
    Если ЗначенияТопаПрогнозДокумента.Пустая() Тогда
    Продолжить;
    КонецЕсли;
    НоваяСтрока.ЗначениеТопаПрогноз = ЗначенияТопаПрогнозДокумента;

    КонецЦикла;

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ТЗНоменклатуры.Номенклатура КАК НоменклатураДокумента,
    | ТЗНоменклатуры.ЗначениеТопаПрогноз КАК ЗначениеТопаПрогноз
    |ПОМЕСТИТЬ ТЗНоменклатурыДокумента
    |ИЗ
    | &ТЗНоменклатуры КАК ТЗНоменклатуры
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | ЗначенияСвойствОбъектов.Объект КАК Номенклатура,
    | ЗначенияСвойствОбъектов.Значение КАК ЗначениеТопа
    |ПОМЕСТИТЬ РСНоменклатуры
    |ИЗ
    | РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    |ГДЕ
    | ЗначенияСвойствОбъектов.Свойство.Код = "000000467"
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | ТЗНоменклатурыДокумента.НоменклатураДокумента КАК НоменклатураДокумента,
    | ТЗНоменклатурыДокумента.ЗначениеТопаПрогноз КАК ЗначениеTOPGPДокумента
    |ИЗ
    | ТЗНоменклатурыДокумента КАК ТЗНоменклатурыДокумента
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РСНоменклатуры КАК РСНоменклатуры
    | ПО ТЗНоменклатурыДокумента.НоменклатураДокумента = РСНоменклатуры.Номенклатура
    |ГДЕ
    | РСНоменклатуры.ЗначениеТопа <> ТЗНоменклатурыДокумента.ЗначениеТопаПрогноз";

    Запрос.УстановитьПараметр("ТЗНоменклатуры", ТЗНоменклатуры);
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();

    Пока Выборка.Следующий() Цикл

    ОбластьТело.Параметры.Номенклатура = Выборка.НоменклатураДокумента;
    ОбластьТело.Параметры.ЗначениеТопаПрогноз = Выборка.ЗначениеTOPGPДокумента;
    ТабДок.Вывести(ОбластьТело);

    КонецЦикла;

    Если НЕ Результат.Пустой() Тогда
    ТабДок.Показать();
    Сообщить("Обработка завершена.", СтатусСообщения.Информация);
    Иначе
    Сообщить("Обработка завершена.", СтатусСообщения.Информация);
    КонецЕсли;

    КонецПроцедуры
```

Но теперь нужно добавить ещё часть, в которой будет проверяться, что если нет записей в РС, то нужно выводить ту номенклатуру и значение топа, которые указаны в документе Exel. То есть нужна проверка на отсутствие записей в регистре.
---
Не могли бы помочь с этим? Но теперь нужно добавить ещё часть, в которой будет проверяться, что если нет записей в РС, то нужно выводить ту номенклатуру и значение топа, которые указаны в документе Exel. То есть нужна проверка на отсутствие записей в регистре.
---
Это тем же самым запросом делается и в том же самом одном цикле обе Ваши части нужно выводить в табличный документ.
Нужно внутреннее соединение заменить на левое. А в селект добавить еще одно поле в виде кейс-конструкции: если любое поле второй таблицы есть нулл, то это вторая часть, иначе первая.
---
```1c
    ТабДок = Новый ТабличныйДокумент;
    Макет = ПолучитьМакет("Макет");
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьТело = Макет.ПолучитьОбласть("Тело");
    ТабДок.Вывести(ОбластьШапка);

    Массив = Новый Массив;
    Массив.Добавить(Тип("Строка"));

    ОписаниеТиповСтрока = Новый ОписаниеТипов(Массив, , Новый КвалификаторыСтроки(100));

    ТЗНоменклатуры = Новый ТаблицаЗначений;
    ТЗНоменклатуры.Колонки.Добавить("Номенклатура", ОписаниеТиповСтрока);
    ТЗНоменклатуры.Колонки.Добавить("ЗначениеТопаПрогноз", ОписаниеТиповСтрока);

    Для Каждого Строка ИЗ ТабличноеПоле Цикл

    НоменклатураДокументаТекст = СокрЛП(Строка[0]);
    Если НоменклатураДокументаТекст = " ИЛИ НоменклатураДокументаТекст = "Номенклатура" Тогда
    Продолжить;
    КонецЕсли;

    НаименованиеЗначенияТопаПрогнозДокумента = СокрЛП(Строка[8]);

    НоваяСтрока = ТЗНоменклатуры.Добавить();
    НоваяСтрока.Номенклатура = НоменклатураДокументаТекст;
    НоваяСтрока.ЗначениеТопаПрогноз = НаименованиеЗначенияТопаПрогнозДокумента;

    КонецЦикла;

    Запрос = Новый Запрос;
    Запрос.Текст =

    "ВЫБРАТЬ
    | ТЗНоменклатуры.Номенклатура КАК НоменклатураДокумента,
    | ТЗНоменклатуры.ЗначениеТопаПрогноз КАК ЗначениеТопаПрогноз
    |ПОМЕСТИТЬ ТЗНоменклатурыДокумента
    |ИЗ
    | &ТЗНоменклатуры КАК ТЗНоменклатуры
    |
    |ИНДЕКСИРОВАТЬ ПО
    | НоменклатураДокумента
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | ЗначенияСвойствОбъектов.Объект.Наименование КАК Номенклатура,
    | ЗначенияСвойствОбъектов.Значение.Наименование КАК ЗначениеТопаНаименование
    |ПОМЕСТИТЬ РСНоменклатуры
    |ИЗ
    | РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    |ГДЕ
    | ЗначенияСвойствОбъектов.Свойство.Код = "000000467"
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    | ТЗНоменклатурыДокумента.НоменклатураДокумента КАК НоменклатураДокумента,
    | ВЫБОР
    | КОГДА РСНоменклатуры.ЗначениеТопаНаименование ЕСТЬ NULL
    | И ТЗНоменклатурыДокумента.ЗначениеТопаПрогноз = ""
    | ТОГДА ТЗНоменклатурыДокумента.ЗначениеТопаПрогноз
    | КОГДА РСНоменклатуры.ЗначениеТопаНаименование ЕСТЬ NULL
    | И ТЗНоменклатурыДокумента.ЗначениеТопаПрогноз <> ""
    | ТОГДА ТЗНоменклатурыДокумента.ЗначениеТопаПрогноз
    | КОГДА РСНоменклатуры.ЗначениеТопаНаименование <> ТЗНоменклатурыДокумента.ЗначениеТопаПрогноз
    | ТОГДА ТЗНоменклатурыДокумента.ЗначениеТопаПрогноз
    | КОНЕЦ КАК ЗначениеТопаПрогноз,
    | ВЫБОР
    | КОГДА РСНоменклатуры.ЗначениеТопаНаименование ЕСТЬ NULL
    | ТОГДА "NULL"
    | КОНЕЦ КАК ЗначениеТопаНаименование
    |ИЗ
    | ТЗНоменклатурыДокумента КАК ТЗНоменклатурыДокумента
    | ЛЕВОЕ СОЕДИНЕНИЕ РСНоменклатуры КАК РСНоменклатуры
    | ПО ТЗНоменклатурыДокумента.НоменклатураДокумента = РСНоменклатуры.Номенклатура";

    Запрос.УстановитьПараметр("ТЗНоменклатуры", ТЗНоменклатуры);
    Выборка = Запрос.Выполнить().Выбрать();

    Пока Выборка.Следующий() Цикл

    Если Выборка.ЗначениеТопаНаименование = "NULL" И Выборка.ЗначениеТопаПрогноз = " Тогда
    Продолжить;

    ИначеЕсли Выборка.ЗначениеТопаПрогноз <> Выборка.ЗначениеТопаНаименование Тогда

    ОбластьТело.Параметры.Номенклатура = Выборка.НоменклатураДокумента;
    ОбластьТело.Параметры.ЗначениеТопаПрогноз = Выборка.ЗначениеТопаПрогноз;
    ТабДок.Вывести(ОбластьТело);

    КонецЕсли;

    КонецЦикла;

    ТабДок.Показать();
    Сообщить("Обработка завершена.", СтатусСообщения.Информация);
```