Создание обработки

1. Stanislav1993 14.11.18 16:02 Сейчас в теме
Добрый вечер, коллеги.
Срочно нужен ваш совет.
Ситуация такова. Имеется справочник "штрих-коды ковров" и справочник "Склады ковров".
Проблема в том, что нужно убрать галку "Оприходован" по кодам в справочнике по одному складу.
Как можно упростить задачу? Я ниже прикрепил файл с кодами. Они актуальны в системе. Всем заранее спасибо за советы и критику.
Прикрепленные файлы:
511.xlsx
+
По теме из базы знаний
Найденные решения
59. independ 1520 15.11.18 08:53 Сейчас в теме
(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(); 
	КонецЕсли;        
КонецПроцедуры

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

&НаСервереБезКонтекста
Процедура ЗаписатьПризнакОприходования(СсылкаДанные)
	ОбъектСсылкаДанные=СсылкаДанные.ПолучитьОбъект();
	ОбъектСсылкаДанные.Оприходован=Ложь;
	ОбъектСсылкаДанные.Записать();
КонецПроцедуры	 
Показать
+
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. fromlion 172 14.11.18 16:14 Сейчас в теме
ОБработка "Групповое изменение реквизитов " не подойдет? https://its.1c.ru/db/metod8dev#content:5443:hdoc
Alex_CheST; +1
10. Stanislav1993 14.11.18 16:45 Сейчас в теме
(2)У меня не открывается, выдает ошибку(
+
3. Stanislav1993 14.11.18 16:17 Сейчас в теме
&НаСервере
Процедура Обработка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(); 
	КонецЕсли;
КонецПроцедуры
Показать
+
4. Stanislav1993 14.11.18 16:17 Сейчас в теме
Загрузку Excel-я сделал
+
5. Stanislav1993 14.11.18 16:21 Сейчас в теме
Посоветуйте как поступить со складом
+
6. user633533_encantado 11 14.11.18 16:24 Сейчас в теме
В форме списка справочника штрихкодов отбери штрихкоды по нужному складу.
Далее в форме выделяешь все отобранные элементы и жмешь "Все действия - Изменить выделенные"
+
7. Stanislav1993 14.11.18 16:28 Сейчас в теме
(6) Там один штрих код может быть привязан сразу к нескольким складам.
А мне нужно по одному складу и по нужным штрих-кодам, а не по всем.
+
11. YannikAlx 43 14.11.18 16:49 Сейчас в теме
(7) отфильтруй настройкой списка по нужному складу , ибо через "Все действия - Изменить выделенные"
для тебя самый простой вариант
alex-l19041; +1
13. Stanislav1993 14.11.18 16:52 Сейчас в теме
(11)я отфильтровал по складу, но как же со штрихкодами? в ручную искать?
+
16. YannikAlx 43 14.11.18 17:04 Сейчас в теме
(13) Какими штрихкодами?
нужно убрать галку "Оприходован" по кодам в справочнике


То есть ты хочешь сказать что только не для всех кодов нужно убрать галку?
Тогда по любому вручную
+
14. user633533_encantado 11 14.11.18 17:00 Сейчас в теме
(7) У тебя на картинке форма справочника ? Если да, то я вижу там один склад.
+
15. Stanislav1993 14.11.18 17:01 Сейчас в теме
(14)Потому что к этому складу привязан этот штрих-код.
+
18. user633533_encantado 11 14.11.18 17:08 Сейчас в теме
(15) Значит все-таки можно по этому складу список отобрать ?
+
20. Stanislav1993 14.11.18 17:10 Сейчас в теме
(18)Можно отобрать только список
+
23. user633533_encantado 11 14.11.18 17:16 Сейчас в теме
(20) И что тебе не понятно в (6), не умеешь строить отборы в динамическом списке ?
+
25. Stanislav1993 14.11.18 17:18 Сейчас в теме
(23) Зачем мне работать ручками с кодами ковров. Повторюсь мне дали список в количестве двух тысяч наименований.
+
28. user633533_encantado 11 14.11.18 17:19 Сейчас в теме
(25) Т.е. галочку надо снять не у всех штрихкодов по этому складу, а определенных ?

"Проблема в том, что нужно убрать галку "Оприходован" по кодам в справочнике по одному складу. " - составляй вопросы понятнее.
+
29. Stanislav1993 14.11.18 17:21 Сейчас в теме
(28) Снять галочку по определенным кодам и по определенному складу.
+
30. YannikAlx 43 14.11.18 17:21 Сейчас в теме
(25) Вот наконец вытащили из него информацию! Что то что нужно менять хранится в Ексель файле!
Все - вопрос закрыт - ясно нужна обработка работающая с файлом.
Просто не было понимания что тебе реально нужно
+
31. Stanislav1993 14.11.18 17:21 Сейчас в теме
(30)Как то так вот...и мне не до смеха
+
33. YannikAlx 43 14.11.18 17:25 Сейчас в теме
(31) Выражовываться нада по нашему - по-русски.... Тогда все поймут, что тебе нужно и быстро помогут.
А когда задача завуалирована так , что народ ничего не понимая, пытается помочь, а ты упираешься рогами и копытами, то понятно что смешного
+
34. Stanislav1993 14.11.18 17:26 Сейчас в теме
(33)Спасибо за помощь и критику.
+
8. Stanislav1993 14.11.18 16:29 Сейчас в теме
У меня 500штрих кодов, которым нужно убрать галку
+
9. Stanislav1993 14.11.18 16:35 Сейчас в теме
есть нюанс, что ковры могут быть проданы...
+
12. YannikAlx 43 14.11.18 16:50 Сейчас в теме
(9) Это вообще никак тут ни при чем - ты меняешь справочник.
+
17. YannikAlx 43 14.11.18 17:06 Сейчас в теме
Я возможно неверно понял структуру данных..
В справочнике "штрих-коды ковров" нет связи с "Склады ковров" ?
+
19. Stanislav1993 14.11.18 17:09 Сейчас в теме
21. Stanislav1993 14.11.18 17:13 Сейчас в теме
Поэтому я подумал, написать обработку.
Логика такова.
Реквизит "Склад" - Тип, Справочник.СкладыКовров.
Кнопка - ОбработкаДанных.
1)Выбираю склад.
2)При нажатии на кнопку ->Выбираю экзель файл, где находится список штрих-кодов->Идет цикл чтения в справочнике ШтрихКодыКовров по выбранному складу->Если проставлена галочка Оприходован, то убираем галку->Если Проставлены галочки "Оприходован и Продан" то ничего не делаем
+
24. YannikAlx 43 14.11.18 17:17 Сейчас в теме
(21) Обработка ради одно операции - я тоже такие глупости делал в молодости .... )))))))
+
26. YannikAlx 43 14.11.18 17:19 Сейчас в теме
(21)Насмешил, спасибо!
+
22. YannikAlx 43 14.11.18 17:15 Сейчас в теме
Короче я так понял, что клещами информацию не вытащишь...
Тогда пользуйся универсальным средством, консоль запросов с возможностью выполнения произвольного кода 1С.
Тут на сайте есть кстати...
И там отбери что душе угодно и измени парой строчек кода в результате отбора
+
27. Stanislav1993 14.11.18 17:19 Сейчас в теме
(22) Можете скинуть ссылку
+
32. YannikAlx 43 14.11.18 17:23 Сейчас в теме
(27) Конечно , лови.
https://infostart.ru/public/335504/
Но ясно что для твоей задачи консоль не пойдет, но она обязательно должна быть в арсенале
+
35. Stanislav1993 14.11.18 17:53 Сейчас в теме


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

&НаКлиенте
Процедура Чтение(Команда)
	РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами(); 
	Если Не РасширениеПодключено Тогда
		УстановитьРасширениеРаботыСФайлами();
		РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
	КонецЕсли;
	Если Не РасширениеПодключено Тогда
		Возврат;
	КонецЕсли;
	ДиалогФыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	ДиалогФыбораФайла.Фильтр = "Файлы 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(); 
	КонецЕсли;	
	
КонецПроцедуры

Показать
+
36. Stanislav1993 14.11.18 17:55 Сейчас в теме
Посоветуйте плиз как правильно проставить условия, если штрих-код не продан,а только "Оприходован", то сразу же снять галочку "Оприходован"
+
37. Stanislav1993 14.11.18 17:56 Сейчас в теме
Вроде запрос проставлен правильно...если что то не так, то скажите.
+
38. Stanislav1993 14.11.18 18:06 Сейчас в теме
Как мне сравнить значения штрих-кода с экзеля со значение кода справочника?
+
39. YannikAlx 43 14.11.18 18:07 Сейчас в теме
Погоди , ты же сказал, что нужно менять только у тех , что есть в файле Екселя!
Если нужно у тех ,
не продан,а только "Оприходован"

То никакая обработка вообще не нужна!
+
41. Stanislav1993 14.11.18 18:10 Сейчас в теме
(39)да вы правы, просто я так для себя написал запрос...
А так могли бы направить как сделать проверку по поводу файля экзеля со справочником? Заранее спасибо.
+
40. YannikAlx 43 14.11.18 18:08 Сейчас в теме
Еще раз прошу УТОЧНИ изначально задачу, так чтобы было понятно даже первокласнику
+
43. Stanislav1993 14.11.18 18:14 Сейчас в теме
(40)Хорошо, уважаемый.
У меня сейчас имеется список штрих-кодов ковров одного из складов. Назовем его "Sklad".
Меня попросили сделать так, чтобы при обработке, была снята галочка "Оприходован" в том случае если ковер не "Продан", а просто "Оприходован". Есть вероятность, что штрих-код ковра из списка экзеля возможно уже продан, пока я пишу обработку)) Поэтому вот такие нюансы.



P.S Отдел продаж сделал ошибку при загрузке товаров для диллеров.
+
47. YannikAlx 43 14.11.18 18:20 Сейчас в теме
(43)По сути твоей задачи нет работы с Файлом екселя - то есть файл вообще не нужен
чтобы при обработке, была снята галочка "Оприходован" в том случае если ковер не "Продан", а просто "Оприходован".

Тогда и обработка не нужна!
тебе же просто сравнить 2 реквизита справочника и выполнить действие - это 5 строчек кода в консоли запросов
+
49. Stanislav1993 14.11.18 18:23 Сейчас в теме
(47)Нужна уважаемый, честное слово. Поверьте на слово!))
Суть такова: Отдел продаж грузит отгрузку ковров. Дилеры делают приход ковров по коду ковра и после этого только могут делать реализацию.
Список, который мне предоставил отдел продаж там список кодов ковров за последние 4 дня. Я могу конечно убрать везде галочку "Оприходован", но потом дилеры не смогут делать реализацию старой партии ковров)
+
42. YannikAlx 43 14.11.18 18:12 Сейчас в теме
Поверять нужно после загрузки из екселя каждую строчку загруженной таблицы значений с аналогичной записью из таблицей значений из справочника, то есть из запроса.
+
44. Stanislav1993 14.11.18 18:15 Сейчас в теме
(42) То есть на данный момент у меня есть запрос и обработчик чтения файла.
Осталось это как то слепить и наладить
+
45. YannikAlx 43 14.11.18 18:16 Сейчас в теме
У тебя ЗагрузкаExcel(Файл) вообще что делает?
Я не вижу никаких действий... ну открывает и больше ничего полезного - ничего никуда не загружает...
+
46. Stanislav1993 14.11.18 18:17 Сейчас в теме
(45)А мне не нужно никуда ничего грузить. Просто нужно, как вы сказали сравнить значения справочника и экзеля, убрать галочку.
Просто честное слово, как это сделать не знаю.
+
48. YannikAlx 43 14.11.18 18:22 Сейчас в теме
чтобы сравнить с данными из Excel их надо иметь, то есть загрузить сначала.
А потом уже сравнивать.
Но ты сам себе снова и снова противоречишь!
То нужно сравнивать с экселем то не нужно...
Остановись на чем нибудь одном
+
50. Stanislav1993 14.11.18 18:27 Сейчас в теме
(48)Ну тогда можно попробовать так,чтобы эти данные экзеля грузились в справочник штрих-коды ковров
+
51. Stanislav1993 14.11.18 18:37 Сейчас в теме
(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(); 
	КонецЕсли;	
	

Показать
+
52. Stanislav1993 14.11.18 18:43 Сейчас в теме
(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(); 
	КонецЕсли;	
	

Показать
+
53. Stanislav1993 14.11.18 18:49 Сейчас в теме
(52)Выходит ошибка Обработка.УбратьПриход.Форма.Форма.Форма(81,14)}: Переменная не определена (Справочники)
Выборка = <<?>>Справочники.ШтрихКодыКовров.Выбрать(Отбор); (Проверка: Тонкий клиент)
+
54. Bene_Valete 188 15.11.18 03:09 Сейчас в теме
(53) Процедура НаКлиенте? Обращение к справочникам и выборка на клиенте недоступны
+
55. Stanislav1993 15.11.18 06:01 Сейчас в теме
(54)Уже исправил. Обработка запахала, правда медленно обрабатываются данные
+
57. Stanislav1993 15.11.18 08:26 Сейчас в теме
(55)Как сделать на серверном ?
+
56. Stanislav1993 15.11.18 06:11 Сейчас в теме
(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. Stanislav1993 15.11.18 08:38 Сейчас в теме
Посоветуйте, кто может
+
59. independ 1520 15.11.18 08:53 Сейчас в теме
(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(); 
	КонецЕсли;        
КонецПроцедуры

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

&НаСервереБезКонтекста
Процедура ЗаписатьПризнакОприходования(СсылкаДанные)
	ОбъектСсылкаДанные=СсылкаДанные.ПолучитьОбъект();
	ОбъектСсылкаДанные.Оприходован=Ложь;
	ОбъектСсылкаДанные.Записать();
КонецПроцедуры	 
Показать
+
60. Stanislav1993 15.11.18 09:01 Сейчас в теме
(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();
КонецЕсли;
Показать
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот