Имя: Пароль:
1C
1С v8
Альфа Авто 4: Кнопка Ввод штрих-кода
,
0 Flomik
 
07.01.13
00:04
Необходимо на форму Чек добавить кнопку ввода строк ТЧ по номеру штрих-кода.
Написал процедуру, но поиск номенклатуры не отрабатывает.
Уже всю бошку сломал, не могу найти причину.

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

//Строчка.Номенклатура=Выборка.Имя;
   
КонецПроцедуры
1 vs7719
 
07.01.13
00:08
После "...Выборка=Результат.Выбрать();.."
добавить строку: Выборка.Следующий();...
2 zladenuw
 
07.01.13
00:08
та да. но лучше Если Выбора.Следующий()
3 Flomik
 
07.01.13
00:10
(1)(2) - Не помогло
4 vs7719
 
07.01.13
00:12
Конечно! См. внимательнее стр.: Штрихкоды.Объект КАК Артикул
и
Строчка.Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",Артикул);
5 Flomik
 
07.01.13
00:19
В выборке пусто, хотя я точно знаю, что в регистре есть элемент с искомым значением
6 vs7719
 
07.01.13
00:23
Может, где-то строка дополняется пробелами справа или искомое значение - Объект, не Номенклатура?
7 szhukov
 
07.01.13
00:30
(0)Бредняк какой-то...
Судя по запросу Артикул - это элемент справочника номенклатура, тогда эта строка:
Строчка.Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",Артикул);
- какая-то лажа.

Что-то не то в запросе написано.

что даст запрос если убрать условие на проверку объекта:
//|    И Штрихкоды.Объект ССЫЛКА Справочник.Номенклатура
?
8 szhukov
 
07.01.13
00:46
(0) Ошибка здесь:
ШК = ВвестиСтроку(ШК,"Введите штрих код!",15);

потому что после ввода ШК = Истина

ШК_Введен=Ложь;
ШК="";

ШК_Введен = ВвестиСтроку(ШК, "Введите штрих код!",15);
9 szhukov
 
07.01.13
00:51
+(8) тогда как-то так:

"ВЫБРАТЬ
|    Штрихкоды.Объект КАК ЭлНоменклатуры
|ИЗ
|    РегистрСведений.ШтрихКоды КАК Штрихкоды
|ГДЕ
|    Штрихкоды.ШтрихКод = &Ссылка
|    И Штрихкоды.Объект ССЫЛКА Справочник.Номенклатура";

новзапрос.УстановитьПараметр("Ссылка",ШК);
Результат=новЗапрос.Выполнить();
Если Результат.Пустой() Тогда

  Предупреждение("А нет такого");
  Возврат;

КонецЕсли;

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

Выборка.Следующий();

ТЧ = ЭтотОбъект.Товары;
Строчка=ТЧ.Добавить();
Строчка.Номенклатура = Выборка.ЭлНоменклатуры;
10 Mashinist
 
07.01.13
01:17
а если так
новзапрос.УстановитьПараметр("Ссылка",СокрЛП(ШК));
11 szhukov
 
07.01.13
01:22
(10) ошибка в другой строке, см. (8)
12 Mashinist
 
07.01.13
01:36
(11) угу. точно не то вводится
13 Flomik
 
07.01.13
02:43
Спасибо! Разобрался:
Процедура КоманднаяПанельТоварыШтрихКод(Кнопка)
Текст = "";
Подсказка = "Введите Штрих-код";
Если ВвестиСтроку(Текст, Подсказка, 0, ЛОЖЬ) Тогда


новЗапрос=Новый Запрос;
новЗапрос.Текст=
       "ВЫБРАТЬ
       |    Штрихкоды.Объект КАК ЭлНоменклатуры
       |ИЗ
       |    РегистрСведений.ШтрихКоды КАК Штрихкоды
       |ГДЕ
       |    Штрихкоды.ШтрихКод = &Ссылка
       |    И Штрихкоды.Объект ССЫЛКА Справочник.Номенклатура";

новзапрос.УстановитьПараметр("Ссылка",Текст);
Результат=новЗапрос.Выполнить();
Если Результат.Пустой() Тогда

  Предупреждение("Нет штрих-кода, найдите товар вручную");
  Возврат;

КонецЕсли;

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

Выборка.Следующий();
ТЧ = ЭтотОбъект.Товары;
Строчка=ТЧ.Добавить();
Строчка.Номенклатура = Выборка.ЭлНоменклатуры;
КонецЕсли;

Теперь вопрос - как заполнить созданную строку реквизитами поумолчанию - цена, НДС и т.д.
14 Mashinist
 
07.01.13
03:02
так посмотри в коде добавления товара интерактивное
Из модуля объекта вызвать ОбработкаРеквизита(...)
примерно так было когда-то
ОбработкаРеквизита("Товары.Номенклатура",ТЧ.ТекущаяСтрока);
15 Flomik
 
07.01.13
04:30
(14) Это я знаю, но как фокус новой строчке передать?

Выборка.Следующий();
ТЧ = ЭтотОбъект.Товары;
Строчка=ТЧ.Добавить();
Строчка.Номенклатура = Выборка.ЭлНоменклатуры;
ОбработкаРеквизита("Товары.Номенклатура",ЭлементыФормы.Товары.ТекущаяСтрока,ЭтаФорма);
КонецЕсли;
16 Мимохожий Однако
 
07.01.13
09:13
(0)Где хранятся штрихкоды в этой конфигурации?
17 Mashinist
 
07.01.13
13:10
(15) процедура ОбработкаРеквизита может форму и не принимать
ей нужно что пересчитывать "Товары.Номенклатура" и где т.е. строку ТЧ. у тебя это Строчка
попробуй вызов ОбработкаРеквизита("Товары.Номенклатура",Строчка);