|
Не получается никак при заливки xls файла менять реквизит элемента справочника? | ☑ | ||
---|---|---|---|---|
0
1987denis
27.09.13
✎
22:16
|
Имеется файл в формате xls содержащий список товаров, загружаю его в ТЧ. Далее сохраняю в Справочнике товары.
У элемента Справочника имеется реквизит Наличие(Тип Булево) 1.При загрузке если товар имеется в прайсе и в 1с, то Наличие=Истина 2.Если товар имеется в прайсе но нет в 1с , создается данный элемент, Наличие=Истина 3.Если товара нет в прайсе, но он есть в 1с, то у данного элемента Начисление=Ложь Никак не могу сделать, пункт №3, товар остается в прайсе без изменения(Наличие=Истина) Может подскажете в чем причина? &НаКлиенте Процедура ЗагрузитьВСправочники(Команда) СоздаемТовар(); КонецПроцедуры &НаСервере Процедура СоздаемТовар() Для Каждого Стр Из Объект.СписокПартнеров Цикл Если Справочники.Товар.НайтиПоНаименованию(Стр.ВидТовара) = Справочники.Товар.ПустаяСсылка() Тогда НоваяГруппа = Справочники.Товар.СоздатьГруппу(); НоваяГруппа.Наименование = Стр.ВидТовара; Попытка НоваяГруппа.Записать(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Иначе НоваяГруппа = Справочники.Товар.НайтиПоНаименованию(Стр.ВидТовара) КонецЕсли; Если НЕ Справочники.Товар.НайтиПоНаименованию(Стр.Наименование) = Справочники.Товар.ПустаяСсылка() Тогда ТекЭлемент = Справочники.Товар.НайтиПоНаименованию(Стр.Наименование); ТекОб = ТекЭлемент.ПолучитьОбъект(); ТекОб.Наличие = Ложь; Попытка ТекОб.Записать(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Сообщить("В справочнике номенклатура присутствует элемент " + ТекОб.Ссылка); Иначе ВыборкаЭлемента = Справочники.Товар.СоздатьЭлемент(); ВыборкаЭлемента.Наименование = Стр.Наименование; ВыборкаЭлемента.Цена = Стр.Цена; ВыборкаЭлемента.Склад = Стр.Склад; ВыборкаЭлемента.Наличие = Истина; ВыборкаЭлемента.Родитель = НоваяГруппа.Ссылка; Попытка ВыборкаЭлемента.Записать(); Сообщить("Добавлен элемент"); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
1
ProProg
27.09.13
✎
22:19
|
Ошибок пипец
|
|||
2
extrim-style
27.09.13
✎
22:21
|
(0) Если Справочники.Товар.НайтиПоНаименованию(Стр.ВидТовара).Пустая()
|
|||
3
Euguln
27.09.13
✎
22:21
|
Код конечно - УГ.
А так - создавай массив ссылок номенклатур, которые уже записал, а потом запросом из справочника выбирай оставшиеся |
|||
4
ProProg
27.09.13
✎
22:21
|
Гнать сцаными тряпками такого кодера.
|
|||
5
ProProg
27.09.13
✎
22:28
|
1) у вас что один поставщик всего? что если поставщиков много и у одного есть, у другого нет, у третьего есть. А реквизит один на всех????
2) Доспутим даже поставщик всего 1. Вообще один. Где тут запрос по всей номенклатуре, соединение с таблицей, и если нет в таблице то идет уже другая выборка по товарам которых нет в таблице, и только у них мы ставим Ложь. По примеру и коду - переписать все нафиг. Долго писать, а мне лень поэтому мучайся как хочешь. |
|||
6
1987denis
27.09.13
✎
22:28
|
поставщик 1
|
|||
7
1987denis
27.09.13
✎
22:29
|
Пример показать как надо сделать можете?
|
|||
8
1987denis
27.09.13
✎
22:33
|
Я просто не знаю как обратиться к таблице в которую я выгрузил данные из xls
|
|||
9
Индиго
27.09.13
✎
22:37
|
(0)Не хотел поддерживать негатив.
Но извини, они правы... Работать тебе надо над собой. |
|||
10
ProProg
27.09.13
✎
22:39
|
1) ты два раза обращаешся к поиску тем самым дублируешь запрос.
Достаточно ОДИН раз обратится к поиску через переменную и далее проверять ее и дальше не искать дважны. НайденЭлемент = Справочники.Товар.НайтиПоНаименованию(Стр.Наименование); Если НЕ НайденЭлемент = Справочники.Товар.ПустаяСсылка() Тогда ТекЭлемент = НайденЭлемент.Ссылка; |
|||
11
ProProg
27.09.13
✎
22:40
|
Справочники.Товар.ПустаяСсылка()
Лучше объявить один раз перед началом всего цикла и тоже через переменную. ПустаяСсылка = Справочники.Товар.ПустаяСсылка(); И далее уже обращатся на проверку через ПустаяСсылка |
|||
12
Индиго
27.09.13
✎
22:41
|
(10)Мань..
Да успокойся уже:-) Он надеюсь понял. |
|||
13
ProProg
27.09.13
✎
22:41
|
Менеджер Справочника тоже можнообъявить ожин раз.
СпрНоменклатура = Справочники.Номенклатура; И тоже разместить перед циклом а в цикле обращаться через СпрНоменклатура |
|||
14
extrim-style
27.09.13
✎
22:43
|
(9) не хотел, но поддержал
+(11) НоваяГруппа = Справочники.Товар.НайтиПоНаименованию(Стр.ВидТовара); Если НоваяГруппа.Пустая() Тогда ГруппаТовара = Справочники.Товар.СоздатьГруппу(); ГруппаТовара.Наименование = Стр.ВидТовара; Попытка ГруппаТовара.Записать(); НоваяГруппа = ГруппаТовара.Ссылка(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЕсли; Сообщить(НоваяГруппа); |
|||
15
ProProg
27.09.13
✎
22:43
|
Ну а по поводу пункта три писать запрос. ТЗ во временнуб таблицу. Запрос со справочником номенклатуры с соединением временной таблицы. все элементы которые не соединены в выборке это те которых нет. И уже там ложь.
Но это я могу дать кусок кода - он но к тебе не к месту будет. ты там ничо не поймешь)) Тк как это уже целая готовая программа по прайсам. и там все через регистры сделано. |
|||
16
ProProg
27.09.13
✎
22:43
|
(14) Если НоваяГруппа.Пустая() Тогда - вот это нехороший кусок кода.
|
|||
17
Индиго
27.09.13
✎
22:44
|
(15)Маня, ты прям убиваешь все мои запасы попкорна...
|
|||
18
extrim-style
27.09.13
✎
22:44
|
(16) почему? хоть я поучусь в этой теме, если уж не ТС)
|
|||
19
1987denis
27.09.13
✎
22:46
|
Давайте
|
|||
20
ProProg
27.09.13
✎
22:47
|
(18) обращение через точку к объекту.
эффективнее НоваяГруппа = ПустаяСсылка где ПустаяСсылка перед циклом создаем переменнею см (11) |
|||
21
1987denis
27.09.13
✎
22:49
|
НайденЭлемент = Справочники.Товар.НайтиПоНаименованию(Стр.Наименование);
Если НЕ НайденЭлемент = ПустаяСсылка Тогда ТекЭлемент = НайденЭлемент.Ссылка; ТекЭлемент.Наличие=Ложь; Попытка ТекЭлемент.Записать(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Сообщить("В справочнике номенклатура присутствует элемент " + ТекЭлемент.Ссылка); Иначе НайденЭлемент=Стр.Наименование; ВыборкаЭлемента = Справочники.Товар.СоздатьЭлемент(); ВыборкаЭлемента.Наименование = Стр.Наименование; ВыборкаЭлемента.Цена = Стр.Цена; ВыборкаЭлемента.Склад = Стр.Склад; ВыборкаЭлемента.Наличие = Истина; ВыборкаЭлемента.Родитель = НоваяГруппа.Ссылка; //ВыборкаЭлемента.Записать(); Попытка ВыборкаЭлемента.Записать(); Сообщить("Добавлен элемент"); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЕсли; |
|||
22
1987denis
27.09.13
✎
22:49
|
{Обработка.ЗагрузкаПрайсаПоставщика.Форма.Форма.Форма(100)}: Поле объекта недоступно для записи (Наличие)
ТекЭлемент.Наличие=Ложь; |
|||
23
extrim-style
27.09.13
✎
22:50
|
(18) ааа... ну это ерунда) это только для твоих миллионнопозиционных прайсов актуально)
|
|||
24
extrim-style
27.09.13
✎
22:50
|
(23) к (20)
|
|||
25
1987denis
27.09.13
✎
22:50
|
не понял
|
|||
26
Индиго
27.09.13
✎
22:52
|
гы..Ниче несмотрел.
Увидел ИНАЧЕ Синим и понял- это писдец. |
|||
27
Индиго
27.09.13
✎
22:53
|
(21)Убери это и никому больше не показывай
|
|||
28
extrim-style
27.09.13
✎
22:53
|
(26) хватить троллить. ничё он не смотрел. ты уже полчаса в код втыкаешь, не знаешь с какой стороны к нему подойди, признайся честно)
|
|||
29
1987denis
27.09.13
✎
22:54
|
Индиго
Не все сразу становились такими "Гуру" как вы!, Извините уж... |
|||
30
Индиго
27.09.13
✎
22:56
|
(28)Иди накуй. Я достаточно серьезный спец.
|
|||
31
1987denis
27.09.13
✎
22:56
|
я и не спорю что вы серьезный спец...
|
|||
32
Euguln
27.09.13
✎
22:58
|
(30) воу воу палехче
|
|||
33
extrim-style
27.09.13
✎
22:58
|
(30) он к тебе на "вы" обратился). ты теперь просто обязан ему помочь.
|
|||
34
Индиго
27.09.13
✎
22:59
|
(29)Нет конечно.Только после 12 лет служения
Пртчем не которые думают... |
|||
35
extrim-style
27.09.13
✎
22:59
|
(30) Молоток! Я в тебя верю! Тут главное - начать.
|
|||
36
1987denis
27.09.13
✎
23:00
|
Ну так когда начинали, точно так же задавали "глупые вопросы" и смотрели на очевидные вещи не понимаю, как их сделать...
|
|||
37
Euguln
27.09.13
✎
23:01
|
(36) ничего подобного, он таким родился, и даже акушерам советы давал, когда его вытаскивали )))
|
|||
38
Индиго
27.09.13
✎
23:02
|
(36)Просто заткнуться.
|
|||
39
Индиго
27.09.13
✎
23:02
|
для начала
|
|||
40
extrim-style
27.09.13
✎
23:03
|
какой серьёзный перец)
|
|||
41
Индиго
27.09.13
✎
23:04
|
А вообще если честно..
|
|||
42
Индиго
27.09.13
✎
23:05
|
Надоели вы мне:-))..
|
|||
43
Индиго
27.09.13
✎
23:05
|
Мне спать уже пора.Жена зовет
|
|||
44
Индиго
27.09.13
✎
23:06
|
:-))))
|
|||
45
Индиго
27.09.13
✎
23:06
|
Удачи вам
|
|||
46
Euguln
27.09.13
✎
23:07
|
(45) иди иди, подкаблучник ))
|
|||
47
extrim-style
27.09.13
✎
23:07
|
давай. не бухти больше)
|
|||
48
extrim-style
27.09.13
✎
23:08
|
||||
49
Индиго
27.09.13
✎
23:08
|
(45)для тебя лично
:-)) ТОП.... ТОП... ТоПП Спокойной НЕ Ночи |
|||
50
Euguln
27.09.13
✎
23:10
|
(49) серьезный спец, по словам жены )))
|
|||
51
extrim-style
27.09.13
✎
23:12
|
как называется, когда человек сам с собой разговаривает?
|
|||
52
extrim-style
27.09.13
✎
23:13
|
(51) к (49)
|
|||
53
1c_pro_fun
28.09.13
✎
00:36
|
(21) Народ местный любит поглумиться...
ВМЕСТО: ТекЭлемент = НайденЭлемент.Ссылка; ТекЭлемент.Наличие=Ложь; Попытка ТекЭлемент.Записать(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; НАДО: ТекЭлемент = НайденЭлемент.ПолучитьОбъект(); ТекЭлемент.Наличие=Ложь; ТекЭлемент.Записать(); Чтобы было меньше глупых вопросов нужно прочесть в синтакс-помощнике о назначении возвращаемого функцией ПолучитьОбъект() значения. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |