|
Как работает код? | ☑ | ||
---|---|---|---|---|
0
Виктрыч
21.06.22
✎
20:34
|
Господа, есть кусок кода, который проверяет на уникальность вносимые в справочник товары. Работает корректно, но никак не пойму, что фактически происходит, как осуществляется проверка. Можете объяснить?
Процедура ПередЗаписью(Отказ) Если ЭтоНовый() Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Товары.Наименование КАК Наименование |ИЗ | Справочник.Товары КАК Товары |ГДЕ | Товары.Наименование = &Наименование"; Запрос.УстановитьПараметр("Наименование", Наименование); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщить ("Такой товар уже существует!"); Отказ = Истина; Прервать; КонецЦикла; КонецЕсли; КонецПроцедуры |
|||
1
Asmody
21.06.22
✎
20:37
|
код работает примерно так: ВЖУХ!
|
|||
2
Asmody
21.06.22
✎
20:39
|
вообще-то, это код проверяет уникальность наименования товара.
что, однако, не помешает пользователям внести сколь угодно много дублей. |
|||
3
Ненавижу 1С
гуру
21.06.22
✎
20:41
|
Код проверяет уникальность только новых данных. Имеющиеся можно переименовать одинаково и проверки не будет в принципе
|
|||
4
2S
21.06.22
✎
20:43
|
Зачем выборка в цикле, а не в если?
Решение в лоб, натыкайте пробелов или Анг символов и не сработает. |
|||
5
Виктрыч
21.06.22
✎
20:45
|
То что код не проверяет уникальность при переименовании уже существующего товара я знаю. Проверил. То что код работает как ВЖУХ - тоже понимаю. Хотелось бы подробностей.
Чего сам понял. Если создается новый товар, запросом выбираются существующие товары по наименованию. А вот где наименование нового товара сравнивается с существующими? |
|||
6
Ненавижу 1С
гуру
21.06.22
✎
20:47
|
(5) примерно здесь:
|ГДЕ | Товары.Наименование = &Наименование"; Запрос.УстановитьПараметр("Наименование", Наименование); Существующие сравниваются с параметром, в который передаётся наименование текущего (нового) объекта |
|||
7
Виктрыч
21.06.22
✎
20:55
|
(6) Спасибо!
|
|||
8
Asmody
21.06.22
✎
21:09
|
что будет, если в наименовании добавят пробел в конце?
что будет, если вместо С напишут C, а вместо А - A? (а они напишут, будь уверен) а если в наименовании есть числа, то 0.5 и 0,5 - это одно и то же или нет? а вы знаете, что существует с десяток символов, "похожих" на "-" ("минус"), а программы из офисного пакета очень любят делать замену символов? |
|||
9
Злопчинский
21.06.22
✎
21:28
|
(8) "что будет, если в наименовании добавят пробел в конце?"
а вот хз... . в клюшках, например, "Наименование" - фиксированной длины, типа СТР(50) но если обратиться к получению "Наименования" объекта, типа Стр.Наименование - то получишь строку без хвостовых пробелов... (а прочие реквизиты строковые пользовательские возвращаются с хвотовыми пробелами) а вот если наименование вытаскиватьв в запросе - то будет возвернуто с хвостовыми пробелами . а как оно работает в снеговике.... хз... |
|||
10
Злопчинский
21.06.22
✎
21:29
|
Стр.Наименование
читать как Спр.Наименование |
|||
11
Злопчинский
21.06.22
✎
21:32
|
(1) не, вот так примерно:
https://otvet.imgsmail.ru/download/0cd607bfde641a8160b309cec00dba8b_i-1035.jpg |
|||
12
Ненавижу 1С
гуру
21.06.22
✎
21:53
|
(8) насчет пробелов - ничего не будет, SQL конечные пробелы усекает при сравнении
|
|||
13
DrZombi
гуру
22.06.22
✎
07:20
|
(5) Что бы понять код, вы должны понимать, что там написано, и для чего.
ЭтоНовый() Описание: Определяет, записан ли элемент в базу данных. Запрос = Новый Запрос; Описание: Предназначен для выполнения запросов к базе данных. Как работать с запросами 1С: https://v8.1c.ru/platforma/mehanizm-zaprosov/ Пока Цикл КонецЦикла; Описание: Оператор цикла Пока предназначен для циклического повторения операторов, находящиеся внутри конструкции Цикл – КонецЦикла. Цикл выполняется, пока логическое выражение равно Истина. Условие выполнения цикла всегда проверяется вначале, перед выполнением цикла. Прервать; Тоже из Цикла Пока (While) Синтаксис: Пока <Логическое выражение> Цикл // Операторы [Прервать;] // Операторы [Продолжить;] // Операторы КонецЦикла; |
|||
14
DrZombi
гуру
22.06.22
✎
07:22
|
(8) Будут новые вопросы на Мисту... :)
Мне вот любопытно, он там кем приходится? :) |
|||
15
Asmody
22.06.22
✎
08:17
|
(12) пробелы - это мизерная часть проблемы (они ещё, кстати, бывают в начале и в середине).
С полгода назад целый мини-проект случился по приведению артикулов в божеский вид. В (8) часть кейсов из него. И 10 разных символов "минус" ещё не самое странное. |
|||
16
DJ Anthon
22.06.22
✎
08:21
|
НайтиПоНаименованию уже отменили?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |