Добрый вечер, коллеги.
Срочно нужен ваш совет.
Ситуация такова. Имеется справочник "штрих-коды ковров" и справочник "Склады ковров".
Проблема в том, что нужно убрать галку "Оприходован" по кодам в справочнике по одному складу.
Как можно упростить задачу? Я ниже прикрепил файл с кодами. Они актуальны в системе. Всем заранее спасибо за советы и критику.
---
Запрос нужно убрать из цикла, и запись вынести в отдельную процедуру вот примерно так

```1c
    &НаКлиенте
    Процедура ЗагрузкаExcel(Файл,Склад)
    Перем КолвоШК;

    РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
    Если Не РасширениеПодключено Тогда
    УстановитьРасширениеРаботыСФайлами();
    РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
    КонецЕсли;
    Если Не РасширениеПодключено Тогда
    Возврат;
    КонецЕсли;

    ВыбФайл = Новый Файл(Файл);
    Если Не ВыбФайл.Существует() Тогда
    Сообщить("Файл не существует или указан неверный путь!!!");
    Возврат
    Иначе
    ДокЭкзел = Новый COMОбъект("Excel.Application");
    ДокЭкзел.Workbooks.Open(СокрЛП(Файл));
    НомерЛиста = 1;

    ДокЭкзел.ActiveWorkbook.Worksheets(НомерЛиста).Activate();
    rows=ДокЭкзел.ActiveSheet.UsedRange.Rows.Count;

    ПроцентЗагрузки = 0;
    ШагиЗагрузки = 100/rows;
    КолвоШК = 0;

    ШКНоменклатура=Новый Соответствие;

    ЗаполнитьШКНоменклатураНаСервере(ШКНоменклатура,Склад);

    Для СчСтроки = 2 По rows + 1 Цикл
    Состояние("Идет загрузка листа номер="+НомерЛиста+". Прогресс:",ШагиЗагрузки*СчСтроки);
    //Попытка
    ШК = СокрЛП(Строка(Формат(ДокЭкзел.Cells(СчСтроки,2).Value,"ЧГ=")));

    СсылкаДанные=ШКНоменклатура.Получить(ШК);

    Если СсылкаДанные<>Неопределено Тогда
    ЗаписатьПризнакОприходования(СсылкаДанные);
    КонецЕсли;

    КонецЦикла;
    //Сообщить("Прочитано штрих-кодов "+КолвоШК+" шт.");
    //КонецЦикла;
    ДокЭкзел.Workbooks.Close();
    ДокЭкзел.Application.Quit();
    КонецЕсли;
    КонецПроцедуры

    &НаСервереБезКонтекста
    Процедура ЗаполнитьШКНоменклатураНаСервере(ШКНоменклатура, Склад)
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ШтрихКодыКовров.Ссылка КАК Ссылка,
    | ШтрихКодыКовров.Ссылка.Код КАК Код
    |ИЗ
    | Справочник.ШтрихКодыКовров КАК ШтрихКодыКовров
    |ГДЕ
    | ШтрихКодыКовров.Склад = &Склад
    | И ШтрихКодыКовров.Оприходован = ИСТИНА
    | И ШтрихКодыКовров.Продан = ЛОЖЬ";

    Запрос.УстановитьПараметр("Склад", Склад);

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

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

    Пока Выборка.Следующий() Цикл;
    ШКНоменклатура.Вставить(Выборка.Код,Выборка.Ссылка)
    КонецЦикла;

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

    &НаСервереБезКонтекста
    Процедура ЗаписатьПризнакОприходования(СсылкаДанные)
    ОбъектСсылкаДанные=СсылкаДанные.ПолучитьОбъект();
    ОбъектСсылкаДанные.Оприходован=Ложь;
    ОбъектСсылкаДанные.Записать();
    КонецПроцедуры
```
---
ОБработка "Групповое изменение реквизитов " не подойдет? https://its.1c.ru/db/metod8dev#content:5443:hdoc
---
У меня не открывается, выдает ошибку(
---
```1c
    &НаСервере
    Процедура ОбработкаExcel(ПутьКФайлу)
    РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
    Если Не РасширениеПодключено Тогда
    УстановитьРасширениеРаботыСФайлами();
    РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
    КонецЕсли;
    Если Не РасширениеПодключено Тогда
    //Сообщить
    Возврат;
    КонецЕсли;
    ВыбФайл = Новый Файл(ПутьКФайлу);
    Если Не ВыбФайл.Существует() Тогда
    Сообщить("Файл не существует или указан неверный путь!!!");
    Возврат
    Иначе
    ДокЭкзел = Новый COMОбъект("Excel.Application");
    ДокЭкзел.Workbooks.Open(СокрЛП(ПутьКФайлу));
    НомерЛиста = 1;
    ДокЭкзел.ActiveWorkbook.Worksheets(НомерЛиста).Activate();
    rows=ДокЭкзел.ActiveSheet.UsedRange.Rows.Count;

    ПроцентЗагрузки = 0;
    ШагиЗагрузки = 100/rows;
    КолвоШК = 0;
    Для СчСтроки = 2 По rows + 1 Цикл
    Состояние("Идет загрузка листа номер="+НомерЛиста+". Прогресс:",ШагиЗагрузки*СчСтроки);
    //Попытка
    ШК = СокрЛП(Строка(Формат(ДокЭкзел.Cells(СчСтроки,2).Value,"ЧГ=")));
    Если (Не ЗначениеЗаполнено(ШК))ИЛИ (СтрДлина(ШК)<2) Тогда
    Прервать;
    КонецЕсли;
    //Исключение
    //КонецПопытки
    Если СтрДлина(ШК)>8 Тогда
    Сообщить("Неверный штрих код Лист "+НомерЛиста+", номер строки "+СчСтроки);
    Иначе

    КонецЕсли;
    КонецЦикла;

    //КонецЦикла;
    ДокЭкзел.Workbooks.Close();
    ДокЭкзел.Application.Quit();
    КонецЕсли;
    КонецПроцедуры
```
---
Загрузку Excel-я сделал
---
Посоветуйте как поступить со складом
---
В форме списка справочника штрихкодов отбери штрихкоды по нужному складу.
Далее в форме выделяешь все отобранные элементы и жмешь "Все действия - Изменить выделенные"
---
Там один штрих код может быть привязан сразу к нескольким складам.
А мне нужно по одному складу и по нужным штрих-кодам, а не по всем.
---
отфильтруй настройкой списка по нужному складу , ибо через "Все действия - Изменить выделенные"
для тебя самый простой вариант
---
я отфильтровал по складу, но как же со штрихкодами? в ручную искать?
---
Какими штрихкодами?
нужно убрать галку "Оприходован" по кодам в справочнике

То есть ты хочешь сказать что только не для всех кодов нужно убрать галку?
Тогда по любому вручную
---
У тебя на картинке форма справочника ? Если да, то я вижу там один склад.
---
Потому что к этому складу привязан этот штрих-код.
---
Значит все-таки можно по этому складу список отобрать ?
---
Можно отобрать только список
---
И что тебе не понятно в (6), не умеешь строить отборы в динамическом списке ?
---
Зачем мне работать ручками с кодами ковров. Повторюсь мне дали список в количестве двух тысяч наименований.
---
Т.е. галочку надо снять не у всех штрихкодов по этому складу, а определенных ?

"Проблема в том, что нужно убрать галку "Оприходован" по кодам в справочнике по одному складу. " - составляй вопросы понятнее.
---
Снять галочку по определенным кодам и по определенному складу.
---
Вот наконец вытащили из него информацию! Что то что нужно менять хранится в Ексель файле!
Все - вопрос закрыт - ясно нужна обработка работающая с файлом.
Просто не было понимания что тебе реально нужно
---
Как то так вот...и мне не до смеха
---
Выражовываться нада по нашему - по-русски.... Тогда все поймут, что тебе нужно и быстро помогут.
А когда задача завуалирована так , что народ ничего не понимая, пытается помочь, а ты упираешься рогами и копытами, то понятно что смешного
---
Спасибо за помощь и критику.
---
У меня 500штрих кодов, которым нужно убрать галку
---
есть нюанс, что ковры могут быть проданы...
---
Это вообще никак тут ни при чем - ты меняешь справочник.
---
Я возможно неверно понял структуру данных..
В справочнике "штрих-коды ковров" нет связи с "Склады ковров" ?
---
Есть связь)
---
Поэтому я подумал, написать обработку.
Логика такова.
Реквизит "Склад" - Тип, Справочник.СкладыКовров.
Кнопка - ОбработкаДанных.
1)Выбираю склад.
2)При нажатии на кнопку ->Выбираю экзель файл, где находится список штрих-кодов->Идет цикл чтения в справочнике ШтрихКодыКовров по выбранному складу->Если проставлена галочка Оприходован, то убираем галку->Если Проставлены галочки "Оприходован и Продан" то ничего не делаем
---
Обработка ради одно операции - я тоже такие глупости делал в молодости .... )))))))
---
Насмешил, спасибо!
---
Короче я так понял, что клещами информацию не вытащишь...
Тогда пользуйся универсальным средством, консоль запросов с возможностью выполнения произвольного кода 1С.
Тут на сайте есть кстати...
И там отбери что душе угодно и измени парой строчек кода в результате отбора
---
Можете скинуть ссылку
---
Конечно , лови.
https://infostart.ru/public/335504/
Но ясно что для твоей задачи консоль не пойдет, но она обязательно должна быть в арсенале
---
```1c
    &НаСервере
    Процедура ЧтениеДанных(Склад)
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ШтрихКодыКовров.Код,
    | ШтрихКодыКовров.Оприходован,
    | ШтрихКодыКовров.Продан,
    | ШтрихКодыКовров.Склад,
    | ШтрихКодыКовров.Ссылка
    |ИЗ
    | Справочник.ШтрихКодыКовров КАК ШтрихКодыКовров
    |ГДЕ
    | ШтрихКодыКовров.Склад = &Склад
    | И ШтрихКодыКовров.Оприходован = ИСТИНА
    | И ШтрихКодыКовров.Продан = Ложь";

    Запрос.УстановитьПараметр("Склад", Склад);

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

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

    Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.Код);
    КонецЦикла;

    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

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

    &НаКлиенте
    Процедура Чтение(Команда)
    РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
    Если Не РасширениеПодключено Тогда
    УстановитьРасширениеРаботыСФайлами();
    РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
    КонецЕсли;
    Если Не РасширениеПодключено Тогда
    Возврат;
    КонецЕсли;
    ДиалогФыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогФыбораФайла.Фильтр = "Файлы Excel (*.xls,*.xlsx) |*.xls*";
    ДиалогФыбораФайла.Заголовок = "Выберите файл для загрузки ковров";
    ДиалогФыбораФайла.ПредварительныйПросмотр = Истина;
    ДиалогФыбораФайла.ИндексФильтра = 0;
    Если ДиалогФыбораФайла.Выбрать() Тогда
    ЗагрузкаExcel(ДиалогФыбораФайла.ПолноеИмяФайла);
    КонецЕсли;

    ЧтениеДанных(Склад);
    КонецПроцедуры

    &НаКлиенте
    Процедура ЗагрузкаExcel(Файл)
    Перем КолвоШК;

    РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
    Если Не РасширениеПодключено Тогда
    УстановитьРасширениеРаботыСФайлами();
    РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
    КонецЕсли;
    Если Не РасширениеПодключено Тогда
    Возврат;
    КонецЕсли;

    ВыбФайл = Новый Файл(Файл);
    Если Не ВыбФайл.Существует() Тогда
    Сообщить("Файл не существует или указан неверный путь!!!");
    Возврат
    Иначе
    ДокЭкзел = Новый COMОбъект("Excel.Application");
    ДокЭкзел.Workbooks.Open(СокрЛП(ПутьКФайлу));
    НомерЛиста = 1;

    ДокЭкзел.ActiveWorkbook.Worksheets(НомерЛиста).Activate();
    rows=ДокЭкзел.ActiveSheet.UsedRange.Rows.Count;

    ПроцентЗагрузки = 0;
    ШагиЗагрузки = 100/rows;
    КолвоШК = 0;
    Для СчСтроки = 2 По rows + 1 Цикл
    Состояние("Идет загрузка листа номер="+НомерЛиста+". Прогресс:",ШагиЗагрузки*СчСтроки);
    //Попытка
    ШК = СокрЛП(Строка(Формат(ДокЭкзел.Cells(СчСтроки,2).Value,"ЧГ=")));
    Если (Не ЗначениеЗаполнено(ШК))ИЛИ (СтрДлина(ШК)<2) Тогда
    Прервать;
    КонецЕсли;
    //Исключение
    //КонецПопытки
    Если СтрДлина(ШК)>8 Тогда
    Сообщить("Неверный штрих код Лист "+НомерЛиста+", номер строки "+СчСтроки);
    Иначе
    КонецЕсли;
    КонецЦикла;
    Сообщить("Прочитано штрих-кодов "+КолвоШК+" шт.");
    //КонецЦикла;
    ДокЭкзел.Workbooks.Close();
    ДокЭкзел.Application.Quit();
    КонецЕсли;

    КонецПроцедуры
```
---
Посоветуйте плиз как правильно проставить условия, если штрих-код не продан,а только "Оприходован", то сразу же снять галочку "Оприходован"
---
Вроде запрос проставлен правильно...если что то не так, то скажите.
---
Как мне сравнить значения штрих-кода с экзеля со значение кода справочника?
---
Погоди , ты же сказал, что нужно менять только у тех , что есть в файле Екселя!
Если нужно у тех , не продан,а только "Оприходован"
То никакая обработка вообще не нужна!
---
да вы правы, просто я так для себя написал запрос...
А так могли бы направить как сделать проверку по поводу файля экзеля со справочником? Заранее спасибо.
---
Еще раз прошу УТОЧНИ изначально задачу, так чтобы было понятно даже первокласнику
---
Хорошо, уважаемый.
У меня сейчас имеется список штрих-кодов ковров одного из складов. Назовем его "Sklad".
Меня попросили сделать так, чтобы при обработке, была снята галочка "Оприходован" в том случае если ковер не "Продан", а просто "Оприходован". Есть вероятность, что штрих-код ковра из списка экзеля возможно уже продан, пока я пишу обработку)) Поэтому вот такие нюансы.

P.S Отдел продаж сделал ошибку при загрузке товаров для диллеров.
---
По сути твоей задачи нет работы с Файлом екселя - то есть файл вообще не нужен
 чтобы при обработке, была снята галочка "Оприходован" в том случае если ковер не "Продан", а просто "Оприходован".
Тогда и обработка не нужна!
тебе же просто сравнить 2 реквизита справочника и выполнить действие - это 5 строчек кода в консоли запросов
---
Нужна уважаемый, честное слово. Поверьте на слово!))
Суть такова: Отдел продаж грузит отгрузку ковров. Дилеры делают приход ковров по коду ковра и после этого только могут делать реализацию.
Список, который мне предоставил отдел продаж там список кодов ковров за последние 4 дня. Я могу конечно убрать везде галочку "Оприходован", но потом дилеры не смогут делать реализацию старой партии ковров)
---
Поверять нужно после загрузки из екселя каждую строчку загруженной таблицы значений с аналогичной записью из таблицей значений из справочника, то есть из запроса.
---
То есть на данный момент у меня есть запрос и обработчик чтения файла.
Осталось это как то слепить и наладить
---
У тебя ЗагрузкаExcel(Файл) вообще что делает?
Я не вижу никаких действий... ну открывает и больше ничего полезного - ничего никуда не загружает...
---
А мне не нужно никуда ничего грузить. Просто нужно, как вы сказали сравнить значения справочника и экзеля, убрать галочку.
Просто честное слово, как это сделать не знаю.
---
чтобы сравнить с данными из Excel их надо иметь, то есть загрузить сначала.
А потом уже сравнивать.
Но ты сам себе снова и снова противоречишь!
То нужно сравнивать с экселем то не нужно...
Остановись на чем нибудь одном
---
Ну тогда можно попробовать так,чтобы эти данные экзеля грузились в справочник штрих-коды ковров
---
Как вам такая идея?

```1c
    Перем КолвоШК;

    РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
    Если Не РасширениеПодключено Тогда
    УстановитьРасширениеРаботыСФайлами();
    РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
    КонецЕсли;
    Если Не РасширениеПодключено Тогда
    Возврат;
    КонецЕсли;

    ВыбФайл = Новый Файл(Файл);
    Если Не ВыбФайл.Существует() Тогда
    Сообщить("Файл не существует или указан неверный путь!!!");
    Возврат
    Иначе
    ДокЭкзел = Новый COMОбъект("Excel.Application");
    ДокЭкзел.Workbooks.Open(СокрЛП(Файл));
    НомерЛиста = 1;

    ДокЭкзел.ActiveWorkbook.Worksheets(НомерЛиста).Activate();
    rows=ДокЭкзел.ActiveSheet.UsedRange.Rows.Count;

    ПроцентЗагрузки = 0;
    ШагиЗагрузки = 100/rows;
    КолвоШК = 0;
    Для СчСтроки = 2 По rows + 1 Цикл
    Состояние("Идет загрузка листа номер="+НомерЛиста+". Прогресс:",ШагиЗагрузки*СчСтроки);
    //Попытка
    ШК = СокрЛП(Строка(Формат(ДокЭкзел.Cells(СчСтроки,2).Value,"ЧГ=")));
    //Если (Не ЗначениеЗаполнено(ШК))ИЛИ (СтрДлина(ШК)<2) Тогда
    // Прервать;
    //КонецЕсли;
    ////Исключение
    ////КонецПопытки
    //Если СтрДлина(ШК)>8 Тогда
    // Сообщить("Неверный штрих код Лист "+НомерЛиста+", номер строки "+СчСтроки);
    //Иначе
    //КонецЕсли;
    Выборка = Справочники.ШтрихКодыКовров.Выбрать();
    Пока Выборка.Следующий()Цикл
    НайтиШТ = Справочники.ШтрихКодыКовров.НайтиПоНаименованию(ШК);
    Если НЕ НайтиШТ.Пустая() Тогда
    Выборка.Код = ШК;
    Выборка.Оприходован = Ложь
    КонецЕсли;

    КонецЦикла;

    КонецЦикла;
    Сообщить("Прочитано штрих-кодов "+КолвоШК+" шт.");
    //КонецЦикла;
    ДокЭкзел.Workbooks.Close();
    ДокЭкзел.Application.Quit();
    КонецЕсли;
```
---
Доработал

```1c
    Перем КолвоШК;

    РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
    Если Не РасширениеПодключено Тогда
    УстановитьРасширениеРаботыСФайлами();
    РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
    КонецЕсли;
    Если Не РасширениеПодключено Тогда
    Возврат;
    КонецЕсли;

    ВыбФайл = Новый Файл(Файл);
    Если Не ВыбФайл.Существует() Тогда
    Сообщить("Файл не существует или указан неверный путь!!!");
    Возврат
    Иначе
    ДокЭкзел = Новый COMОбъект("Excel.Application");
    ДокЭкзел.Workbooks.Open(СокрЛП(Файл));
    НомерЛиста = 1;

    ДокЭкзел.ActiveWorkbook.Worksheets(НомерЛиста).Activate();
    rows=ДокЭкзел.ActiveSheet.UsedRange.Rows.Count;

    ПроцентЗагрузки = 0;
    ШагиЗагрузки = 100/rows;
    КолвоШК = 0;
    Для СчСтроки = 2 По rows + 1 Цикл
    Состояние("Идет загрузка листа номер="+НомерЛиста+". Прогресс:",ШагиЗагрузки*СчСтроки);
    //Попытка
    ШК = СокрЛП(Строка(Формат(ДокЭкзел.Cells(СчСтроки,2).Value,"ЧГ=")));
    //Если (Не ЗначениеЗаполнено(ШК))ИЛИ (СтрДлина(ШК)<2) Тогда
    // Прервать;
    //КонецЕсли;
    ////Исключение
    ////КонецПопытки
    //Если СтрДлина(ШК)>8 Тогда
    // Сообщить("Неверный штрих код Лист "+НомерЛиста+", номер строки "+СчСтроки);
    //Иначе
    //КонецЕсли;
    НайтиШТ = Справочники.ШтрихКодыКовров.НайтиПоНаименованию(ШК);
    Отбор = Новый Структура;
    Отбор.Вставить("Склад",Склад);
    Выборка = Справочники.ШтрихКодыКовров.Выбрать(Отбор);
    Пока Выборка.Следующий()Цикл
    ШтрСтр = Выборка.ПолучитьОбъект();

    Если НЕ НайтиШТ.Пустая()И ШтрСтр.Продан = Ложь И ШтрСтр.Оприходован = Истина Тогда
    ШтрСтр.Код = НайтиШТ;
    ШтрСтр.Оприходован = Ложь;
    ШтрСтр.Продан = Ложь;
    ШтрСтр.Записать();
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    Сообщить("Прочитано штрих-кодов "+КолвоШК+" шт.");
    //КонецЦикла;
    ДокЭкзел.Workbooks.Close();
    ДокЭкзел.Application.Quit();
    КонецЕсли;
```
---
Выходит ошибка Обработка.УбратьПриход.Форма.Форма.Форма(81,14)}: Переменная не определена (Справочники)
   Выборка = <<?>>Справочники.ШтрихКодыКовров.Выбрать(Отбор); (Проверка: Тонкий клиент)
---
Процедура НаКлиенте? Обращение к справочникам и выборка на клиенте недоступны
---
Уже исправил. Обработка запахала, правда медленно обрабатываются данные
---
Как сделать на серверном ?
---
Правда работает только на толстом клиенте

```1c
    &НаКлиенте
    Процедура ЗагрузкаExcel(Файл,Склад)
    Перем КолвоШК;

    РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
    Если Не РасширениеПодключено Тогда
    УстановитьРасширениеРаботыСФайлами();
    РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
    КонецЕсли;
    Если Не РасширениеПодключено Тогда
    Возврат;
    КонецЕсли;

    ВыбФайл = Новый Файл(Файл);
    Если Не ВыбФайл.Существует() Тогда
    Сообщить("Файл не существует или указан неверный путь!!!");
    Возврат
    Иначе
    ДокЭкзел = Новый COMОбъект("Excel.Application");
    ДокЭкзел.Workbooks.Open(СокрЛП(Файл));
    НомерЛиста = 1;

    ДокЭкзел.ActiveWorkbook.Worksheets(НомерЛиста).Activate();
    rows=ДокЭкзел.ActiveSheet.UsedRange.Rows.Count;

    ПроцентЗагрузки = 0;
    ШагиЗагрузки = 100/rows;
    КолвоШК = 0;
    Для СчСтроки = 2 По rows + 1 Цикл
    Состояние("Идет загрузка листа номер="+НомерЛиста+". Прогресс:",ШагиЗагрузки*СчСтроки);
    //Попытка
    ШК = СокрЛП(Строка(Формат(ДокЭкзел.Cells(СчСтроки,2).Value,"ЧГ=")));
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ШтрихКодыКовров.Ссылка,
    | ШтрихКодыКовров.Склад,
    | ШтрихКодыКовров.Оприходован,
    | ШтрихКодыКовров.Продан
    |ИЗ
    | Справочник.ШтрихКодыКовров КАК ШтрихКодыКовров
    |ГДЕ
    | ШтрихКодыКовров.Склад = &Склад
    | И ШтрихКодыКовров.Оприходован = ИСТИНА
    | И ШтрихКодыКовров.Продан = ЛОЖЬ";

    Запрос.УстановитьПараметр("Склад", Склад);

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

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

    Пока Выборка.Следующий() Цикл
    Стр = Выборка.Ссылка.ПолучитьОбъект();
    Если ШК = Стр.Код Тогда
    Стр.Оприходован = Ложь;
    Стр.Записать();
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    //Сообщить("Прочитано штрих-кодов "+КолвоШК+" шт.");
    //КонецЦикла;
    ДокЭкзел.Workbooks.Close();
    ДокЭкзел.Application.Quit();
    КонецЕсли;
    КонецПроцедуры

    &НаКлиенте
    Процедура Excel(Команда)
    РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
    Если Не РасширениеПодключено Тогда
    УстановитьРасширениеРаботыСФайлами();
    РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
    КонецЕсли;
    Если Не РасширениеПодключено Тогда
    Возврат;
    КонецЕсли;
    ДиалогФыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогФыбораФайла.Фильтр = "Файлы Excel (*.xls,*.xlsx) |*.xls*";
    ДиалогФыбораФайла.Заголовок = "Выберите файл для загрузки ковров";
    ДиалогФыбораФайла.ПредварительныйПросмотр = Истина;
    ДиалогФыбораФайла.ИндексФильтра = 0;
    Если ДиалогФыбораФайла.Выбрать() Тогда
    ЗагрузкаExcel(ДиалогФыбораФайла.ПолноеИмяФайла,Склад);
    КонецЕсли;

    КонецПроцедуры
```
---
Посоветуйте, кто может
---
Запрос нужно убрать из цикла, и запись вынести в отдельную процедуру вот примерно так

```1c
    &НаКлиенте
    Процедура ЗагрузкаExcel(Файл,Склад)
    Перем КолвоШК;

    РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
    Если Не РасширениеПодключено Тогда
    УстановитьРасширениеРаботыСФайлами();
    РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
    КонецЕсли;
    Если Не РасширениеПодключено Тогда
    Возврат;
    КонецЕсли;

    ВыбФайл = Новый Файл(Файл);
    Если Не ВыбФайл.Существует() Тогда
    Сообщить("Файл не существует или указан неверный путь!!!");
    Возврат
    Иначе
    ДокЭкзел = Новый COMОбъект("Excel.Application");
    ДокЭкзел.Workbooks.Open(СокрЛП(Файл));
    НомерЛиста = 1;

    ДокЭкзел.ActiveWorkbook.Worksheets(НомерЛиста).Activate();
    rows=ДокЭкзел.ActiveSheet.UsedRange.Rows.Count;

    ПроцентЗагрузки = 0;
    ШагиЗагрузки = 100/rows;
    КолвоШК = 0;

    ШКНоменклатура=Новый Соответствие;

    ЗаполнитьШКНоменклатураНаСервере(ШКНоменклатура,Склад);

    Для СчСтроки = 2 По rows + 1 Цикл
    Состояние("Идет загрузка листа номер="+НомерЛиста+". Прогресс:",ШагиЗагрузки*СчСтроки);
    //Попытка
    ШК = СокрЛП(Строка(Формат(ДокЭкзел.Cells(СчСтроки,2).Value,"ЧГ=")));

    СсылкаДанные=ШКНоменклатура.Получить(ШК);

    Если СсылкаДанные<>Неопределено Тогда
    ЗаписатьПризнакОприходования(СсылкаДанные);
    КонецЕсли;

    КонецЦикла;
    //Сообщить("Прочитано штрих-кодов "+КолвоШК+" шт.");
    //КонецЦикла;
    ДокЭкзел.Workbooks.Close();
    ДокЭкзел.Application.Quit();
    КонецЕсли;
    КонецПроцедуры

    &НаСервереБезКонтекста
    Процедура ЗаполнитьШКНоменклатураНаСервере(ШКНоменклатура, Склад)
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ШтрихКодыКовров.Ссылка КАК Ссылка,
    | ШтрихКодыКовров.Ссылка.Код КАК Код
    |ИЗ
    | Справочник.ШтрихКодыКовров КАК ШтрихКодыКовров
    |ГДЕ
    | ШтрихКодыКовров.Склад = &Склад
    | И ШтрихКодыКовров.Оприходован = ИСТИНА
    | И ШтрихКодыКовров.Продан = ЛОЖЬ";

    Запрос.УстановитьПараметр("Склад", Склад);

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

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

    Пока Выборка.Следующий() Цикл;
    ШКНоменклатура.Вставить(Выборка.Код,Выборка.Ссылка)
    КонецЦикла;

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

    &НаСервереБезКонтекста
    Процедура ЗаписатьПризнакОприходования(СсылкаДанные)
    ОбъектСсылкаДанные=СсылкаДанные.ПолучитьОбъект();
    ОбъектСсылкаДанные.Оприходован=Ложь;
    ОбъектСсылкаДанные.Записать();
    КонецПроцедуры
```
---
Спасибо!