|
v7: Ищу элемент справочника, не найден создаю новый. Проверьте. | ☑ | ||
---|---|---|---|---|
0
bizon2008
29.08.11
✎
14:05
|
День добрый.
Ищу элемент справочника, не найден создаю новый. Проверьте пожалуйста. Что-то он мне не нравится, но рабочий. Код ниже. СпрТовар = СоздатьОбъект("Справочник.Номенклатура"); СпрЕдиницы = СоздатьОбъект("Справочник.Единицы"); СпрЦены = СоздатьОбъект("Справочник.Цены"); СпрКлассификаторЕдИзм = СоздатьОбъект("Справочник.КлассификаторЕдИзм"); тзТовар.ВыбратьСтроки(); Пока тзТовар.ПолучитьСтроку()=1 Цикл флУспех = 1; //Пока все успешно //Ищем товар по общему коду, если не найден создаем новый. Если СпрТовар.НайтиПоРеквизиту("КодЧр",тзТовар.Код, 0)=1 Тогда СпрТовар.ТекущийЭлемент() Иначе СпрТовар.Новый(); СпрТовар.КодЧр = тзТовар.Код; КонецЕсли; СпрТовар.Наименование = тзТовар.Товар; СпрТовар.ПолнНаименование = тзТовар.Товар; СпрТовар.ВалютаУчета=Константа.ОсновнаяВалюта; Если СпрКлассификаторЕдИзм.НайтиПоНаименованию(тзТовар.Ед)=1 Тогда СпрТовар.БазоваяЕдиница =СпрКлассификаторЕдИзм.ТекущийЭлемент(); Иначе //Если не нашли единицу измерения товар не записывать. Сообщить("Не найдена единица измерения - " + тзТовар.Ед); Успех = 0; КонецЕсли; СпрТовар.СтавкаНДС=Константа.ОсновнаяСтавкаНДС; СпрТовар.ВидТовара=Перечисление.ВидыТоваров.Товар; СпрТовар.ТипТовара=Перечисление.ТипыТоваров.Штучный; СпрТовар.ШтрихКод = тзТовар.ШтрихКод; СпрТовар.ИспользоватьДату('01.01.2011'); Если флУспех = 1 Тогда СпрТовар.Записать(); Сообщить("Товар записан - " + тзТовар.Товар); Иначе Сообщить("Товар не записан - " + тзТовар.Товар); КонецЕсли; |
|||
1
zak555
29.08.11
✎
14:06
|
> КодЧр
это что ? |
|||
2
zak555
29.08.11
✎
14:07
|
ИспользоватьДату
сначала надо |
|||
3
Шапокляк
29.08.11
✎
14:07
|
А если товар по кодЧР найден, то его реквизиты все равно должны перезаписываться?
|
|||
4
izekia
29.08.11
✎
14:07
|
вот это вообще не нужно:
СпрТовар.ТекущийЭлемент() он и так спозиционирован ИспользоватьДату перед началом цикла поставить |
|||
5
chief accountant
29.08.11
✎
14:09
|
Успех = 0;
Это к чему? |
|||
6
bizon2008
29.08.11
✎
14:26
|
(1)Код для связи. Грубо говоря я туда пишу код товара из источника.
(2)Спасибо. Сделал. (3)Да. Хотя тут проблема потенциальная выглядывает СпрТовар.БазоваяЕдиница меняться не должна. Один раз при вводе нового. И все (4)Так нечем же пустое место в условии заполнить. По другому не придумал. Дату перенес. Спасибо. (5)Если не все поля заполнить удалось, то элемент не должен записываться. . |
|||
7
andrewks
29.08.11
✎
14:27
|
(3)(4)+1
и почему в НайтиПоРеквизиту() 3-й параметр = 0. у тебя спр.Номенклатура подчинённый? а где установка владельца? |
|||
8
chief accountant
29.08.11
✎
14:29
|
(6) По коду это не так
|
|||
9
Паланик
29.08.11
✎
14:31
|
Успех = 0;
Роковая строка кода. Вся обработка не взлетит. у тебя там проверяется переменная флУспех, а обнуляешь Успех. |
|||
10
chief accountant
29.08.11
✎
14:31
|
(6) "Так нечем же пустое место в условии заполнить. По другому не придумал"
Или оставь пустое или измени условие |
|||
11
bizon2008
29.08.11
✎
14:33
|
(9)Уже исправил.
|
|||
12
bizon2008
29.08.11
✎
14:35
|
(7)Не подчиненный. А что это так критично. Вроде только критично для подчиненного. Если единица то установка владельца игнорируется.
|
|||
13
Ткачев
29.08.11
✎
14:36
|
(9) Нах он вооще нужен !?
Если СпрКлассификаторЕдИзм.НайтиПоНаименованию(тзТовар.Ед)=1 Тогда СпрТовар.БазоваяЕдиница =СпрКлассификаторЕдИзм.ТекущийЭлемент(); //Сюда перенести концовку Иначе Сообщить("Товар не записан - " + тзТовар.Товар); КонецЕсли; |
|||
14
Ткачев
29.08.11
✎
14:37
|
+(13)И видимо начало...
|
|||
15
Fenikus
29.08.11
✎
14:41
|
(14) можно еще и "Продолжить;" использовать
|
|||
16
bizon2008
29.08.11
✎
14:41
|
(10)Так? Синтаксическую проверку проходит. Но как-то некошерно.
Если СпрТовар.НайтиПоРеквизиту("КодЧр",тзТовар.Код, 0)=1 Тогда Иначе СпрТовар.Новый(); СпрТовар.КодЧр = тзТовар.Код; КонецЕсли |
|||
17
Ткачев
29.08.11
✎
14:42
|
(16)А так ?
Если СпрТовар.НайтиПоРеквизиту("КодЧр",тзТовар.Код, 0)=0 Тогда СпрТовар.Новый(); СпрТовар.КодЧр = тзТовар.Код; КонецЕсли |
|||
18
bizon2008
29.08.11
✎
14:47
|
(17)Так лучше, но как-то логическая структура теряется.
Было если нашли, то стали на текущий, не нашли то новый. Стало если нет то новый. Появляется вопрос а мы стали на текущий элемент. Или это уже паранойя? |
|||
19
Ткачев
29.08.11
✎
14:51
|
(0)Я бы как то так сделал:
СпрТовар = СоздатьОбъект("Справочник.Номенклатура"); СпрЕдиницы = СоздатьОбъект("Справочник.Единицы"); СпрЦены = СоздатьОбъект("Справочник.Цены"); СпрКлассификаторЕдИзм = СоздатьОбъект("Справочник.КлассификаторЕдИзм"); тзТовар.ВыбратьСтроки(); Пока тзТовар.ПолучитьСтроку()=1 Цикл //Ищем товар по общему коду, если не найден создаем новый. Если СпрТовар.НайтиПоРеквизиту("КодЧр",тзТовар.Код, 0)=0 Тогда СпрТовар.Новый(); СпрТовар.КодЧр = тзТовар.Код; КонецЕсли; Если СпрКлассификаторЕдИзм.НайтиПоНаименованию(тзТовар.Ед)=1 Тогда СпрТовар.ИспользоватьДату('01.01.2011'); СпрТовар.Наименование = тзТовар.Товар; СпрТовар.ПолнНаименование = тзТовар.Товар; СпрТовар.ВалютаУчета=Константа.ОсновнаяВалюта; СпрТовар.БазоваяЕдиница =СпрКлассификаторЕдИзм.ТекущийЭлемент(); СпрТовар.СтавкаНДС=Константа.ОсновнаяСтавкаНДС; СпрТовар.ВидТовара=Перечисление.ВидыТоваров.Товар; СпрТовар.ТипТовара=Перечисление.ТипыТоваров.Штучный; СпрТовар.ШтрихКод = тзТовар.ШтрихКод; СпрТовар.Записать(); Сообщить("Товар записан - " + тзТовар.Товар); Иначе Сообщить("Не найдена единица измерения - " + тзТовар.Ед); Сообщить("Товар не записан - " + тзТовар.Товар); Продолжить; КонецЕсли; |
|||
20
Ткачев
29.08.11
✎
15:06
|
Копипастил, да не докопипастил.
тзТовар.ВыбратьСтроки(); Пока тзТовар.ПолучитьСтроку()=1 Цикл Если СпрКлассификаторЕдИзм.НайтиПоНаименованию(тзТовар.Ед)=1 Тогда //Ищем товар по общему коду, если не найден создаем новый. Если СпрТовар.НайтиПоРеквизиту("КодЧр",тзТовар.Код, 0)=0 Тогда СпрТовар.Новый(); СпрТовар.КодЧр = тзТовар.Код; КонецЕсли; ... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |