Форум программистов, компьютерный форум, киберфорум
Maks
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  

Контроль уникальности заводского номера - вариант №1

Запись от Maks размещена 23.03.2026 в 07:58. Обновил(-а) Maks Вчера в 22:22
Показов 778 Комментарии 0

Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по которому настроено движение документа, также реализован контроль уникальности на предмет поиска дублей в текущей табличной части документа. Программный код из решения ниже размещен в модуле объекта документа.
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    // Запрос для поиска дублей в регистре сведений
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ШиныСпецтехники.ЗаводскойНомер КАК ЗаводскойНомер,
        |   ШиныСпецтехники.Регистратор.Ссылка КАК РегистраторСсылка
        |ИЗ
        |   РегистрСведений.ШиныСпецтехники КАК ШиныСпецтехники
        |ГДЕ
        |   ШиныСпецтехники.ЗаводскойНомер = &ЗаводскойНомер
        |   И ШиныСпецтехники.Регистратор.Ссылка <> &Ссылка"; 
    // Флаги для отслеживания наличия ошибок
    ЕстьОшибки = Ложь;       // Ошибка: номер найден в ДРУГОМ документе
    ЕстьОшибкиТЧ = Ложь;     // Ошибка: номер повторяется внутри ТЕКУЩЕГО документа (в табличной части)
    // Устанавливаем параметр текущей ссылки документа для исключения его из поиска в БД
    Запрос.УстановитьПараметр("Ссылка", ЭтотОбъект.Ссылка);   
    // Проходим по каждой строке табличной части "Шины"
    Для каждого Строка Из Шины Цикл       
        // 1. Подготовка параметров для запроса к базе данных
        Запрос.УстановитьПараметр("ЗаводскойНомер", Строка.ЗаводскойНомер);       
        // Выполняем запрос: ищем этот номер в регистрах, исключая текущий документ
        РезультатЗапроса = Запрос.Выполнить();       
        // 2. Проверка на дубли внутри текущего документа (в табличной части)
        // Создаем структуру для поиска строк с таким же заводским номером
        ПараметрыПоискаШины = Новый Структура("ЗаводскойНомер", Строка.ЗаводскойНомер);
        // Находим все совпадающие строки в табличной части
        РезультатПоискаШины = Шины.НайтиСтроки(ПараметрыПоискаШины);       
        // Если найдено более 1 строки с таким номером -> дубль внутри документа
        Если РезультатПоискаШины.Количество() > 1 Тогда 
            ЕстьОшибкиТЧ = Истина;
        КонецЕсли;     
        // Если запрос вернул результаты -> номер уже есть в другом документе
        Если НЕ РезультатЗапроса.Пустой() Тогда
            ЕстьОшибки = Истина;
        КонецЕсли;         
    КонецЦикла;   
    // Обработка результата: вывод сообщений пользователю и блокировка записи
    // Если найдены дубли внутри текущего документа
    Если ЕстьОшибкиТЧ Тогда
        // Если дублей несколько, сообщится только о последнем найденном.
        Сообщить("Введенный заводской номер '" + Строка.ЗаводскойНомер + "' уже присутствует в текущем документе.");
        Отказ = Истина; // Запрещаем запись
    КонецЕсли; 
    // Если найдены дубли в других документах базы
    Если ЕстьОшибки Тогда 
        // Получаем выборку из результата последнего выполненного запроса
        Выборка = РезультатЗапроса.Выбрать();
        Выборка.Следующий(); // Переходим к первой найденной записи      
        // Формируем сообщение со ссылкой на документ-нарушитель
        Сообщить("Введенный заводской номер '" + Выборка.ЗаводскойНомер + "' указан в другом документе: " + Выборка.РегистраторСсылка);
        Отказ = Истина; // Запрещаем запись
    КонецЕсли;
КонецПроцедуры
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru