Добрый день, не могу правильно сформулировать процедуру, есть запрос
/4 Производим поиск по номенклатуры по штрихкоду
 Запрос = Новый Запрос("ВЫБРАТЬ
                       | ВЫРАЗИТЬ(т.Штрихкод КАК СТРОКА(250)) КАК ШтрихКод,
                       | т.КодТНВЭД КАК КодТНВЭД
                       |ПОМЕСТИТЬ времтаб
                       |ИЗ
                       | &Таб КАК т
                       |;
                       |
                       |////////////////////////////////////////////////////////////­////////////////////
                       |ВЫБРАТЬ
                       | времтаб.ШтрихКод КАК ШтрихКод,
                       | времтаб.КодТНВЭД КАК КодТНВЭД,
                       | ШтрихкодыНоменклатуры.Номенклатура КАК Номенклатура,
                       | ШтрихкодыНоменклатуры.Номенклатура.КодТНВЭД КАК НоменклатураКодТНВЭД
                       |ИЗ
                       | времтаб КАК времтаб
                       | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
                       | ПО (времтаб.ШтрихКод = (ВЫРАЗИТЬ(ШтрихкодыНоменклатуры.Штрихкод КАК СТРОКА(250))))
                       |ГДЕ
                       | ШтрихкодыНоменклатуры.Номенклатура.КодТНВЭД = ЗНАЧЕНИЕ(Справочник.КлассификаторТНВЭД.ПустаяСсылка)");

 Запрос.УстановитьПараметр("таб", Таб);

 Результат = Запрос.Выполнить().Выгрузить();

 Для каждого строка из Результат Цикл
  Об = строка.Номенклатура.ПолучитьОбъект();
  //Об = Справочники.Номенклатура.ПустаяСсылка().ПолучитьОбъект();
  КодТНВЭД = НайтиКодТНВЭДПоНаименованию(строка.КодТНВЭД);
  Если КодТНВЭД = Неопределено тогда
   // Сообщить пользователю
     Продолжить;
  КонецЕсли;

  Об.КодТНВЭД = КодТНВЭД;
  Об.ОбменДанными.Загрузка = Истина; // Чтобы не выполнялася процедура проверки
  //Об.Записать();

 КонецЦикла
 То есть я ищу номенклатуру по штрихкоду в справочнике, сопоставляю с штрихкодами, которые у меня находятся во временной таблице. После мне нужно обойти значения, и если значения КоДТНВД нет - то присвоить, которое есть уже во временной таблице, а если есть - поменять его
---
запрос в этом случае будет выглядеть примерно так:
"ВЫБРАТЬ
| ВЫРАЗИТЬ(т.Штрихкод КАК СТРОКА(250)) КАК ШтрихКод,
| т.КодТНВЭД КАК КодТНВЭД
|ПОМЕСТИТЬ времтаб
|ИЗ
| &Таб КАК т
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
| времтаб.ШтрихКод КАК ШтрихКод,
| времтаб.КодТНВЭД КАК КодТНВЭД
|ПОМЕСТИТЬ ВТ
|ИЗ
| Справочник.КлассификаторТНВЭД КАК КлассификаторТНВЭД
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ времтаб КАК времтаб
| ПО КлассификаторТНВЭД.Наименование = времтаб.КодТНВЭД
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
| ВТ.ШтрихКод КАК ШтрихКод,
| ВТ.КодТНВЭД КАК КодТНВЭД,
| ШтрихкодыНоменклатуры.Номенклатура КАК Номенклатура
|ИЗ
| ВТ КАК ВТ
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
| ПО (ВТ.ШтрихКод = (ВЫРАЗИТЬ(ШтрихкодыНоменклатуры.Штрихкод КАК СТРОКА(250))))
| И (ШтрихкодыНоменклатуры.Номенклатура.КодТНВЭД = ЗНАЧЕНИЕ(Справочник.КлассификаторТНВЭД.ПустаяСсылка))
---
как-то так:
 Запрос = Новый Запрос(
  "ВЫБРАТЬ
  | ВЫРАЗИТЬ(т.Штрихкод КАК СТРОКА(250)) КАК ШтрихКод,
  | т.КодТНВЭД КАК КодТНВЭД
  |ПОМЕСТИТЬ времтаб
  |ИЗ
  | &Таб КАК т
  |;
  |
  |////////////////////////////////////////////////////////////­////////////////////
  |ВЫБРАТЬ
  | времтаб.ШтрихКод КАК ШтрихКод,
  | времтаб.КодТНВЭД КАК КодТНВЭД,
  | ШтрихкодыНоменклатуры.Номенклатура КАК Номенклатура
  |ИЗ
  | времтаб КАК времтаб
  | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
  | ПО (времтаб.ШтрихКод = (ВЫРАЗИТЬ(ШтрихкодыНоменклатуры.Штрихкод КАК СТРОКА(250))))
  | И (ШтрихкодыНоменклатуры.Номенклатура.КодТНВЭД = ЗНАЧЕНИЕ(Справочник.КлассификаторТНВЭД.ПустаяСсылка))");

 Запрос.УстановитьПараметр("таб", Таб);
 Результат = Запрос.Выполнить().Выгрузить();
 Для каждого строка из Результат Цикл
  Если ЗначениеЗаполнено(строка.Номенклатура) Тогда
   Об = строка.Номенклатура.ПолучитьОбъект();
   КодТНВЭД = НайтиКодТНВЭДПоНаименованию(строка.КодТНВЭД);
   Если КодТНВЭД = Справочник.КлассификаторТНВЭД.ПустаяСсылка() тогда
    Продолжить;
   КонецЕсли;
   Об.КодТНВЭД = КодТНВЭД;
   Об.ОбменДанными.Загрузка = Истина; // Чтобы не выполнялася процедура проверки
   //Об.Записать();
  КонецЕсли;
 КонецЦикла
---
спасибо, но у меня вопрос в основном был именно по процедуре НайтиКодТНВЭДПоНаименованию(строка.КодТНВЭД);, как ее сформулировать)
---
ее можно переписать как Справочники.КлассификаторТНВЭД.НайтиПоНаименованию(строка.КодТНВЭД), а можно и сразу в запросе соединять справочник с временной таблицей (смотря что передаете в качестве параметра Таб)
---
запрос в этом случае будет выглядеть примерно так:
"ВЫБРАТЬ
| ВЫРАЗИТЬ(т.Штрихкод КАК СТРОКА(250)) КАК ШтрихКод,
| т.КодТНВЭД КАК КодТНВЭД
|ПОМЕСТИТЬ времтаб
|ИЗ
| &Таб КАК т
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
| времтаб.ШтрихКод КАК ШтрихКод,
| времтаб.КодТНВЭД КАК КодТНВЭД
|ПОМЕСТИТЬ ВТ
|ИЗ
| Справочник.КлассификаторТНВЭД КАК КлассификаторТНВЭД
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ времтаб КАК времтаб
| ПО КлассификаторТНВЭД.Наименование = времтаб.КодТНВЭД
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
| ВТ.ШтрихКод КАК ШтрихКод,
| ВТ.КодТНВЭД КАК КодТНВЭД,
| ШтрихкодыНоменклатуры.Номенклатура КАК Номенклатура
|ИЗ
| ВТ КАК ВТ
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
| ПО (ВТ.ШтрихКод = (ВЫРАЗИТЬ(ШтрихкодыНоменклатуры.Штрихкод КАК СТРОКА(250))))
| И (ШтрихкодыНоменклатуры.Номенклатура.КодТНВЭД = ЗНАЧЕНИЕ(Справочник.КлассификаторТНВЭД.ПустаяСсылка))
---
Спасибо большое
---
Предлагаю не принимать запрос как данность, а переделать его так чтоб вся работа по отбору номенклатуры у которой необходимо сменить код ТНВЭД легла на него.
---
И ?

У тебя КодТНВЭД - элемент справочника, а в твоей тз - строка.
Сперва найди по коду тнвд свой элемент справочника (можно и в самом запросе это сделать левым соединением).
Потом уже, в выборке присваивай стразу номенклатуре не строку тнвд, а найденный элемент справочника. Усё.

ЗЫ: ну и вот это твоё условие
ГДЕ
| ШтрихкодыНоменклатуры.Номенклатура.КодТНВЭД = ЗНАЧЕНИЕ(Справочник.КлассификаторТНВЭД.ПустаяСсылка)"

сразу отрежет тебе всю номенклатуру, в которой был код ТНВД, но возможно, не тот, что во временной твоей табличке, который тоже надо поменять.
---
Запрос.УстановитьПараметр("таб", Таб);
Результат = Запрос.Выполнить().Выгрузить();
Для каждого строка из Результат Цикл
Если ЗначениеЗаполнено(строка.Номенклатура) Тогда
Об = строка.Номенклатура.ПолучитьОбъект();
КодТНВЭД = НайтиКодТНВЭДПоНаименованию(строка.КодТНВЭД);
Если КодТНВЭД = Справочник.КлассификаторТНВЭД.ПустаяСсылка() тогда
Продолжить;
КонецЕсли;
Об.КодТНВЭД = КодТНВЭД;
Об.ОбменДанными.Загрузка = Истина; // Чтобы не выполнялася процедура проверки
//Об.Записать();
КонецЕсли;
КонецЦикла

Не догоняю, т.е. НайтиКодТНВЭДПоНаименованию(строка.КодТНВЭД) - сделать выборку?