|
Как осуществить проверку на наименование товара в 1С8 | ☑ | ||
---|---|---|---|---|
0
pnamik
20.02.15
✎
09:54
|
Добрый день. Подскажите, пожалуйста, как можно осуществить проверку заполнения наименования товара? Удается проверить в целом заполнения ячейки наименование с помощью
Если СокрЛП(Наименование) = "" Тогда Предупреждение("На заполнено наименование!"); Отказ = Истина; Возврат; КонецЕсли; Необходимо, чтобы проверка осуществлялась по другому: Если наименование состоит не меньше трех слов (например, куртка женская EIFEL или ботинки мужские б/тм), то можно записать элемент, а если меньше трех (например, куртка женская, или ботинки) чтобы выдал предупреждение "не правильно заполнено наименование'. Спасибо заранее за подсказки |
|||
1
РеализоВано
20.02.15
✎
09:57
|
ЗначениеЗаполнено()
|
|||
2
polosov
20.02.15
✎
09:57
|
(0) Разбей предложение на слова, посчитай их, несколько Если Тогда Иначе
|
|||
3
shuhard
20.02.15
✎
09:57
|
(0) что-то мешает разбить строку по пробелам и сосчитать число слогов ?
|
|||
4
MSOliver
20.02.15
✎
09:59
|
(3)Три слова?
|
|||
5
polosov
20.02.15
✎
09:59
|
+(2) Задача на уровне школьников, тренирующихся на языке Рапира.
|
|||
6
evorle145
20.02.15
✎
09:59
|
(0) , Практически во всех типовых конфигурациях (обычно в общем модуле "ОбщегоНазначения") есть функция РазложитьСтрокуВМассивПодстрок()
|
|||
7
MSOliver
20.02.15
✎
10:00
|
(0) иногда конфигурации бывают типовые, в очень редких случаях данный механизм в них уже реализован... Эх, вот если бы знать...
|
|||
8
MSOliver
20.02.15
✎
10:01
|
СтрЗаменить(РазбираемаяСтрока," ",Симолы.ПС);
|
|||
9
pnamik
20.02.15
✎
10:01
|
конфигурация самописная, 1С 8.0.18.2
варианты СокрЛП(Наименование) = "" + "" Тогда не подходит |
|||
10
pnamik
20.02.15
✎
10:02
|
(5) если можешь предлагай, пожалуйста, варианты для школьника.
|
|||
11
evorle145
20.02.15
✎
10:02
|
Функция обРазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт
МассивСтрок = Новый Массив(); Если Разделитель = " " Тогда Стр = СокрЛП(Стр); Пока 1=1 Цикл Поз = Найти(Стр,Разделитель); Если Поз=0 Тогда МассивСтрок.Добавить(Стр); Возврат МассивСтрок; КонецЕсли; МассивСтрок.Добавить(Лев(Стр,Поз-1)); Стр = СокрЛ(Сред(Стр,Поз)); КонецЦикла; Иначе ДлинаРазделителя = СтрДлина(Разделитель); Пока 1=1 Цикл Поз = Найти(Стр,Разделитель); Если Поз=0 Тогда МассивСтрок.Добавить(Стр); Возврат МассивСтрок; КонецЕсли; МассивСтрок.Добавить(Лев(Стр,Поз-1)); Стр = Сред(Стр,Поз+ДлинаРазделителя); КонецЦикла; КонецЕсли; КонецФункции // обРазложитьСтрокуВМассивПодстрок |
|||
12
anatoly
20.02.15
✎
10:03
|
(11) это есть в ОбщегоНазначения, если типовая
а потом проверить количество в массиве. профит. |
|||
13
kosts
20.02.15
✎
10:04
|
Удалить лишние пробелы, посчитать оставшееся количество пробелов.
|
|||
14
pnamik
20.02.15
✎
10:05
|
(11) не думаю, что такие сложности там потребуется. кажется одной строкой можно обойтись. Надеюсь (5) подскажет варианты для школьника
|
|||
15
MSOliver
20.02.15
✎
10:06
|
(14) Зачем (5)? См. (8)!
|
|||
16
evorle145
20.02.15
✎
10:10
|
Если обРазложитьСтрокуВМассивПодстрок(Наименование, " ").Количество<3 Тогда
Отказ = истина; КонецЕсли; Чего сложного-то? |
|||
17
evorle145
20.02.15
✎
10:10
|
Если обРазложитьСтрокуВМассивПодстрок(Наименование, " ").Количество()<3 Тогда
Отказ = истина; КонецЕсли; |
|||
18
MSOliver
20.02.15
✎
10:11
|
Отказ = СтрЧислоВхождений(Наименование," ")=>3;
|
|||
19
MSOliver
20.02.15
✎
10:11
|
Отказ = НЕ СтрЧислоВхождений(Наименование," ")=>3;
|
|||
20
MSOliver
20.02.15
✎
10:12
|
(17) в трёх словах, два пробела!)
|
|||
21
anatoly
20.02.15
✎
10:13
|
(17) а вдруг пробелы по краям? или в середине по два-три?
|
|||
22
kosts
20.02.15
✎
10:15
|
(17) Правильно. (19) Не правильно
|
|||
23
pnamik
20.02.15
✎
10:15
|
(16) и (17) выдает ошибку при добавлениии в процедуру Передзаписью
{Справочник.Номенклатура.Форма.ФормаЭлемента(23,7)}: Процедура или функция с указанным именем не определена (обРазложитьСтрокуВМассивПодстрок) Если <<?>>обРазложитьСтрокуВМассивПодстрок(Наименование, " ").Количество<3 Тогда |
|||
24
kosts
20.02.15
✎
10:17
|
(23) Ну так скопируй (11)
|
|||
25
pnamik
20.02.15
✎
10:21
|
скопировал функцию (11), также (16) ставил в процедуру ПередЗасписью (Отказ) при записи элемента выдал ошибку
{Справочник.Номенклатура.Форма.ФормаЭлемента(52)}: Поле объекта не обнаружено (Количество) Если обРазложитьСтрокуВМассивПодстрок(Наименование, " ").Количество<3 Тогда |
|||
26
ИС-2
naïve
20.02.15
✎
10:23
|
обРазложитьСтрокуВМассивПодстрок замени на Общегоназначения.РазложитьСтрокуВМассивПодстрок
|
|||
27
evorle145
20.02.15
✎
10:23
|
(25) , после количество нужны "()", я тебе об этом в (17) написал. Но советую тебе читать ошибки и пытаться вникать в них. Но вместе с тем, я не понимаю, почему тебе лень понять смысл ошибки, а мне не лень тебе это объяснять.
|
|||
28
kosts
20.02.15
✎
10:24
|
Так попробуй
m = обРазложитьСтрокуВМассивПодстрок(Наименование, " "); Если m.Количество<3 Тогда |
|||
29
evorle145
20.02.15
✎
10:24
|
(26) см (9)
|
|||
30
MSOliver
20.02.15
✎
10:25
|
Ваще-то надо как в (14)
|
|||
31
MSOliver
20.02.15
✎
10:26
|
(22) Вы правы
|
|||
32
pnamik
20.02.15
✎
10:28
|
(27) спасибо тебе огромное, похоже, получилось, проверю в разных вариациях сейчас. Ты большой умница
|
|||
33
MSOliver
20.02.15
✎
10:28
|
Отказ = СтрЧислоВхождений(СокрЛП("1 2 3")," ")>2;
|
|||
34
1976vas
20.02.15
✎
10:28
|
(17) Только надо еще и убрать пробелы сначала справа и слева, могут же быть...
|
|||
35
kosts
20.02.15
✎
10:29
|
(30) Ну если так
Найти(СтрЗаменить(СтрЗаменить(СтрЗаменить(с, " ", " "), " ", " "), " ", " ")) > 2 |
|||
36
kosts
20.02.15
✎
10:29
|
(35) Сокр еще забыл
|
|||
37
MSOliver
20.02.15
✎
10:30
|
Я думаю Победа!
|
|||
38
Maniac
20.02.15
✎
10:31
|
Вот дауны то пошли....
|
|||
39
pnamik
20.02.15
✎
10:31
|
спешил, выдает предупреждение о том, что не правильно заполнена наименование, но записывает товар, а нужно, чтобы пока не правилам не давал записывать
|
|||
40
polosov
20.02.15
✎
10:31
|
Функция РазбитьСтрокуНаСлова(СтрокаДляРазбития)
МассивСлов = Новый Массив; СтрокаСлов = СтрЗаменить(СтрокаДляРазбития," ",Символы.ПС+Символы.ВК); Для Индекс = 1 ПО СтрЧислоСтрок(СтрокаСлов) Цикл МассивСлов.Добавить(СтрПолучитьСтроку, Индекс); КонецЦикла; Возврат МассивСлов; КонецФункции |
|||
41
Maniac
20.02.15
✎
10:31
|
Правильно не Количество а Количество()
|
|||
42
kosts
20.02.15
✎
10:32
|
(41) Да кто ж его запомнит как правильно. Давеча в C# вроде свойством видел
|
|||
43
polosov
20.02.15
✎
10:32
|
+(40) Вот правильно
Функция РазбитьСтрокуНаСлова(СтрокаДляРазбития) МассивСлов = Новый Массив; СтрокаСлов = СтрЗаменить(СтрокаДляРазбития," ",Символы.ПС+Символы.ВК); Для Индекс = 1 ПО СтрЧислоСтрок(СтрокаСлов) Цикл МассивСлов.Добавить(СокрЛП(СтрПолучитьСтроку(СтрокаСлов)), Индекс); КонецЦикла; Возврат МассивСлов; КонецФункции |
|||
44
Maniac
20.02.15
✎
10:33
|
Вообще правильный ответ был еще в 11. Но почему то чувак ее переименовал - это полностью типовая стандартнавя процедура.
От 1С. Вызываем. И делаем проверку на Количество() Все нах. |
|||
45
Maniac
20.02.15
✎
10:33
|
(42) в 1С все методы со скобками.
|
|||
46
MSOliver
20.02.15
✎
10:34
|
(35) Ожидается символ ,
|
|||
47
pnamik
20.02.15
✎
10:34
|
(43) а в процедуру ПередЗаписью что добавить?
|
|||
48
kosts
20.02.15
✎
10:34
|
(45) В языках которые я знаю, аналогично
|
|||
49
MSOliver
20.02.15
✎
10:34
|
(44) Читаем внимательно, конфа самописка
|
|||
50
polosov
20.02.15
✎
10:36
|
(47) Если РазбитьСтрокуНаСлова(Наименование).Количество < 3 Тогда
Отказ = Истина; КонецЕсли; |
|||
51
MSOliver
20.02.15
✎
10:36
|
Кароче жесть, тут на час работы!
|
|||
52
banco
20.02.15
✎
10:37
|
переходите на 8.3.6 ))
Если СтрРазделить(Наименование, " ").Количество()<3 Тогда Отказ = Истина; КонецЕсли; |
|||
53
Maniac
20.02.15
✎
10:39
|
Пипец. Уволил бы всех по списку.
|
|||
54
pnamik
20.02.15
✎
10:41
|
(11) срабатывает в части предупреждение, после нажатия ок (согласия с предупреждением), записывает элемент, а нужно, чтобы не записывал, пока не по правилам наименование
спасибо (11)помогло пока. Возврат забыл. Спасибо за терпение |
|||
55
polosov
20.02.15
✎
10:41
|
(53) Да ктоб к тебе пошел...
Нудятину терпеть блин. |
|||
56
pnamik
20.02.15
✎
10:42
|
сейчас проверю (43) и (50). очень добры и терпеливы
|
|||
57
pnamik
20.02.15
✎
10:50
|
(50) выдал ошибку
добавил , после запятой что не понимаю {Справочник.Номенклатура.Форма.ФормаЭлемента(49,64)}: Ожидается символ ',' МассивСлов.Добавить(СокрЛП(СтрПолучитьСтроку(СтрокаСлов<<?>>)), Индекс); {Справочник.Номенклатура.Форма.ФормаЭлемента(49,65)}: Неопознанный оператор МассивСлов.Добавить(СокрЛП(СтрПолучитьСтроку(СтрокаСлов)<<?>>), Индекс); {Справочник.Номенклатура.Форма.ФормаЭлемента(50,5)}: Ожидается ключевое слово 'КонецФункции' ('EndFunction') <<?>>КонецЦикла; |
|||
58
polosov
20.02.15
✎
10:56
|
МассивСлов.Добавить(СокрЛП(СтрПолучитьСтроку(СтрокаСлов,Индекс));
|
|||
59
polosov
20.02.15
✎
11:00
|
(57) Возможно еще потребуется проверка на пустую строку, если были несколько пробелов подряд
|
|||
60
pnamik
20.02.15
✎
11:02
|
МассивСлов.Добавить(СокрЛП(СтрПолучитьСтроку(СтрокаСлов,Индекс)); добавил в конце еще одно )
и еще и в (50) после количество добавил (), сработало. Молодцы. проверю сейчас с пробелами |
|||
61
pnamik
20.02.15
✎
11:05
|
на пустую строку проверка уже есть в (0). не пускает с пробелами.
(58) и (11) спасибо и здоровья Вам. также всем тем, кто участвовал в обсужден ии |
|||
62
evorle145
20.02.15
✎
11:06
|
(61) главное чтоб на пользу пошло)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |