Обработка штрихкодов. Нужна помощь.

1. Varlant1n 17.02.21 09:54 Сейчас в теме
Здравствуйте. Есть форма обработки. На форме появляются товары из заказа клиента. Мне нужно щас сделать обработку штрихкодов, чтобы при наведении на штрихкод товара. В таблице на форме обработки в колонке КоличествоРеализации добавлялось по одному. При этом если у товара Реквизит, если реквизит Отгружено = Истина (это проверяется через запрос к ЗаказыКлиентовОстатки), тогда должно быть что-то по типу предупреждения о том, что данный товар уже отгружен. На форме строка отгруженного товара через условное оформление вычеркивается. Я смог добиться того, что я могу через сканер найти строку и начать добавлять при сканировании, но как только количество в заказе и количество в реализации равны друг другу, мне выдает ошибку, хотя должно быть предупреждение о том, что данного товара уже достаточно. Вот код, который я смог написать, не ругайтесь только. Я знаю вы умеете. Спасибо заранее за помощь)

&НаКлиенте
Процедура ОбработатьШтрихкоды(ДанныеШтрихкода)
	Если ЗначениеЗаполнено(Объект.Товары) Тогда
		Номенклатура = ПолучитьНоменклатуруПоШтрихкоду(ДанныеШтрихкода);
		Если Номенклатура <> Неопределено Тогда
			Активизировать();
			ТекущиеДанные = Объект.Товары.НайтиПоИдентификатору(НайтиТовар(Номенклатура));
			Если ТекущиеДанные.КоличествоРеализации = ТекущиеДанные.КоличествоВЗаказе И 
				ТекущиеДанные.ПолностьюПоставлен Тогда
				Предупреждение("Данного товара уже достаточно! Верните товар на полку!");				
			КонецЕсли;
			Элементы.Товары.ТекущаяСтрока = ТекущиеДанные.НомерСтроки - 1;
		КонецЕсли;		
	Иначе
		Предупреждение("Номенклатура со штрихкодом %1 не найдена");
	КонецЕсли;		
КонецПроцедуры


&НаСервере
Функция НайтиТовар(Позиция)	
	ПараметрыОтбора = Новый Структура;
	ПараметрыОтбора.Вставить("Номенклатура", Позиция);
	ПараметрыОтбора.Вставить("Отгружено", Ложь);
	НайденныеСтроки = Объект.Товары.НайтиСтроки(ПараметрыОтбора);	
	Если НайденныеСтроки.Количество() <> 0 Тогда
		НайденнаяСтрока = НайденныеСтроки[0];
		
		Если НайденнаяСтрока.КоличествоРеализации < НайденнаяСтрока.КоличествоВЗаказе И НЕ НайденнаяСтрока.ПолностьюПоставлен Тогда
			НайденнаяСтрока.КоличествоРеализации = НайденнаяСтрока.КоличествоРеализации + 1;
		ИначеЕсли НайденнаяСтрока.КоличествоРеализации = НайденнаяСтрока.КоличествоВЗаказе Тогда
			НайденнаяСтрока.ПолностьюПоставлен = Истина;
		КонецЕсли;
	КонецЕсли;
Возврат НайденнаяСтрока.ПолучитьИдентификатор();
КонецФункции
Показать
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. tolyan_ekb 104 17.02.21 10:17 Сейчас в теме
(1) функция ничего не возвращает?
Объект.Товары.НайтиПоИдентификатору(НайтиТовар(Номенклатура));
Как это работает?
6. Varlant1n 17.02.21 11:08 Сейчас в теме
(2) Выбирается строка, в которой у товара совпадет штрихкод с тем штрихкодом товара, который пробивается в данный момент.
7. Varlant1n 17.02.21 11:10 Сейчас в теме
(2)
функция ничего не возвращает?

Возвращает, когда находит и выбирается именно та строка и плюсуется товар
8. pyrkin_vanya 488 17.02.21 11:17 Сейчас в теме
(7)Ваша функция ничего не возвращает. Она меняет данные формы.
3. pyrkin_vanya 488 17.02.21 10:33 Сейчас в теме
(1)
чтобы при наведении на штрихкод товара

Видимо это при считывании сканером штрихкодов?

А вопрос то в чем? Ошибка? Что не получается?
4. Varlant1n 17.02.21 10:36 Сейчас в теме
(3) У меня не работает ни одно предупреждение. То есть у меня есть предупреждение о том, что если КоличествоРеализации = КоличествоВЗаказе тогда предупреждение. То есть по логике мне нужно чтобы, если в заказе 5 штук товара, то сканером можно будет считать данный товар 5 раз, в 6 раз будет предупреждение о том, что нельзя больше. А у меня при считывании 5го товара, он записывается и сразу выходит предупреждение.
5. pyrkin_vanya 488 17.02.21 10:41 Сейчас в теме
(4)Как вам писали выше ваша функция ничего не возвращает. У вас там всегда неопределено. Вот условие ии не срабатывает.
9. Varlant1n 17.02.21 11:19 Сейчас в теме
(5) А как я могу это исправить? Если вам не сложно(
10. tolyan_ekb 104 17.02.21 11:26 Сейчас в теме
(9)в функции добавить , если не ошибаюсь, возврат НайденнаяСтрока.ПолучитьИдентификатор() перед конецфункции
11. Varlant1n 17.02.21 11:30 Сейчас в теме
(10) Я оооочень извиняюсь. Я не заметил просто. У меня именно так и было(( Я просто не вставил сюда случайно
13. tolyan_ekb 104 17.02.21 11:32 Сейчас в теме
15. Varlant1n 17.02.21 11:55 Сейчас в теме
(13) Сейчас никаких ошибок не выдает, но при этом и нет предупреждения. То есть количество товаров равно. Я пробиваю еще раз и ничего не происходит. Товар не добавляется, это хорошо. Но нет предупреждения, это плохо
12. tolyan_ekb 104 17.02.21 11:30 Сейчас в теме
(9) или изменить логику программы и в функции проверять сразу выводить предупреждение или нет.
14. pavel06 2 17.02.21 11:33 Сейчас в теме
(4)
КоличествоРеализации = КоличествоВЗаказе тогда предупреждение.


= на > замените.
22. pyrkin_vanya 488 17.02.21 21:31 Сейчас в теме
(1)
Возврат НайденнаяСтрока.ПолучитьИдентификатор();


Вот, смотрю появился возврат. У вас все работает?
16. Varlant1n 17.02.21 12:16 Сейчас в теме +2 $m
Вот ситуация при которой товар отгружен уже. Он на форме даже выделаятеся вычеркиванием. И когда я его пробиваю я сделал небольшие изменения в коде:

Если Номенклатура <> Неопределено Тогда
			Активизировать();
			ТекущиеДанные = Объект.Товары.НайтиПоИдентификатору(НайтиТовар(Номенклатура));
			Если ТекущиеДанные.Отгружено = Истина Тогда
				Предупреждение("Данный товар уже отгружен!");
			Иначе
				Если ТекущиеДанные.КоличествоРеализации > ТекущиеДанные.КоличествоВЗаказе И
					ТекущиеДанные.ПолностьюПоставлен Тогда
					Предупреждение("Данного товара уже достаточно! Верните товар на полку!");				
				КонецЕсли;
				Элементы.Товары.ТекущаяСтрока = ТекущиеДанные.НомерСтроки - 1;	
			КонецЕсли;	
		КонецЕсли;		
	Иначе
		Предупреждение(НСтр("ru='Номенклатура со штрихкодом %1 не найдена'"));
КонецЕсли;
Показать


Я пробиваю данный товар и вот у меня ошибка:

Значение не является значением объектного типа (ПолучитьИдентификатор)
Возврат НайденнаяСтрока.ПолучитьИдентификатор();
17. tolyan_ekb 104 17.02.21 12:44 Сейчас в теме
(16) отладчиком посмотри, отбор строк не находит НайденныеСтроки.Количество() = 0 и поэтому не может определить идентификатор. Надо логику переделывать. Текущую строку и так можно определить на клиенте. Количество тоже можно изменить и сравнить, если стало больше то предупреждение, иначе увеличиваем количество.
18. Varlant1n 17.02.21 13:21 Сейчас в теме
(17) Можно подробнее, пожалуйста(( Если не сложно, буду Вам очень благодарен
19. tolyan_ekb 104 17.02.21 13:45 Сейчас в теме
(18) ТекущиеДанные =Элементы.Товары.ТекущаяСтрока ;
ТекущиеДанные.КоличествоРеализации = ТекущиеДанные.КоличествоРеализации+1;
Если ТекущиеДанные.КоличествоРеализации > ТекущиеДанные.КоличествоВЗаказе Тогда
Предупреждение("Данного товара уже достаточно! Верните товар на полку!");
ТекущиеДанные.КоличествоРеализации = ТекущиеДанные.КоличествоРеализации-1;
ИначеЕсли ТекущиеДанные.КоличествоРеализации = ТекущиеДанные.КоличествоВЗаказе
ТекущиеДанные.ПолностьюПоставлен = Истина;
КонецЕсли;

Как-то так, возможны ошибки
20. Varlant1n 17.02.21 15:20 Сейчас в теме
(19) Спасибо, щас попробую реализовать. Напишу сюда, если получится или не
21. Varlant1n 17.02.21 15:22 Сейчас в теме
(19)
ТекущиеДанные =Элементы.Товары.ТекущаяСтрока ;
ТекущиеДанные.КоличествоРеализации = ТекущиеДанные.КоличествоРеализации+1;
Если ТекущиеДанные.КоличествоРеализации > ТекущиеДанные.КоличествоВЗаказе Тогда
Предупреждение("Данного товара уже достаточно! Верните товар на полку!");
ТекущиеДанные.КоличествоРеализации = ТекущиеДанные.КоличествоРеализации-1;
ИначеЕсли ТекущиеДанные.КоличествоРеализации = ТекущиеДанные.КоличествоВЗаказе
ТекущиеДанные.ПолностьюПоставлен = Истина;
КонецЕсли;


А Вы тут решили отказаться от Функции НайтиТовар(Позиция) ?
23. tolyan_ekb 104 18.02.21 07:12 Сейчас в теме
(21)Да, я не вижу в ней смысла, если все равно работаем с одной и той же строкой.
Оставьте свое сообщение

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