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

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

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)