Создание обработки
Добрый вечер, коллеги.
Срочно нужен ваш совет.
Ситуация такова. Имеется справочник "штрих-коды ковров" и справочник "Склады ковров".
Проблема в том, что нужно убрать галку "Оприходован" по кодам в справочнике по одному складу.
Как можно упростить задачу? Я ниже прикрепил файл с кодами. Они актуальны в системе. Всем заранее спасибо за советы и критику.
Срочно нужен ваш совет.
Ситуация такова. Имеется справочник "штрих-коды ковров" и справочник "Склады ковров".
Проблема в том, что нужно убрать галку "Оприходован" по кодам в справочнике по одному складу.
Как можно упростить задачу? Я ниже прикрепил файл с кодами. Они актуальны в системе. Всем заранее спасибо за советы и критику.
Прикрепленные файлы:
511.xlsx
По теме из базы знаний
- Создание акта сверки для Управления торговлей с факсимиле
- Групповое создание заказов поставщикам для УПП 1.3 (обычное приложение)
- Создание обработки для выгрузки в Excel, PDF, Docx, TXT (управляемые формы)
- Шаблон обработки с вызовом фонового задания и прогрессом выполнения
- Создание документа "Отпуска сотрудников" по данным Графика отпусков. ЗУП 3.1
Найденные решения
(58) Запрос нужно убрать из цикла, и запись вынести в отдельную процедуру вот примерно так
&НаКлиенте
Процедура Загрузка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
&НаСервере
Процедура Обработка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();
КонецЕсли;
КонецПроцедуры
Показать
Поэтому я подумал, написать обработку.
Логика такова.
Реквизит "Склад" - Тип, Справочник.СкладыКовров.
Кнопка - ОбработкаДанных.
1)Выбираю склад.
2)При нажатии на кнопку ->Выбираю экзель файл, где находится список штрих-кодов->Идет цикл чтения в справочнике ШтрихКодыКовров по выбранному складу->Если проставлена галочка Оприходован, то убираем галку->Если Проставлены галочки "Оприходован и Продан" то ничего не делаем
Логика такова.
Реквизит "Склад" - Тип, Справочник.СкладыКовров.
Кнопка - ОбработкаДанных.
1)Выбираю склад.
2)При нажатии на кнопку ->Выбираю экзель файл, где находится список штрих-кодов->Идет цикл чтения в справочнике ШтрихКодыКовров по выбранному складу->Если проставлена галочка Оприходован, то убираем галку->Если Проставлены галочки "Оприходован и Продан" то ничего не делаем
Короче я так понял, что клещами информацию не вытащишь...
Тогда пользуйся универсальным средством, консоль запросов с возможностью выполнения произвольного кода 1С.
Тут на сайте есть кстати...
И там отбери что душе угодно и измени парой строчек кода в результате отбора
Тогда пользуйся универсальным средством, консоль запросов с возможностью выполнения произвольного кода 1С.
Тут на сайте есть кстати...
И там отбери что душе угодно и измени парой строчек кода в результате отбора
(27) Конечно , лови.
https://infostart.ru/public/335504/
Но ясно что для твоей задачи консоль не пойдет, но она обязательно должна быть в арсенале
Но ясно что для твоей задачи консоль не пойдет, но она обязательно должна быть в арсенале
&НаСервере
Процедура ЧтениеДанных(Склад)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ШтрихКодыКовров.Код,
| ШтрихКодыКовров.Оприходован,
| ШтрихКодыКовров.Продан,
| ШтрихКодыКовров.Склад,
| ШтрихКодыКовров.Ссылка
|ИЗ
| Справочник.ШтрихКодыКовров КАК ШтрихКодыКовров
|ГДЕ
| ШтрихКодыКовров.Склад = &Склад
| И ШтрихКодыКовров.Оприходован = ИСТИНА
| И ШтрихКодыКовров.Продан = Ложь";
Запрос.УстановитьПараметр("Склад", Склад);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Код);
КонецЦикла;
//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
КонецПроцедуры
&НаКлиенте
Процедура Чтение(Команда)
РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
Если Не РасширениеПодключено Тогда
УстановитьРасширениеРаботыСФайлами();
РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
КонецЕсли;
Если Не РасширениеПодключено Тогда
Возврат;
КонецЕсли;
ДиалогФыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогФыбораФайла.Фильтр = "Файлы 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();
КонецЕсли;
КонецПроцедуры
Показать
(40)Хорошо, уважаемый.
У меня сейчас имеется список штрих-кодов ковров одного из складов. Назовем его "Sklad".
Меня попросили сделать так, чтобы при обработке, была снята галочка "Оприходован" в том случае если ковер не "Продан", а просто "Оприходован". Есть вероятность, что штрих-код ковра из списка экзеля возможно уже продан, пока я пишу обработку)) Поэтому вот такие нюансы.
P.S Отдел продаж сделал ошибку при загрузке товаров для диллеров.
У меня сейчас имеется список штрих-кодов ковров одного из складов. Назовем его "Sklad".
Меня попросили сделать так, чтобы при обработке, была снята галочка "Оприходован" в том случае если ковер не "Продан", а просто "Оприходован". Есть вероятность, что штрих-код ковра из списка экзеля возможно уже продан, пока я пишу обработку)) Поэтому вот такие нюансы.
P.S Отдел продаж сделал ошибку при загрузке товаров для диллеров.
(43)По сути твоей задачи нет работы с Файлом екселя - то есть файл вообще не нужен
Тогда и обработка не нужна!
тебе же просто сравнить 2 реквизита справочника и выполнить действие - это 5 строчек кода в консоли запросов
чтобы при обработке, была снята галочка "Оприходован" в том случае если ковер не "Продан", а просто "Оприходован".
Тогда и обработка не нужна!
тебе же просто сравнить 2 реквизита справочника и выполнить действие - это 5 строчек кода в консоли запросов
(47)Нужна уважаемый, честное слово. Поверьте на слово!))
Суть такова: Отдел продаж грузит отгрузку ковров. Дилеры делают приход ковров по коду ковра и после этого только могут делать реализацию.
Список, который мне предоставил отдел продаж там список кодов ковров за последние 4 дня. Я могу конечно убрать везде галочку "Оприходован", но потом дилеры не смогут делать реализацию старой партии ковров)
Суть такова: Отдел продаж грузит отгрузку ковров. Дилеры делают приход ковров по коду ковра и после этого только могут делать реализацию.
Список, который мне предоставил отдел продаж там список кодов ковров за последние 4 дня. Я могу конечно убрать везде галочку "Оприходован", но потом дилеры не смогут делать реализацию старой партии ковров)
чтобы сравнить с данными из Excel их надо иметь, то есть загрузить сначала.
А потом уже сравнивать.
Но ты сам себе снова и снова противоречишь!
То нужно сравнивать с экселем то не нужно...
Остановись на чем нибудь одном
А потом уже сравнивать.
Но ты сам себе снова и снова противоречишь!
То нужно сравнивать с экселем то не нужно...
Остановись на чем нибудь одном
(48)
Как вам такая идея?
Как вам такая идея?
Перем КолвоШК;
РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
Если Не РасширениеПодключено Тогда
УстановитьРасширениеРаботыСФайлами();
РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
КонецЕсли;
Если Не РасширениеПодключено Тогда
Возврат;
КонецЕсли;
ВыбФайл = Новый Файл(Файл);
Если Не ВыбФайл.Существует() Тогда
Сообщить("Файл не существует или указан неверный путь!!!");
Возврат
Иначе
ДокЭкзел = Новый 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();
КонецЕсли;
Показать
(51)Доработал
Перем КолвоШК;
РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
Если Не РасширениеПодключено Тогда
УстановитьРасширениеРаботыСФайлами();
РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
КонецЕсли;
Если Не РасширениеПодключено Тогда
Возврат;
КонецЕсли;
ВыбФайл = Новый Файл(Файл);
Если Не ВыбФайл.Существует() Тогда
Сообщить("Файл не существует или указан неверный путь!!!");
Возврат
Иначе
ДокЭкзел = Новый 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();
КонецЕсли;
Показать
(54)
Правда работает только на толстом клиенте
Правда работает только на толстом клиенте
&НаКлиенте
Процедура Загрузка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(ДиалогФыбораФайла.ПолноеИмяФайла,Склад);
КонецЕсли;
КонецПроцедуры
Показать
(58) Запрос нужно убрать из цикла, и запись вынести в отдельную процедуру вот примерно так
&НаКлиенте
Процедура Загрузка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();
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ЗаполнитьШКНоменклатураНаСервере(ШКНоменклатура, Склад)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ШтрихКодыКовров.Ссылка КАК Ссылка,
| ШтрихКодыКовров.Ссылка.Код КАК Код
|ИЗ
| Справочник.ШтрихКодыКовров КАК ШтрихКодыКовров
|ГДЕ
| ШтрихКодыКовров.Склад = &Склад
| И ШтрихКодыКовров.Оприходован = ИСТИНА
| И ШтрихКодыКовров.Продан = ЛОЖЬ";
Запрос.УстановитьПараметр("Склад", Склад);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл;
ШКНоменклатура.Вставить(Выборка.Код,Выборка.Ссылка)
КонецЦикла;
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ЗаписатьПризнакОприходования(СсылкаДанные)
ОбъектСсылкаДанные=СсылкаДанные.ПолучитьОбъект();
ОбъектСсылкаДанные.Оприходован=Ложь;
ОбъектСсылкаДанные.Записать();
КонецПроцедуры
Показать
(59) Спасибо!
РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
Если Не РасширениеПодключено Тогда
УстановитьРасширениеРаботыСФайлами();
РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
КонецЕсли;
Если Не РасширениеПодключено Тогда
Возврат;
КонецЕсли;
ВыбФайл = Новый Файл(Файл);
Если Не ВыбФайл.Существует() Тогда
Сообщить("Файл не существует или указан неверный путь!!!");
Возврат
Иначе
ДокЭкзел = Новый 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();
КонецЕсли;
ПоказатьЕсли Не РасширениеПодключено Тогда
УстановитьРасширениеРаботыСФайлами();
РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
КонецЕсли;
Если Не РасширениеПодключено Тогда
Возврат;
КонецЕсли;
ВыбФайл = Новый Файл(Файл);
Если Не ВыбФайл.Существует() Тогда
Сообщить("Файл не существует или указан неверный путь!!!");
Возврат
Иначе
ДокЭкзел = Новый 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();
КонецЕсли;
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)