|
Если номенклатура существует выбирать иначе создавать. Не получается(( | ☑ | ||
---|---|---|---|---|
0
EKO LX
02.10.12
✎
11:59
|
Вот что у меня
Если НовыйЭлемент.Пустая() Тогда НовыйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Наименование, Истина); КонецЕсли; //Если не нашли создаем новый Если НовыйЭлемент.Пустая() Тогда НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент(); ... //далее подставляю в док ДокПоступление = НовыйДокПоступление.Товары.Добавить(); ДокПоступление.Номенклатура = НовыйЭлемент.Ссылка; .... |
|||
1
acsent
02.10.12
✎
12:00
|
может нету записать
|
|||
2
chelentano
02.10.12
✎
12:00
|
(0) а что не получается то? ты новый элемент то записываешь хоть?
|
|||
3
Cube
02.10.12
✎
12:00
|
НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлемент.Наименование = Наименование; НовыйЭлемент.Записать(); |
|||
4
KindLion
02.10.12
✎
12:00
|
После создания, новый элемент надо записать.
|
|||
5
EKO LX
02.10.12
✎
12:01
|
записать есть. но когда второй раз гружу создает идентичную номенклатуру, а нужно чтобы выбирала существующую
|
|||
6
DrShad
02.10.12
✎
12:02
|
значит не удовлетворяет условиям поиска
|
|||
7
EKO LX
02.10.12
✎
12:02
|
спасибо, уж записать умею))
|
|||
8
chelentano
02.10.12
✎
12:03
|
(5) значит, не находит по наименованию, чо
|
|||
9
Aleks73
02.10.12
✎
12:04
|
Отладчик спасет отца русской демократии(С)
|
|||
10
Darky
02.10.12
✎
12:05
|
Может у тебя длина Наименования 10 символов, а ты туда пихаешь 50?
|
|||
11
EKO LX
02.10.12
✎
12:05
|
НовыйЭлемент = Справочники.Номенклатура.ПустаяСсылка();
Если НовыйЭлемент.Пустая() Тогда НовыйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Наименование, Истина); КонецЕсли; //Если не нашли создаем новый Если НовыйЭлемент.Пустая() Тогда НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент(); ... //далее подставляю в док ДокПоступление = НовыйДокПоступление.Товары.Добавить(); ДокПоступление.Номенклатура = НовыйЭлемент.Ссылка; |
|||
12
EKO LX
02.10.12
✎
12:06
|
(10) длина наименования 100
|
|||
13
Aleks73
02.10.12
✎
12:06
|
(11) 1 + 2 строка - чушшшшь
|
|||
14
Рэйв
02.10.12
✎
12:07
|
>>НовыйЭлемент = Справочники.Номенклатура.ПустаяСсылка();
>>Если НовыйЭлемент.Пустая() Тогда ... ндааа.. |
|||
15
KabanDeGreat
02.10.12
✎
12:08
|
Может запросом выбирать по наименованию а дальше если
|
|||
16
Darky
02.10.12
✎
12:08
|
из (11) нам не видно, что ты пишешь в НовыйЭлемент.Наименование и пишешь ли вообще
|
|||
17
EKO LX
02.10.12
✎
12:08
|
(13) (14) а как?
|
|||
18
GreyAngel
02.10.12
✎
12:09
|
Наименование откуда берешь? Попробуй
НовыйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Наименование), Истина); Ну, а вообще, попробуй привести более полный кусок кода, а то ничего не понятно. |
|||
19
Рэйв
02.10.12
✎
12:10
|
(17)Никак. вообще убрать.
так: НовыйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Наименование, Истина); Если НовыйЭлемент.Пустая() Тогда НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент(); |
|||
20
GreyAngel
02.10.12
✎
12:10
|
(17) Что значит а как? Зачем у тебя проверка на пустую ссылку, если она гарантировано пустая?
|
|||
21
Рэйв
02.10.12
✎
12:11
|
Покажи что ты кладешь в наименование, а потом покажи скрин с этим элемента наименованием.
|
|||
22
EKO LX
02.10.12
✎
12:13
|
(16) (18)
беру из Эксель Наименование = ФайлXLS.Sheets(ТекНомер).Cells(1,Наим).Value; Цвет = ФайлXLS.Sheets(ТекНомер).Cells(1,Цвет1).Value; Размер = ФайлXLS.Sheets(ТекНомер).Cells(1,Размер1).Value; ******** НовыйЭлемент = Справочники.Номенклатура.ПустаяСсылка(); // Ищем товар в справочнике по наименованию Если НовыйЭлемент.Пустая() Тогда НовыйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Наименование, Истина); КонецЕсли; //Если не нашли создаем новый Если НовыйЭлемент.Пустая() Тогда НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент(); НовыйЭлемент.Наименование = Наименование + " " + Цвет + " " + Размер; |
|||
23
DrShad
02.10.12
✎
12:14
|
(22) ну ты и дятел! :))))
|
|||
24
DrShad
02.10.12
✎
12:15
|
НовыйЭлемент.Наименование = Наименование + " " + Цвет + " " + Размер;
ищешь то совсем другое |
|||
25
GreyAngel
02.10.12
✎
12:15
|
(23) Опередил.
|
|||
26
НЕА123
02.10.12
✎
12:15
|
(22)
п е з д е ц. (с) |
|||
27
Рэйв
02.10.12
✎
12:16
|
так и знал что там что-то шедевральное:-)
|
|||
28
Noroving
02.10.12
✎
12:17
|
(22) спаси и сохрани...
|
|||
29
EKO LX
02.10.12
✎
12:17
|
рад что развеселил вас, может исправите ошибку?
|
|||
30
DrShad
02.10.12
✎
12:18
|
Если НовыйЭлемент.Пустая() Тогда
НовыйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Наименование + " " + Цвет + " " + Размер, Истина); КонецЕсли; |
|||
31
Darky
02.10.12
✎
12:18
|
:)
Справочники.Номенклатура.НайтиПоНаименованию(Наименование + " " + Цвет + " " + Размер, Истина) |
|||
32
Kreont
02.10.12
✎
12:19
|
(0) Для примера через запрос:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ФизическиеЛица.Ссылка |ИЗ | Справочник.ФизическиеЛица КАК ФизическиеЛица |ГДЕ | ФизическиеЛица.Код = &Код"; Запрос.УстановитьПараметр("Код", СокрЛП(УникКод)); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Если Выборка.Следующий() Тогда Объект = Выборка.Ссылка; Иначе Фіз = Справочники.ФизическиеЛица.СоздатьЭлемент(); Фіз.Код = СокрЛП(УникКод); Фіз.Наименование = ФИО; // и остальные реквизиты... Фіз.Записать(); Объект = Фіз.Ссылка; КонецЕсли; А дальше уже использовать присвоение куда надо: Объект |
|||
33
НЕА123
02.10.12
✎
12:19
|
...
|
|||
34
chelentano
02.10.12
✎
12:22
|
(22) вглядись внимательно:
НовыйЭлемент = Справочники.Номенклатура.ПустаяСсылка(); Если НовыйЭлемент.Пустая() Тогда НовыйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Наименование, Истина); КонецЕсли; |
|||
35
chelentano
02.10.12
✎
12:22
|
(34) тьфу ты блин, не то
|
|||
36
ОператорПК
02.10.12
✎
12:23
|
Если НовыйЭлемент=Неопределено Тогда
|
|||
37
chelentano
02.10.12
✎
12:25
|
(30) +100
(36) ты СП почитай, в каких случаях Неопределено возвращается |
|||
38
ОператорПК
02.10.12
✎
12:27
|
(37) косанул.
|
|||
39
EKO LX
02.10.12
✎
12:38
|
(30) (31) опять дублируется
|
|||
40
DrShad
02.10.12
✎
12:39
|
(39) это ошибка в ДНК, а она уже не лечится - тупо приводит к мутациям и вымиранию
|
|||
41
Фокусник
02.10.12
✎
12:41
|
(0) Строго говоря, нужно не по каждой номенклатуре делать: Справочники.Номенклатура.НайтиПоНаименованию(
("запрос в цикле") Лучше так: собрать всю номенклатуру, например в таблицу значений, затем _одним_ запросом найти все ссылки для этой номенклатуры, не найденные - уже создавать. |
|||
42
Darky
02.10.12
✎
12:43
|
(39) Пора уже запустить отладчик и посмотреть, что и как ищеЦо
|
|||
43
EKO LX
02.10.12
✎
14:58
|
сорри. исправил как (30) не дублируется, но творится другая херня...
|
|||
44
EKO LX
03.10.12
✎
11:50
|
второй раз когда загружаю ту же накладную, в табличной части документа элемент номенклатура выбирается только первая созданная. т.е. есть
наименование артикул цвет размер номен1 а1 красный Л номен1 а1 красный М номен2 а2 желтый Л номен2 а2 желтый М в док добавляются номен1 а1 красный Л номен1 а1 красный Л номен2 а2 желтый Л номен2 а2 желтый Л ДокПоступление = НовыйДокПоступление.Товары.Добавить(); ДокПоступление.Номенклатура = НовыйЭлемент.Ссылка; ДокПоступление.Количество = Количество; ДокПоступление.Цена = Цена; ДокПоступление.Склад = Склад; ДокПоступление.ЕдиницаИзмерения = НовыйЭлемент.ЕдиницаХраненияОстатков; ДокПоступление.Коэффициент = НовыйЭлемент.ЕдиницаХраненияОстатков.Коэффициент; ДокПоступление.СтавкаНДС = СтавкаНДС; ДокПоступление.Сумма = Количество * Цена; Сообщить(Наименование+"-"+ШтрихКод+ " -- "+"Элемент записан"); |
|||
45
EKO LX
03.10.12
✎
11:53
|
а сама номенклатура создается следующим образом
НовыйЭлемент = Справочники.Номенклатура.ПустаяСсылка(); // Ищем товар в справочнике по наименованию Если НовыйЭлемент.Пустая() Тогда НовыйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Наименование + " " + Цвет + " " + Размер, Истина); КонецЕсли; //Если не нашли создаем новый Если НовыйЭлемент.Пустая() Тогда НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент(); Родитель = ГрпНом; НовыйЭлемент.Родитель = Родитель; НовыйЭлемент.Артикул = Артикул; НовыйЭлемент.Коллекция = Коллекция; НовыйЭлемент.Цвет = Цвет; НовыйЭлемент.Размер = Размер; НовыйЭлемент.Наименование = Наименование + " " + Цвет + " " + Размер; НовыйЭлемент.НаименованиеПолное = Наименование + " " + Цвет + " " + Размер; НовыйЭлемент.ВидНоменклатуры = ПолеВвода1; НовыйЭлемент.БазоваяЕдиницаИзмерения = ЕдИзмер; НовыйЭлемент.Записать(); НовыйЕдИзмер = Справочники.ЕдиницыИзмерения.СоздатьЭлемент(); НовыйЕдИзмер.ЕдиницаПоКлассификатору = ЕдИзмер; НовыйЕдИзмер.Наименование = ЕдИзмер.Наименование; НовыйЕдИзмер.Коэффициент = 1; НовыйЕдИзмер.Владелец = НовыйЭлемент.Ссылка; НовыйЕдИзмер.Записать(); НовыйЭлемент.ЕдиницаХраненияОстатков = НовыйЕдИзмер.Ссылка; НовыйЭлемент.СтавкаНДС = СтавкаНДС; //НовыйЭлемент.ВестиУчетПоХарактеристикам = Истина; НовыйЭлемент.Записать(); |
|||
46
DrShad
03.10.12
✎
12:01
|
(45) ты достиг совершенства в части теоремы БЖ-Соболя
|
|||
47
EKO LX
03.10.12
✎
12:13
|
(46)я не 1С-ник, а пользователь
|
|||
48
hhhh
03.10.12
✎
12:14
|
(44) и гдг тут добавляется первая? Вроде не первая.
|
|||
49
alxxsssar
03.10.12
✎
12:18
|
попробуй не наименование пользовать а СокрЛП(Наименование)
|
|||
50
DrShad
03.10.12
✎
12:18
|
(47) это не помешало достичь совершенства :)
|
|||
51
zladenuw
03.10.12
✎
12:21
|
может надо и этот реквизит ТЧ заполнять. ХарактеристикаНоменклатуры
|
|||
52
zladenuw
03.10.12
✎
12:27
|
(51) не та опера.
А весь цикл. где ты записал и потом добавляешь. покажи. |
|||
53
EKO LX
03.10.12
✎
12:39
|
нашел ошибку)
|
|||
54
EKO LX
03.10.12
✎
12:43
|
(49) хорошая вещь, только не знаю как использовать. куда ее вставить?
НовыйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Наименование, Истина); |
|||
55
EKO LX
03.10.12
✎
12:48
|
(51) первоначально так и хотел, но не знаю как добавить в характеристики. а то добавляю эти характеристики в наименование номенклатуры. а можно штрихкоды к характеристикам привязать? т.е. номенклатура одна, а характеристики разные, т.е. цвет, коллекция, размер, и разных характеристиках разные ШК
|
|||
56
НЕА123
03.10.12
✎
12:51
|
(55)
исходя из (47) мудрый совет: не надо. |
|||
57
НЕА123
03.10.12
✎
12:51
|
+(56)
позовите программиста. (с) |
|||
58
hhhh
03.10.12
✎
13:05
|
если размер и цвет прямо в наименование заносятся, то характеристики тогда не нужны.
|
|||
59
zladenuw
03.10.12
✎
13:06
|
если по феншую то надо, а так зачем лишний гемор :)
|
|||
60
EKO LX
03.10.12
✎
13:08
|
(58) ясное дело, я и не заношу. такое ощущение что код разваливается. не знаю проверял ли раньше, ШК не записывается
НовыйЭлемент = Справочники.Номенклатура.ПустаяСсылка(); // Ищем товар в справочнике по наименованию Если НовыйЭлемент.Пустая() Тогда НовыйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Наименование + " " + Цвет + " " + Размер); КонецЕсли; //Если не нашли создаем новый Если НовыйЭлемент.Пустая() Тогда НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент(); Родитель = ГрпНом; НовыйЭлемент.Родитель = Родитель; НовыйЭлемент.Артикул = Артикул; НовыйЭлемент.Коллекция = Коллекция; НовыйЭлемент.Цвет = Цвет; НовыйЭлемент.Размер = Размер; НовыйЭлемент.Наименование = СокрЛП(Наименование + " " + Цвет + " " + Размер); НовыйЭлемент.НаименованиеПолное = СокрЛП(Наименование + " " + Цвет + " " + Размер); НовыйЭлемент.ВидНоменклатуры = ПолеВвода1; НовыйЭлемент.БазоваяЕдиницаИзмерения = ЕдИзмер; НовыйЭлемент.Записать(); НовыйЕдИзмер = Справочники.ЕдиницыИзмерения.СоздатьЭлемент(); НовыйЕдИзмер.ЕдиницаПоКлассификатору = ЕдИзмер; НовыйЕдИзмер.Наименование = ЕдИзмер.Наименование; НовыйЕдИзмер.Коэффициент = 1; НовыйЕдИзмер.Владелец = НовыйЭлемент.Ссылка; НовыйЕдИзмер.Записать(); НовыйЭлемент.ЕдиницаХраненияОстатков = НовыйЕдИзмер.Ссылка; НовыйЭлемент.СтавкаНДС = СтавкаНДС; //НовыйЭлемент.ВестиУчетПоХарактеристикам = Истина; НовыйЭлемент.Записать(); //Запись РегистраСведений Штрихкоды ЗаписьШК = Истина; РегСведШК = РегистрыСведений.Штрихкоды; ВыборкаРегСведШК = РегистрыСведений.Штрихкоды.Выбрать(); Пока ВыборкаРегСведШК.Следующий() Цикл Если ВыборкаРегСведШК.Штрихкод = ШтрихКод Тогда ЗаписьШК = Ложь; КонецЕсли; КонецЦикла; ЗаписьВРегистрСвед = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи(); ЗаписьВРегистрСвед.Владелец = НовыйЭлемент.Ссылка; ЗаписьВРегистрСвед.ЕдиницаИзмерения = НовыйЭлемент.ЕдиницаХраненияОстатков; ЗаписьВРегистрСвед.Штрихкод = ШтрихКод; ЗаписьВРегистрСвед.ТипШтрихкода = ЭлементыФормы.ТипШК.Значение;//ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13; ЗаписьВРегистрСвед.Качество = Справочники.Качество.Новый; Если (ШК = 0) или (ШК > КолКолонок) Тогда Сообщить("ШтрихКод не будет добавлен к данному элементу: "+Наименование); ИначеЕсли ЗаписьВРегистрСвед.Выбран() Тогда ЗаписьВРегистрСвед.Записать(); КонецЕсли; иначе НовыйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Наименование + " " + Цвет + " " + Размер, Истина); КонецЕсли; //Создадим Док Поступления товаров и услуг ДокПоступление = НовыйДокПоступление.Товары.Добавить(); ДокПоступление.Номенклатура = НовыйЭлемент.Ссылка; ДокПоступление.Количество = Количество; ДокПоступление.Цена = Цена; ДокПоступление.Склад = Склад; ДокПоступление.ЕдиницаИзмерения = НовыйЭлемент.ЕдиницаХраненияОстатков; ДокПоступление.Коэффициент = НовыйЭлемент.ЕдиницаХраненияОстатков.Коэффициент; ДокПоступление.СтавкаНДС = СтавкаНДС; ДокПоступление.Сумма = Количество * Цена; Сообщить(Наименование+"-"+ШтрихКод+ " -- "+"Элемент записан"); //////////////////////////////////////////////////////// //Создадим Док Поступления товаров и услуг |
|||
61
НЕА123
03.10.12
✎
13:09
|
||||
62
НЕА123
03.10.12
✎
13:11
|
ТС таки ведь положит базу...
|
|||
63
hhhh
03.10.12
✎
13:32
|
(60) ну вот эту строчку выбросьте
ИначеЕсли ЗаписьВРегистрСвед.Выбран() Тогда на какой фиг вы проверяете выбран или не выбран, вам нужно ведь записать - так и записывайте. |
|||
64
EKO LX
03.10.12
✎
13:37
|
(63) ее не было, а добавил потому что есть некоторые повторяющие шрихкоды, обработка ругалась владелец ШК уже существует
|
|||
65
hhhh
03.10.12
✎
13:40
|
(64) так она всегда не выбран(). Вы же не выбирали ее.
|
|||
66
EKO LX
03.10.12
✎
13:42
|
(65) а как сделать так чтобы если находила идентичный ШК все равно добавляла к другой номенклатуре?
|
|||
67
EKO LX
03.10.12
✎
13:44
|
(63) проверил без
ИначеЕсли ЗаписьВРегистрСвед.Выбран() Тогда не добавляет |
|||
68
EKO LX
03.10.12
✎
13:47
|
минутку, разве ЗаписьШК = Ложь; не оно?
Пока ВыборкаРегСведШК.Следующий() Цикл Если ВыборкаРегСведШК.Штрихкод = ШтрихКод Тогда ЗаписьШК = Ложь; КонецЕсли; КонецЦикла; |
|||
69
hhhh
03.10.12
✎
13:49
|
(68) ну она у вас Ложь. Это правда. Но дальше по программе вы нигде к ней не обращаетесь. Вашей программе в дальнейшем глубоко наплевать ложь там или не Ложь.
|
|||
70
EKO LX
03.10.12
✎
13:55
|
(68) ладно к черту проверка...а почему не записывает существующие?
|
|||
71
EKO LX
03.10.12
✎
13:55
|
(69)
|
|||
72
hhhh
03.10.12
✎
13:57
|
ну еще проверка
Если (ШК = 0) или (ШК > КолКолонок) Тогда похоже там не те ШК и КолКолонок. Вам же говорили использвать отладчик, вы не хотите. |
|||
73
EKO LX
03.10.12
✎
14:46
|
(72) бинго!)) ШК это значение полученная из эксель, только ШК это имя поля ввода, а сама переменная называется ШтрихКод
ШтрихКод = ФайлXLS.Sheets(ТекНомер).Cells(1,ШК).Value; только теперь ругается Штрихкод: хххххххх уже имеет владельца уууууууу". как принудительно записать? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |