|
1С:Предприятие
:: 1С:Предприятие 7.7 и ранее
|
|
| ||
Mafiozaa 01.10.20 - 09:33 | Приветствую,не понимаю как я могу записать значение переменной в реквизит табличной части
есть реквизит табличной части который я создал назвал КодМаркировки, есть переменная Штрихкодвр которая принимает значения со сканера, необходимо содержимое Штрихкодвр записать в реквизит табличной части КодМаркировки Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные) // Процедура разбирает штрих-код, считанный сканером // и заполняет строки накладной Перем Упаковка,ТекКоличество, Спецификация; Перем ВремТовар, ВремЕдиница, ВремКоличество, ВремЦена; Перем СтрокаВозврЦена; Если Событие = "BarCodeValue" Тогда Если Форма.ТолькоПросмотр() = 0 Тогда Если ПустоеЗначение(БанкНом)=1 тогда Если ПустоеЗначение(Итог("СкидкаСпасибо"))=1 тогда //---добавленные строки---{ Штрихкодвр = СокрЛП(Данные); ПрефиксШтрихкода = глПрефиксШтрихкода(); Если ПустоеЗначение(ПрефиксШтрихкода) = 0 Тогда Если Найти(ПрефиксШтрихкода, Лев(Штрихкодвр, 1)) <> 0 Тогда // Удаляем спец. символ из штрих-кода Штрихкодвр = Сред(Штрихкодвр, 2); Иначе Сообщить("Формат считанного штрих-кода не предназначен для товаров"); глСканерПосылкаДанных(1); АктивизироватьПослеВвода(); Возврат; КонецЕсли; КонецЕсли; Если Лев(Штрихкодвр,2) = "28" Тогда Спр=СоздатьОбъект("Справочник.КартыЛояльности"); Если Спр.НайтиПоКоду(Сред(Штрихкодвр,3,10),0)=1 Тогда КартаЛояльности=Спр.ТекущийЭлемент(); ПриИзмКартыЛояльности(); Иначе Сообщить("Неверный номер карты лояльности."); КонецЕсли; глСканерПосылкаДанных(1); АктивизироватьПослеВвода(); Возврат; КонецЕсли; Если (Лев(Штрихкодвр,8) = "21928100") и (Штрихкодвр <> "2192810000023") и (Штрихкодвр <> "2192810000025") Тогда Спр=СоздатьОбъект("Справочник.Скидки"); Если Спр.НайтиПоКоду("ГЛ005",0)=1 Тогда Скидка=Спр.ТекущийЭлемент(); КартаЛояльности=""; ПриИзмененииСкидки(); КонецЕсли; глСканерПосылкаДанных(1); АктивизироватьПослеВвода(); Возврат; КонецЕсли; Если Штрихкодвр = "2192810000023" Тогда Спр=СоздатьОбъект("Справочник.Скидки"); Если Спр.НайтиПоКоду("ГЛ004",0)=1 Тогда Скидка=Спр.ТекущийЭлемент(); КартаЛояльности=""; ПриИзмененииСкидки(); КонецЕсли; глСканерПосылкаДанных(1); АктивизироватьПослеВвода(); Возврат; КонецЕсли; Если Штрихкодвр = "2192810000025" Тогда Спр=СоздатьОбъект("Справочник.Скидки"); Если Спр.НайтиПоКоду("ГЛ006",0)=1 Тогда Скидка=Спр.ТекущийЭлемент(); КартаЛояльности=""; ПриИзмененииСкидки(); КонецЕсли; глСканерПосылкаДанных(1); АктивизироватьПослеВвода(); Возврат; КонецЕсли; //---конец доб. строк-----} Если ПустоеЗначение(Номенклатура) = 1 Тогда Если НомерСтроки > 0 Тогда УдалитьСтроку(); КонецЕсли; КонецЕсли; Если глПолучитьТоварПоШтрихкоду(Данные, ВремТовар, ВремЕдиница, ВремКоличество) <> 0 Тогда //--добавленные строки---{ НомС=глЭтоСертификат(ВремТовар); Если НомС>0 Тогда РегСерт = Регистр.ПодарочныеСертификаты; Акт=РегСерт.Остаток(ВремТовар,"Количество"); Если Акт>1 Тогда глСканерПосылкаДанных(1); Предупреждение("Сертификат активирован в нескольких магазинах, требуется проверка, операция прервана!",60); АктивизироватьПослеВвода(); Возврат; ИначеЕсли Акт<0 Тогда глСканерПосылкаДанных(1); Предупреждение("Сертификат был предъявлен в нескольких магазинах, требуется проверка, операция прервана!",60); АктивизироватьПослеВвода(); Возврат; ИначеЕсли Акт=1 Тогда Ост=Регистр.ОстаткиТМЦ.СводныйОстаток(ВремТовар,Склад,,"Количество"); Если Ост>0 Тогда глСканерПосылкаДанных(1); Предупреждение("Сертификат есть на остатках, но при этом активирован, требуется проверка, операция прервана!",60); АктивизироватьПослеВвода(); Возврат; ИначеЕсли Ост<0 Тогда глСканерПосылкаДанных(1); Предупреждение("Отрицательный остаток на магазине и числится активированным, требуется проверка, операция прервана!",60); АктивизироватьПослеВвода(); Возврат; КонецЕсли; ВыбратьСтроки(); Пока ПолучитьСтроку()=1 Цикл Если Номенклатура=ВремТовар Тогда Если Количество>=0 Тогда глСканерПосылкаДанных(1); Предупреждение("Сертификат выбран для продажи, но он активирован, требуется проверка, операция прервана!",60); АктивизироватьПослеВвода(); Возврат; КонецЕсли; глСканерПосылкаДанных(1); Предупреждение("Сертификат уже добавлен в качестве оплаты.",60); АктивизироватьПослеВвода(); Возврат; КонецЕсли; КонецЦикла; НоваяСтрока(); Номенклатура=ВремТовар; ШтрихКод=Данные; Количество=-1; СертНом=СертНом+?(СокрП(СертНом)="","",",")+глНомерСертификата(ВремТовар); ПриИзмСерт(); СертСум=СертСум+НомС; глСканерПосылкаДанных(1); АктивизироватьПослеВвода(); Возврат; Иначе ВыбратьСтроки(); Пока ПолучитьСтроку()=1 Цикл Если Номенклатура=ВремТовар Тогда Если Количество<0 Тогда глСканерПосылкаДанных(1); Предупреждение("Сертификат выбран как оплата, но при этом неактивен, требуется проверка, операция прервана!",60); АктивизироватьПослеВвода(); Возврат; КонецЕсли; глСканерПосылкаДанных(1); Предупреждение("Сертификат уже добавлен к продаже.",60); АктивизироватьПослеВвода(); Возврат; КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; //--конец доб. строк-----} ТаблицаПодбора = СоздатьОбъект("ТаблицаЗначений"); ТаблицаПодбора.НоваяКолонка("Номенклатура"); ТаблицаПодбора.НоваяКолонка("Единица"); ТаблицаПодбора.НоваяКолонка("Количество", "Число"); ТаблицаПодбора.НоваяКолонка("Цена", "Число"); ТаблицаПодбора.НоваяСтрока(); ТаблицаПодбора.Номенклатура = ВремТовар; ТаблицаПодбора.Единица = ВремЕдиница; ТаблицаПодбора.Количество = ВремКоличество; ПараметрыПодбора = СоздатьОбъект("СписокЗначений"); ПараметрыПодбора.ДобавитьЗначение(0, "ЕстьВидТМЦ"); Если (ВремТовар.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Услуга) или (ВремТовар.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Работа) Тогда ТаблицаПодбора.Цена = глПолучитьЦену(ВремТовар, Константа.РозничныйТипЦен, ДатаДок, ВремЕдиница, Валюта, Курс, Кратность); ПараметрыПодбора.ДобавитьЗначение("ИзСправочника" , "ЦенаВподборе"); ПараметрыПодбора.ДобавитьЗначение(Константа.РозничныйТипЦен, "ТипЦен"); ИначеЕсли Склад.РозничныйСклад = 0 Тогда ТаблицаПодбора.Цена = глПолучитьЦену(ВремТовар, глЗначениеПоУмолчанию("ОсновнойТипЦенПродажи"), ДатаДок, ВремЕдиница, Валюта, Курс, Кратность); ПараметрыПодбора.ДобавитьЗначение("ИзСправочника", "ЦенаВподборе"); ПараметрыПодбора.ДобавитьЗначение(глЗначениеПоУмолчанию("ОсновнойТипЦенПродажи"), "ТипЦен"); Иначе // цена из остатков регистра ТовОстатки = СоздатьОбъект("Регистр.ОстаткиТМЦ"); ФирмаДляОстатковТМЦ = глФирмаДляОстатковТМЦ(Фирма); //ТовОстатки.УстановитьЗначениеФильтра("Фирма", ФирмаДляОстатковТМЦ, 2); ТовОстатки.УстановитьЗначениеФильтра("Склад", Склад, 1); глПолучитьРозничныйОстатокЦену(ВремТовар, ВремЕдиница, ТовОстатки, , СтрокаВозврЦена); СписВозврЦен = ЗначениеИзстроки(СтрокаВозврЦена); Если СписВозврЦен.РазмерСписка() = 1 Тогда ТаблицаПодбора.Цена = глПересчет(СписВозврЦен.ПолучитьЗначение(1), глРубли, ДатаДок, Валюта, Курс,, Кратность); ИначеЕсли СписВозврЦен.РазмерСписка() > 1 Тогда Если СписВозврЦен.ВыбратьЗначение(ВремЦена,"Выберите цену для товара " + ВремТовар.Наименование, , 60) = 1 Тогда ТаблицаПодбора.Цена = глПересчет(ВремЦена, глРубли, ДатаДок, Валюта, Курс,, Кратность); Иначе ТаблицаПодбора.Цена = 0; КонецЕсли; Иначе ТаблицаПодбора.Цена = 0; КонецЕсли; ПараметрыПодбора.ДобавитьЗначение("Розница", "ЦенаВподборе"); КонецЕсли; ПараметрыПодбора.ДобавитьЗначение(ТаблицаПодбора , "ТаблицаПодбора"); глОбработкаПодбора(Контекст, ПараметрыПодбора, 0, 0, 1); ВыбратьСтроки(); Пока ПолучитьСтроку() = 1 Цикл ШтрихКод = Единица.ШтрихКод; // прописываем штрих - код КонецЦикла; //---добавленные строки---{ //СпецПересчетСкидок(); ПересчитатьСкидки(); //---конец доб. строк-----} КонецЕсли; КонецЕсли; иначе глСканерПосылкаДанных(1); Возврат; КонецЕсли; КонецЕсли; Если ПустоеЗначение(Итог("СкидкаСпасибо"))=1 тогда глСканерПосылкаДанных(1); АктивизироватьПослеВвода(); иначе глСканерПосылкаДанных(1); Возврат; КонецЕсли; Если ПустоеЗначение(БанкНом)=1 тогда глСканерПосылкаДанных(1); АктивизироватьПослеВвода(); иначе глСканерПосылкаДанных(1); Возврат; КонецЕсли; // Обработка закончена. Готовы к получению нового штрихкода. Иначе глОбработкаВнешнегоСобытия(Источник, Событие, Данные); КонецЕсли; глСканерПосылкаДанных(1); КонецПроцедуры // ОбработкаВнешнегоСобытия() код для наглядности,подскажите как мне к нему обратится чтоб записать ибо простое КодМаркировки = ТаблицаДокумента.КодМаркировки КодМаркировки = Штрихкодвр не работает) | ||
skafandr 1 - 01.10.20 - 09:44 | (0)Тебе же написали - учи язык. Твои 15 тем за 20 дней не от каких-то от технических сложностей, а по незнанию элементарных вещей. И форум не место для обучения элементарному. Тут подпрыгнул и быстренько не вникая сделал - не получится. | ||
Mafiozaa 2 - 01.10.20 - 09:45 | (1) Брат я знал что ты будешь ругаться)) | ||
Mafiozaa 3 - 01.10.20 - 09:47 | (1) Хотяб намекни в какую часть кода смотреть, просто создается куча таблиц которые передаются куда то голова уже пухнет | ||
HawkEye 4 - 01.10.20 - 09:50 | (0) если тебе надо "содержимое Штрихкодвр записать в реквизит табличной части КодМаркировки", то почему в "простое КодМаркировки = ТаблицаДокумента.КодМаркировки ..... не работает" реквизит справа? ))) | ||
Mafiozaa 5 - 01.10.20 - 09:51 | (4) Правый,последний,я понял про что ты,щас попробую | ||
Василий Алибабаевич 6 - 01.10.20 - 09:51 | (3) Начни с простого.
Вот это вот : "КодМаркировки = ТаблицаДокумента.КодМаркировки КодМаркировки = Штрихкодвр"что по-твоему должно означать? | ||
HawkEye 7 - 01.10.20 - 09:52 | |||
Ёпрст 8 - 01.10.20 - 09:52 | (0) и в какую именно строку записать то хоть ? | ||
Mafiozaa 9 - 01.10.20 - 09:53 | (8) В новосозданный реквизит КодМаркировки | ||
Ёпрст 10 - 01.10.20 - 09:53 | (9) ладноЮ для тех кто в танке:
у тебя в документе 10 строк, в какую из этих 10 надо записать твой шк со сканера ? | ||
Mafiozaa 11 - 01.10.20 - 09:54 | (7) Он нигде не записывается, но пытался подставить его вот сюда
НоваяСтрока(); Номенклатура=ВремТовар; ШтрихКод=Данные;Количество=-1; !-! | ||
Mafiozaa 12 - 01.10.20 - 09:56 | (10) Почему 10,когда реквизитов более | ||
Mafiozaa 13 - 01.10.20 - 09:57 | (6) Это то что я увидел как делалось, я предположил что присвоил переменной значение реквизита, чтоб потом туда записать штрихкодвр | ||
Ёпрст 14 - 01.10.20 - 10:00 | (11) реквизит в документе твоём как называется ? ШтрихКод или КодМаркировки ? Типу реквизита какой ? Строка лпределенной длины ?
Нахрена он нужент там, если он и так есть в товаре, который найден выше по этому коду ? | ||
Mafiozaa 15 - 01.10.20 - 10:03 | (14) КодМаркировки строка 90 симв
А найден шк еан13, а в штрихкодвр еще будет записываться datamatrix код,и вот этот код должен будет заносится в КодМаркировки | ||
Mafiozaa 16 - 01.10.20 - 10:05 | (14) логика в чем, кассир пикнул обычный еан13 шк, затем пикнула маркировку datamatrix и текст расшифрованный сканером записался в КодМаркировки | ||
HawkEye 17 - 01.10.20 - 10:05 | (11) не вижу нигде КодМаркировки = почему? | ||
Mafiozaa 18 - 01.10.20 - 10:06 | (17) Привел в первозданный вид,ибо куда я только не вставлял этот кодмаркировки | ||
HawkEye 19 - 01.10.20 - 10:07 | (16) в таком случае надо НОваяСтрока() делать только после второго сканирования... т.е. нужна переменная в котрой будет храниться инфа о том, чтоШК уже есть и теперь нужна Маркировка.... | ||
HawkEye 20 - 01.10.20 - 10:07 | (18) ну и как мы должны подсказать где косяк, если код рабочий и ты все свои косяки удалил? | ||
Mafiozaa 21 - 01.10.20 - 10:10 | (19) Я думал это сделать через условие типо, если штрихкодвр = текст то записывать в код маркировки,иначе это обычный шк | ||
Mafiozaa 22 - 01.10.20 - 10:10 | (20) Я хочу узнать куда мне его следует вставлять | ||
HawkEye 23 - 01.10.20 - 10:11 | |||
Mafiozaa 24 - 01.10.20 - 10:13 | (23) Его надо заполнить именно после пика | ||
Ёпрст 25 - 01.10.20 - 10:13 | |||
Mafiozaa 26 - 01.10.20 - 10:13 | (23) вдруг второй строки в чеке не будет (чек на 1 позицию) | ||
Ёпрст 27 - 01.10.20 - 10:13 | (22) без вазелина тут не вставить | ||
Mafiozaa 28 - 01.10.20 - 10:14 | (25) признак хранится в товаре, тот товар что маркируемый он видит,и далее с ним ничего не делает | ||
Mafiozaa 29 - 01.10.20 - 10:15 | (27) красавчик))) | ||
Ёпрст 30 - 01.10.20 - 10:15 | (28) не он а ты.. в коде не видно, где ты проверяешь, что товар маркируемый и предлагаешь еще что-то ввести Рекламное место пустует | ||
HawkEye 31 - 01.10.20 - 10:15 | (26) не будет второй строки так не будет... при чем тут это? ) | ||
Василий Алибабаевич 32 - 01.10.20 - 10:16 | ЛивингСтары множатся почкованием? | ||
HawkEye 33 - 01.10.20 - 10:16 | (24) ну заполни после пика... весь вопрос в том, строка у тебя уже есть или нет... | ||
Ёпрст 34 - 01.10.20 - 10:18 | да,..вот эту дурь выкинь из кода НоваяСтрока(); Номенклатура=ВремТовар; ШтрихКод=Данные; Количество=-1; там по условию туда попадает, если ШК - это какой-то сертификат | ||
Mafiozaa 35 - 01.10.20 - 10:24 | (30) Если ТаблицаПодбора.Номенклатура.Маркер = 1 Тогда Предупреждение("Данный товар имеет маркировку, проведите кодом маркировки по сканеру!"); КонецЕсли; Проверка в глобальном модуле на маркировку товара | ||
Ёпрст 36 - 01.10.20 - 10:32 | (35) сам дописал ? :) | ||
Mafiozaa 37 - 01.10.20 - 10:32 | (33) Когда происходит пик,первая строка уже есть | ||
Mafiozaa 38 - 01.10.20 - 10:33 | (36) Помогли) | ||
Ёпрст 39 - 01.10.20 - 10:41 | короче,
вот в это место втыкаешь
ТаблицаПодбора.НоваяКолонка("КодМаркировки");
ТаблицаПодбора.НоваяСтрока();
ТаблицаПодбора.Номенклатура = ВремТовар;
Если ВремТовар.Маркер = 1 Тогда
ТаблицаПодбора.КодМаркировки = ОткрытьФормуМодально("Обработка.ВВодКодМаркировки");
КонецЕсли;
в глобальнике, в глОбработкаПодбора сымотришь, что если заполнен реквизит КодМаркировки в прилетевшей ТЗ, то не ищешь этот товар в табличной части, а сразу делаешь НоваяСтрока и заполняешь Товар, свой КодМаркировки и количество 1.
+ лепишь обработку ВВодКодМаркировки, в которой прописываешь своё ОбработкаВнешнегоСобытия в котором, если прилетевшее событие - это событие сканера, и длина строки (или как ты там определяешь , что это именно маркировка а не неведомая хрень) то Форма.Параметр = твой ШК и форма.закрыть. всё. | ||
Mafiozaa 40 - 01.10.20 - 10:43 | (39) Буду пробывать,спасибо за суету брат) | ||
HawkEye 41 - 01.10.20 - 10:44 | (37) зачем? | ||
Mafiozaa 42 - 01.10.20 - 10:45 | (39) Брат,а зачем так делать | ||
Mafiozaa 43 - 01.10.20 - 10:45 | |||
Mafiozaa 44 - 01.10.20 - 10:46 | (41) Я пикаю обычный шк еан13,он находит позицию в номенклатуре согласно данного шк проверяет на наличие маркера,если есть нужно его пикнуть еще раз,но в это время позиция из номенклатуры уже в табл части | ||
Mafiozaa 45 - 01.10.20 - 10:47 | (39) У меня же переменная принимает значение со сканера,мне его просто нужно записать туда | ||
HawkEye 46 - 01.10.20 - 10:48 | (44) зачем? а если второй раз не пикнут, или пикнут ШК еан13? | ||
Ёпрст 47 - 01.10.20 - 10:49 | (42) затем, что так точно введут второй раз то что надо. | ||
Mafiozaa 48 - 01.10.20 - 10:49 | (46) хорошо,твой вариант? | ||
Ёпрст 49 - 01.10.20 - 10:50 | и это будет именно для этого товара.
в твоём коде, если второй раз пиликнут еан 13, будет просто количество 2 и всё. привет котёнку | ||
Mafiozaa 50 - 01.10.20 - 10:51 | (47) Да все верно,но запускать внешнюю форму не удобно со стороны кассира | ||
HawkEye 51 - 01.10.20 - 10:51 | (48) мой вариант у меня, но мы же сейчас твой вариант обсуждаем )) | ||
Mafiozaa 52 - 01.10.20 - 10:52 | (50) Она откроется (фоном выполнит и закроется?) глаз кассира ничего не увидит? | ||
Mafiozaa 53 - 01.10.20 - 10:52 | (51) Мой вариант плохой вариант,действительно затупит пикнет тот же шк,или не пикнет совсем | ||
HawkEye 54 - 01.10.20 - 10:53 | (50) "со стороны кассира", я не то, чтобы за запуск внешних форм, просто интересно, а у тебя есть другие стороны? )) | ||
HawkEye 55 - 01.10.20 - 10:53 | |||
Ёпрст 56 - 01.10.20 - 10:54 | По-уму, в (39) еще так добавить:
Если ВремТовар.Маркер = 1 Тогда ТаблицаПодбора.КодМаркировки = ОткрытьФормуМодально("Обработка.ВВодКодМаркировки"); Если ПустоеЗначение(ТаблицаПодбора.КодМаркировки)=1 Тогда Предупреждение("Ну ты и олень, для маркируемого товара шк маркировки обязателен, давай, до-свидания!",60); Возврат; КонецЕсли; | ||
Mafiozaa 57 - 01.10.20 - 10:54 | (54) нет,кроме кассира нет сторон) | ||
HawkEye 58 - 01.10.20 - 10:55 | (56) ну там не олень... на алкоголе например, бывает акцизка очень близко к ШК... и сканер по ошибке может не то отсканировать.... | ||
Ёпрст 59 - 01.10.20 - 10:57 | (58) ну, при открытой модальной форме для ввода шк, закрывать её, только если шк верный, или уже ОНО само закрыло её по Esc... вот для второго случая, и предупреждение и строка не добавиться.
А форму, можно и не показывать | ||
HawkEye 60 - 01.10.20 - 11:00 | (59) это понятно, я просто про "Ну ты и олень," - он же не всегда виноват )))) Рекламное место пустует | ||
Ёпрст 61 - 01.10.20 - 11:01 | (60) тут именно как раз тот случай :) | ||
Mafiozaa 62 - 01.10.20 - 11:02 | (39) Брат не совсем понял про глобальник, он у меня проверяет на наличие маркера,если он есть что мне делать,и если его нет то же что | ||
HawkEye 63 - 01.10.20 - 11:04 | |||
Mafiozaa 64 - 01.10.20 - 11:06 | (63) У меня в номенклатуре есть реквизит маркер, у каждого товара он либо 1 либо 0, если 1 значит маркер есть и будет,но при этом позиции в кассовый чек забивают по еан13 | ||
Mafiozaa 65 - 01.10.20 - 11:08 | (63) Тоесть я кассир, пикнул еан 13 в документе чекиккм вышла позиция на табл часть,сказало мне пикнуть маркировку если она есть | ||
Ёпрст 66 - 01.10.20 - 11:13 | |||
HawkEye 67 - 01.10.20 - 11:20 | ((65) зачем вылезла если еще нет марки? )) | ||
Mafiozaa 68 - 01.10.20 - 11:30 |
|
Список тем форума |