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