|
не заполняется табличная часть документа | ☑ | ||
---|---|---|---|---|
0
hollow82
30.08.12
✎
16:33
|
Добрый день, помогите, пожалуйста, разобраться
не заполняется табличная часть документа поступления Процедура Инициализировать(ПереданныйОбъект, ИмяТЧ, ТабличноеПоле)Экспорт СсылкаНаОбъект = ПереданныйОбъект.Ссылка; //сообщить(ПереданныйОбъект + ИмяТЧ); ИмяТаблЧасти = ИмяТЧ; ТаблЧасть = ТабличноеПоле.Значение; Если ТаблЧасть.Количество()>0 Тогда Ответ = Вопрос("Очистить табличную часть?", РежимДиалогаВопрос.ДаНет); Если Ответ = КодВозвратаДиалога.Да Тогда ТаблЧасть.Очистить(); КонецЕсли; КонецЕсли; адресФайла = "C:\tov.txt"; файл = Новый ТекстовыйДокумент; файл.Прочитать(адресФайла); Для сч=1 По файл.КоличествоСтрок() Цикл стр = файл.ПолучитьСтроку(сч); новЗапрос=Новый Запрос; новЗапрос.Текст= "ВЫБРАТЬ ПЕРВЫЕ 1 | Штрихкоды.Владелец КАК Владелец, | Штрихкоды.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, | Штрихкоды.Штрихкод КАК Штрихкод | ИЗ | РегистрСведений.Штрихкоды КАК Штрихкоды | ГДЕ | Штрихкоды.Штрихкод=&стр"; новЗапрос.УстановитьПараметр("стр",стр); РезультатЗапроса = новЗапрос.Выполнить(); Если Не РезультатЗапроса.Пустой() Тогда Сообщить("не пустой"); Выборка = РезультатЗапроса.Выгрузить(); Для каждого ТекСтрока из Выборка цикл ПолучВладелец = ТекСтрока.Владелец; Сообщить(ПолучВладелец); КонецЦикла; КонецЕсли; Если НЕ ПустаяСтрока(ПолучВладелец) тогда Попытка ном = Справочники.Номенклатура.НайтиПоНаименованию(ПолучВладелец); Исключение Попытка ном = Справочники.Номенклатура.НайтиПоРеквизиту( "НаименованиеПолное", ПолучВладелец) ; Исключение Сообщить(" !!! ошибка, не найден товар с штрихкод = "+стр); КонецПопытки; КонецПопытки; КонецЕсли; товарыСтрока= ТаблЧасть.Добавить(); Если НЕ ПустаяСтрока(ном) тогда //сообщить("Тест "+ном.Наименование); товарыСтрока.Номенклатура=ном.Наименование; //здесь ошибка говорит не найдено поле объекта Номенклатура товарыСтрока.Количество = ном.Количество; //товарыСтрока.Наименование=ном.Наименование; //товарыСтрока.ЕдиницаИзмерения=ном.ЕдиницаИзмерения; //товарыСтрока.Характеристика=ном.Артикул; //товарыСтрока.Коэффициент=ном.Коэффициент; //товарыСтрока.Качество = ном.Качество; КонецЕсли; КонецЦикла; |
|||
1
Wobland
30.08.12
✎
16:35
|
>говорит не найдено поле объекта Номенклатура
думаешь, мы его найдём? |
|||
2
Wobland
30.08.12
✎
16:35
|
и почему берётся любой один владелец из выборки?
|
|||
3
Wobland
30.08.12
✎
16:36
|
ИмяТаблЧасти = ИмяТЧ;
ТаблЧасть = ТабличноеПоле.Значение; двойка |
|||
4
Wobland
30.08.12
✎
16:37
|
(2) первые 1. не из выборки, а из регистра
|
|||
5
del123
30.08.12
✎
16:37
|
попытка
исключение попытка исключение конецпопытки конецпопытки Жесть какая.. |
|||
6
Wobland
30.08.12
✎
16:38
|
ном.Наименование
ты в курсе, чем "холлов82" отличается от тебя? |
|||
7
vmv
30.08.12
✎
16:38
|
(5)
подстрахуй не подстрахуй все равно получишь ...двойка |
|||
8
Staffa
30.08.12
✎
16:39
|
вроде не пятница, но код доставляет )))
|
|||
9
Wobland
30.08.12
✎
16:39
|
на первый взгляд всё. если что-то упустил, остальные дозакидают ;) исправляй и возвращайся.
|
|||
10
hollow82
30.08.12
✎
16:42
|
Ну блин весело
Скажу сразу, многое копипаста, так как делаю что либо в 1С первый раз ИмяТаблЧасти = ИмяТЧ; ТаблЧасть = ТабличноеПоле.Значение; двойка ну я понял что двойка, здесь вопросы новичкам задавать запрещается? |
|||
11
Wobland
30.08.12
✎
16:43
|
(10) нет. перед тем, как задать вопрос, придумай ответ:
1 строка: зачем? 2 строка: обращайся к данным, а не к тому, что ты видишь на форме |
|||
12
hollow82
30.08.12
✎
16:51
|
Если бы я понимал, что Вы имеете ввиду...
ИмяТаблЧасти = ИмяТЧ; - осталось от подобной обработки заполнения табл.части я тоже заметил, что негде не используется... смешно, наверное ТабличноеПоле не понимаю что такое, и зачем берется его значение, не знаю понимаю только что передается при инициализации это обработки И принимает значение ДокументТабличнаяЧасть.ПоступлениеТоваровУслуг.Товары |
|||
13
Wobland
30.08.12
✎
16:53
|
(12) не тащи с формы, говори сразу ТвойДокумент.ТЧ
|
|||
14
Reset
30.08.12
✎
16:56
|
(12) Он имеет в виду, что логичнее было бы
ТаблЧасть=ПереданныйОбъект[ИмяТЧ]; вместо ИмяТаблЧасти = ИмяТЧ; ТаблЧасть = ТабличноеПоле.Значение; |
|||
15
hollow82
30.08.12
✎
17:01
|
Это понял.
Теперь ошибок нету, но табл. часть не заполняет |
|||
16
Wobland
30.08.12
✎
17:02
|
(15) в 18й строке ошибка
|
|||
17
hollow82
30.08.12
✎
17:05
|
Считая пустые строки или нет
Тоесь В запросе или при обращении к текстовому файлу? |
|||
18
Wobland
30.08.12
✎
17:07
|
(17) тебе намекают, что х его з после твоих исправлений. или ты сочувствия ждёшь на (15)?
|
|||
19
hollow82
30.08.12
✎
17:09
|
Ясно
|
|||
20
Шапокляк
30.08.12
✎
17:30
|
(0) Код, конечно, замечательный.
ТС, ты, как я понимаю, имеешь текстовый файл со списком штрихкодов? Ты в запросе ищешь владельца штрихкода и, наверно, находишь (и это уже ссылка на элемент справочника Номенклатура). Тогда за каким таким ты после этого пытаешься найти в справочнике Номенклатура элемент, у которого наименование равно ссылке на элемент справочника Номенклатура? Если даже предположить, что эта дикая затея удалась, то реквизит Количество в табличную часть документа записывается из одноименного реквизита найденной номенклатуры? |
|||
21
hollow82
30.08.12
✎
17:31
|
Процедура Инициализировать(ПереданныйОбъект, ИмяТЧ, ТабличноеПоле) Экспорт
//Если ПереданныйОбъект.Модифицированность() Тогда // Предупреждение("Перед заполнением документа необходимо его записать!"); // Возврат; //КонецЕсли; СсылкаНаОбъект = ПереданныйОбъект.Ссылка; //сообщить(ПереданныйОбъект + ИмяТЧ); ИмяТаблЧасти = ИмяТЧ; ТаблЧасть=ПереданныйОбъект[ИмяТЧ]; Если ТаблЧасть.Количество()>0 Тогда Ответ = Вопрос("Очистить табличную часть?", РежимДиалогаВопрос.ДаНет); Если Ответ = КодВозвратаДиалога.Да Тогда ТаблЧасть.Очистить(); КонецЕсли; КонецЕсли; //ФормаРеал = Документы.РеализацияТоваровУслуг.ПолучитьФормуВыбора(); //ФормаРеал.Заголовок = "Выберите реализацию товаров для заполнения перемещения"; //ФормаРеал.РежимВыбора = Истина; //ТекРеал = ФормаРеал.ОткрытьМодально(); адресФайла = "C:\tov.txt"; файл = Новый ТекстовыйДокумент; файл.Прочитать(адресФайла); Для сч=1 По файл.КоличествоСтрок() Цикл стр = файл.ПолучитьСтроку(сч); новЗапрос=Новый Запрос; новЗапрос.Текст= "ВЫБРАТЬ ПЕРВЫЕ 1 | Штрихкоды.Владелец КАК Владелец, | Штрихкоды.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, | Штрихкоды.Штрихкод КАК Штрихкод | ИЗ | РегистрСведений.Штрихкоды КАК Штрихкоды | ГДЕ | Штрихкоды.Штрихкод=&стр"; новЗапрос.УстановитьПараметр("стр",стр); //сообщить(новЗапрос.Текст); РезультатЗапроса = новЗапрос.Выполнить(); //сСтрук = Новый Структура; Если Не РезультатЗапроса.Пустой() Тогда сообщить("не пустой"); Выборка = РезультатЗапроса.Выгрузить(); Для каждого ТекСтрока из Выборка цикл ПолучВладелец = ТекСтрока.Владелец; Сообщить(ПолучВладелец); КонецЦикла; КонецЕсли; //сообщить("пустой"); Если НЕ ПустаяСтрока(ПолучВладелец) тогда Попытка ном = Справочники.Номенклатура.НайтиПоНаименованию(ПолучВладелец); сообщить("11"); Исключение Попытка ном = Справочники.Номенклатура.НайтиПоРеквизиту( "НаименованиеПолное", ПолучВладелец) ; Исключение Сообщить(" !!! ошибка, не найден товар с штрихкод = "+стр); КонецПопытки; КонецПопытки; КонецЕсли; // // //// товарыСтрока= ТаблЧасть.Добавить(); сообщить(ТаблЧасть); Если НЕ ПустаяСтрока(ном) тогда ЗаполнитьЗначенияСвойств(товарыСтрока,ном); товарыСтрока.Номенклатура=ном.наименование; //товарыСтрока.Количество = ном.Количество; //товарыСтрока.Номенклатура=ном.Наименование; // // товарыСтрока.Номенклатура=ном.ЕдиницаИзмерения; //товарыСтрока.Характеристика=ном.Артикул; //товарыСтрока.Коэффициент=ном.Коэффициент; //товарыСтрока.Качество = ном.Качество; КонецЕсли; КонецЦикла; |
|||
22
Reset
30.08.12
✎
17:32
|
(20) Я думаю, количество у него тоже в текстовом файле
|
|||
23
Wobland
30.08.12
✎
17:33
|
(21) > товарыСтрока.Номенклатура=ном.наименование;
повторяю вопрос: в чём разница между "холлов82" и тобой? |
|||
24
Reset
30.08.12
✎
17:35
|
Что-то типа импорта с ТСД ваяет
|
|||
25
hollow82
30.08.12
✎
17:38
|
Да именно эту чешь я и делаю.
Потому что тсд под терминал работает плохо. Я не понимаю намека, в чем разница hollow82 -ник я человек, на это намекаешь? |
|||
26
Wobland
30.08.12
✎
17:43
|
(25) ага. пытаешься на место номенклатуры засунуть строку
|
|||
27
Reset
30.08.12
✎
17:43
|
(25) Он именно на это намекает.
и (20) в первом предложении |
|||
28
Reset
30.08.12
✎
17:44
|
В третьем*
|
|||
29
hollow82
30.08.12
✎
17:47
|
Пардон с самого начала я не понял этого
Значит строку как то преобразовать надо? |
|||
30
Reset
30.08.12
✎
17:52
|
(29) Я бы предложил с прояснения, откуда ты собирался количество брать и формата файла
|
|||
31
Reset
30.08.12
✎
17:52
|
(30) "предложил начать"
|
|||
32
hollow82
30.08.12
✎
17:52
|
(20) Да, я конечно и не ожидал, что с первого раза получится что то осмсленное
|
|||
33
Reset
30.08.12
✎
17:54
|
"вопросы новичкам задавать запрещается"
Вопросы не запрещается. У тебя же кривая попытка решения задачи, без описания ее (задачи). Поэтому энтузиазма у отвечающих и нема |
|||
34
hollow82
30.08.12
✎
17:54
|
до количества дело и не дошло пока, оно будет в дальнейшем из текстовика
тоже выбираться. с этим думаю разберусь. мне бы хотябы вставить в таблицу номенклатуру |
|||
35
Шапокляк
30.08.12
✎
17:56
|
(34) Повторяю намек. Ты запросом по штрихкоду Уже.Нашел.Номенклатуру.
|
|||
36
hollow82
30.08.12
✎
17:57
|
пардон, я собирался все описать в сообщении после кода но опешил слегка от ответов
Задача как описала шапокляк. из текстовика взять штрихкоды и по ним заполнить табличнуючасть скажем в документе поступления Я понял, что лишнее сделал. но в результате же получил ном... |
|||
37
AlexTim03
30.08.12
✎
17:58
|
(0) нельзя ссылке присвоить наименование (текст).
ссылка уже найдена запросом. ее и вставляй. Количество берется не из номенклатуры, а из текстового файла. Поиск по наименованию не вернет исключение. |
|||
38
hollow82
30.08.12
✎
18:01
|
(35) Как по ссылке получить объект?
|
|||
39
Wobland
30.08.12
✎
18:03
|
(38) тут даже Капитан О бессилен
|
|||
40
Wobland
30.08.12
✎
18:03
|
(38) только в ТЧ кладётся ссылка, а не объект
|
|||
41
Шапокляк
30.08.12
✎
18:04
|
(38) А в вашей табличной часть объекты хранятся? Прикольно.
|
|||
42
Reset
30.08.12
✎
18:06
|
Я причесал твой код из (0).
Не факт, что он безошибочен (наверняка есть ошибки). Но по кр мере, его можно исп как рыбу для задачи считывания товаров по шк, без количества
|
|||
43
Reset
30.08.12
✎
18:08
|
Все, хватит на сегодня добрых дел ( и так уже в top100 попал :D)
|
|||
44
Wobland
30.08.12
✎
18:09
|
(42)"ВЫБРАТЬ ПЕРВЫЕ 1
Если Выборка.Количество()>1 |
|||
45
hollow82
30.08.12
✎
18:09
|
Вот я получил эту ссылку запросом,
Далее получается нужно было заполнить табл часть прямо из выборки...? Это меня один спец сбил... Я структуру данных 1С не очень понимаю, трудно мозги перестроить немножко... Спасибо за код посижу поразбирвюсь. |
|||
46
Reset
30.08.12
✎
18:12
|
(44) (42) Убрать "первые 1"
да много там еще, я не вдумываясь правил |
|||
47
Wobland
30.08.12
✎
18:17
|
(46) ага. файл.Прочитать(адресФайла); без проверки, адрес статический...
|
|||
48
hollow82
30.08.12
✎
18:21
|
просто так из выборки.владелец взять не получается.
я почему и сделал тогда Для каждого ТекСтрока из Выборка цикл ПолучВладелец = ТекСтрока.Владелец; КонецЦикла; |
|||
49
hollow82
30.08.12
✎
18:23
|
Пробовал и так
Выборка["Владелец"] тоже поле объекта не обнаруженно... |
|||
50
Reset
30.08.12
✎
18:23
|
(48) Потому что у тебя Выгрузить() метод вместо Выбрать() [я это тоже скопипастил]
p.s. Еслиб сам делал, Шк читал бы в тз, потом номенклатуру вытаскивал одним запросом, без цикла. Но это другая история. Все, ушел домой |
|||
51
hollow82
30.08.12
✎
18:28
|
Спасибо. попробую разобраться
|
|||
52
hollow82
30.08.12
✎
19:28
|
Вот так вроде в табличную часть вставляется характеристика и номенклатура
По поводу остальных параметров типа цена, ед. измерения, которых в этой выборке нет, как поступить? ТаблЧасть=ПереданныйОбъект[ИмяТЧ]; Если ТаблЧасть.Количество()>0 Тогда Ответ = Вопрос("Очистить табличную часть?", РежимДиалогаВопрос.ДаНет); Если Ответ = КодВозвратаДиалога.Да Тогда ТаблЧасть.Очистить(); КонецЕсли; КонецЕсли; адресФайла = "C:\tov.txt"; файл = Новый ТекстовыйДокумент; файл.Прочитать(адресФайла); Для сч=1 По файл.КоличествоСтрок() Цикл стр = файл.ПолучитьСтроку(сч); новЗапрос=Новый Запрос; новЗапрос.Текст= "ВЫБРАТЬ | Штрихкоды.Владелец КАК Владелец, | Штрихкоды.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, | Штрихкоды.Штрихкод КАК Штрихкод |ИЗ | РегистрСведений.Штрихкоды КАК Штрихкоды |ГДЕ | Штрихкоды.Штрихкод = &стр"; новЗапрос.УстановитьПараметр("стр",стр); РезультатЗапроса = новЗапрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда Сообщить("Не найден штрихкод <"+стр+">"); продолжить; КонецЕсли; Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.Прямой); Если Выборка.Количество()>1 тогда Сообщить("Найдено более 1 владельца штрихкода <"+стр+">"); Сообщить("Что делать, хз"); Продолжить; КонецЕсли; выборка.Следующий(); сообщить(Выборка.Владелец); товарыСтрока= ТаблЧасть.Добавить(); товарыСтрока.Номенклатура=Выборка.Владелец; товарыСтрока.ХарактеристикаНоменклатуры=Выборка.ХарактеристикаНоменклатуры; //Выборка.следующий(); //товарыСтрока.ЕдиницаИзмерения=ном.ЕдиницаИзмерения; //товарыСтрока.Характеристика=ном.Артикул; //товарыСтрока.Коэффициент=ном.Коэффициент; //товарыСтрока.Качество = ном.Качество; КонецЦикла; |
|||
53
Шапокляк
30.08.12
✎
19:43
|
(52) Стоит поглядеть, что происходит с колонками ТЧ при изменении номенклатуры - там ведь тоже заполняются единицы, цены и все такое.
|
|||
54
hollow82
30.08.12
✎
19:50
|
там функциями какими то все заполняется
ОбработкаТабличныхЧастей.ПриИзмененииНоменклатурыТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект); // Заполняем реквизиты табличной части. ОбработкаТабличныхЧастей.ЗаполнитьСтавкуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект, "Приобретение"); |
|||
55
hollow82
30.08.12
✎
19:52
|
а как то из справочника номенклатуры то я могу это все выбрать?
|
|||
56
Шапокляк
30.08.12
✎
19:54
|
А что мешает использовать штатный механизм? Заполнил строку, передал ее в функции как аргумент СтрокаТабличнойЧасти в (54).
|
|||
57
hollow82
30.08.12
✎
19:59
|
Как то вот так?
ОбработкаТабличныхЧастей.ПриИзмененииНоменклатурыТабЧасти(ТаблЧасть.Номенклатура, ЭтотОбъект) |
|||
58
hollow82
30.08.12
✎
20:01
|
нет, не работает
|
|||
59
hollow82
30.08.12
✎
20:02
|
Но ведь я изменил номенклатуру в ТЧ
по идее же эти функции сработать должны в visual studio бы сработали |
|||
60
Wobland
30.08.12
✎
20:04
|
(59) эти функции - обработчики интерактивных событий
|
|||
61
Шапокляк
30.08.12
✎
20:08
|
(57) ОбработкаТабличныхЧастей.ПриИзмененииНоменклатурыТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
ОбработкаТабличныхЧастей.ПриИзмененииНоменклатурыТабЧасти(ТаблЧасть.Номенклатура, ЭтотОбъект) Вы видите разницу в первом аргументе? Если нет, попробую вообразить себя Капитаном Очевидность. СтрокаТабличнойЧасти - это строка табличной части. ТаблЧасть.Номенклатура вообще неведомая хня. в (52) вы что добавляете в табличную часть? Вот это самое и есть строка табличной части. |
|||
62
hollow82
30.08.12
✎
20:17
|
Боюсь опять ошибиться но добавляю я вроде
товарыСтрока.Номенклатура или Выборка.Владелец? |
|||
63
hhhh
30.08.12
✎
23:13
|
товарыСтрока= ТаблЧасть.Добавить();
то есть добавляешь товарыСтрока |
|||
64
hhhh
30.08.12
✎
23:16
|
а в этой строке штук 30 колонок. И одна из них называется "Номенклатура". То есть ты в этой строке заполнил 2 значения, осталось еще 28 полей присвоить.
|
|||
65
hollow82
31.08.12
✎
00:07
|
В том то и дело что в выборке только 3 колонки, которые я выбрал
одна из них ссылка на владельца штрихкода, тоесть на справичник.номенклатура как мне остальные колонки получить? Как проставить цену и расчитать ндс.. Поэтому и хотел функциями воспользоваться ОбработкаТабличныхЧастей.ПриИзмененииНоменклатурыТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект) понял что вызывать надо как то так СтрокаТабличнойЧасти = товарыСтрока; ОбработкаТабличныхЧастей.ПриИзмененииНоменклатурыТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект); Но что то не работает... |
|||
66
Wobland
31.08.12
✎
04:37
|
>СтрокаТабличнойЧасти = товарыСтрока;
на кой лишние переменные плодить? >Но что то не работает... а всё от того, что ЭтотОбъект в модуле формы документа и в твоей обработке - это разные ЭтиОбъекты |
|||
67
hollow82
02.09.12
✎
02:34
|
Спасибо большое, разобрался, что надо:
ОбработкаТабличныхЧастей.ПриИзмененииНоменклатурыТабЧасти(СтрокаТабличнойЧасти, ПереданныйОбъект); Еще бы как-то с функцией ЗаполнитьЕдиницуЦенуПокупкиТабЧасти разобраться. При изменении номенклатуры в табличной части она вызывается так. СтруктураШапкиДокумента = Новый Структура("Контрагент, ТипЦен, ДоговорКонтрагента, ДатаДокумента, ВалютаДокумента, УчитыватьНДС, СуммаВключаетНДС", Контрагент, ТипЦен, ДоговорКонтрагента, Дата,ВалютаДокумента, УчитыватьНДС,СуммаВключаетНДС); ОбработкаТабличныхЧастей.ЗаполнитьЕдиницуЦенуПокупкиТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект, СтруктураШапкиДокумента, мВалютаРегламентированногоУчета); не понять только откуда берутся Контрагент, ТипЦен, ДоговорКонтрагента, Дата,ВалютаДокумента, УчитыватьНДС,СуммаВключаетНДС модуль ОбработкаТабличныхЧастей просмотрел, там вроде ничего такого в начале не обьявляется... |
|||
68
hhhh
02.09.12
✎
08:51
|
ОбработкаТабличныхЧастей.ЗаполнитьЕдиницуЦенуПокупкиТабЧасти(СтрокаТабличнойЧасти, ПереданныйОбъект, ПереданныйОбъект, мВалютаРегламентированногоУчета);
|
|||
69
hollow82
03.09.12
✎
12:59
|
Получилось вот так, и работает вроде...
СтруктураШапкиДокумента = Новый Структура("Контрагент, ТипЦен, ДоговорКонтрагента, ДатаДокумента, ВалютаДокумента, УчитыватьНДС, СуммаВключаетНДС", ПереданныйОбъект.Контрагент, ПереданныйОбъект.ТипЦен, ПереданныйОбъект.ДоговорКонтрагента, ПереданныйОбъект.Дата,ПереданныйОбъект.ВалютаДокумента, ПереданныйОбъект.УчитыватьНДС,ПереданныйОбъект.СуммаВключаетНДС); ОбработкаТабличныхЧастей.ЗаполнитьЕдиницуЦенуПокупкиТабЧасти(СтрокаТабличнойЧасти, ПереданныйОбъект,СтруктураШапкиДокумента, мВалютаРегламентированногоУчета); Огромное спасибо за помощь!!! :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |