Что такое процедура как правильно составить процедуру

На занятии будет объяснен алгоритм работы с процедурами на Паскале. Будут разобраны примеры использования процедуры с параметрами и без параметров. Познакомитесь с понятиями: формальные и фактические параметры, параметр по значению и параметр по ссылкее

Содержание:

  • Процедуры в Паскале
    • Процедуры с параметрами. Фактические и формальные параметры
    • Процедуры с параметрами. Параметр по ссылке (передача параметра по ссылке)
    • Передача аргументов по значению и по ссылке
    • Самостоятельная работа

Процедуры в Паскале

Подпрограмма — это фрагмент кода, который имеет свое имя и создается в случае необходимости выполнять этот код несколько (много) раз. Подпрограмма описывается единожды перед началом основной программы (до begin). Компилятор пропускает данный фрагмент кода, пока в основной программе не встретит «вызов» подпрограммы, который выглядит как обращение к ней по имени (возможно, имени с аргументами, указанными в скобках).

Во многих языках программирования подпрограммы существуют только в виде функций. Однако в Паскале подпрограмма — и функция и процедура. Разница между ними станет очевидна в данном уроке.

Итак, рассмотрим синтаксис объявления и описания процедуры в Паскале

var;{область объявления глобальных переменных}
 
procedure название (параметры); {начало процедуры}
var;{объявление локальных переменных}
begin{тело процедуры}
end;{конец процедуры}
 
begin{основная программа}
end.

Пример: Процедура без параметров, которая печатает 60 звездочек, каждую с новой строки

1
2
3
4
5
6
7
8
9
10
11
procedure pr;
var i:integer;
begin
for i:=1 to 60 do begin  {тело подпрограммы}
  write('*');
  writeln;
end;
end; {конец подпрограммы}
begin
  pr; {вызов процедуры}
end.

В данном примере работы с процедурой в Паскале очевидно, что компилятор пропустит блок описания процедуры и дойдет до основной программы (9 строка кода). И только после того, как встретится вызов процедуры (10 строка), компилятор перейдет к ее выполнению, вернувшись к строке 1.

Процедуры с параметрами. Фактические и формальные параметры

Рассмотрим пример необходимости использования процедуры.

Пример:
Построить фигуру
построение треугольников в процедуре

Особенность: Три похожие фигуры.

  • общее: размеры, угол поворота
  • отличия: координаты, цвет
  • Алгоритм решения:

    • выделить одинаковые или похожие действия (три фигуры);
    • найти в них общее (размеры, форма, угол поворота) и отличия (координаты, цвет);
    • отличия записать в виде неизвестных переменных, они будут параметрами процедуры.

    1_1

    Решение на паскале:
    Процедура:
    пример процедуры в Паскале

    Программа:
    1_1

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    uses GraphABC;
    procedure Tr( x, y: integer; color:system.Drawing.Color);
    begin
       MoveTo(x, y);
       LineTo(x, y-60);
       LineTo(x+100, y);
       LineTo(x, y);
       FloodFill(x+20, y-20,color);
    end;
    begin
       SetPenColor(clBlack);
       Tr(100, 100, clBlue);
       Tr(200, 100, clGreen);
       Tr(200, 160, clRed);
    end.

    Рассмотрим синтаксис объявления и описания процедуры с параметрами в Паскале.

    var;{область объявления глобальных переменных}
     
    procedure pr(параметр1, параметр2: integer; параметр3:char); {начало процедуры}
    var;{объявление локальных переменных}
    begin{тело процедуры}
    end;{конец процедуры}
     
    begin{основная программа}
    pr (параметр1, параметр2, параметр3); {вызов процедуры}
    end.

    Задание procedure 1: Написать процедуру рисования N вертикальных линий. N задается параметром процедуры.

    Задание procedure 2: Написать процедуру рисования N окружностей, сдвинутых по горизонтали. N, радиус R и отступ O задаются параметрами процедуры (всего 3 параметра).

    Пример: Написать процедуру, которая печатает 60 раз указанный символ (введенный с клавиатуры), каждый с новой строки

    Параметры процедуры (в некоторых языках они называются аргументами) указываются в скобках после ее имени (в объявлении).

    В данном примере в качестве введенного символа будем использовать параметр процедуры. Формальный параметр процедуры указывается в скобках при ее описании. Обязательно необходимо указать тип формального параметра через двоеточие.

    Фактический параметр — это то значение, которое указывается в скобках при вызове процедуры. Фактическим параметром может быть конкретное значение (литерал: число, символ, строка…) либо переменная, которые компилятор подставит вместо формального параметра. Поэтому тип данных у формального и фактического параметра процедуры должен быть одинаковым.

    Pascal PascalABC.NET
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    var s:char;
    procedure pr(a:char); {a - формальный параметр}
    var i:integer;
    begin
    for i:=1 to 60 do begin
      write(a);
      writeln;
    end;
    end;
    begin
    writeln('введите символ');
    readln(s);
      pr(s); {s - фактический параметр}
    end.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    procedure pr(a:char); {a - формальный параметр}
    begin
    loop 60 do begin
      println(a);
    end;
    end;
    begin
    writeln('введите символ:');
    var s:= readchar;
      pr(s); {s - фактический параметр}
    end.

    В данном примере при вызове процедуры компилятор заменит формальный параметр a фактическим параметром s, т.е. тем символом, который будет введен с клавиатуры. Оба параметра имеют тип данных char.

    • число фактических параметров должно быть равно числу формальных параметров;
    • соответствующие фактические и формальные параметры должны совпадать по порядку следования и по типу данных.

    Задача procedure 3. Написать процедуру, которая складывает два любых числа (два параметра).

    Процедуры с параметрами. Параметр по ссылке
    (передача параметра по ссылке)

    Пример: Программа поиска максимума из двух целых чисел при помощи процедуры

    1. способ:
    2. Pascal PascalABC.NET
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      
      var x,y,m,n:integer;
      {a и b - параметры по значению, max - параметр по ссылке}
      procedure MaxNumber(a,b:integer;var max:integer); 
      begin
      if a>b then
        max:=a
      else
        max:=b;
      end;
      begin
       write('vvedite x,y');
       readln(x,y);
       MaxNumber(x,y,m); {фактические параметры}
       writeln('max=',m)
      end.
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      
      {a и b - параметры по значению, max - параметр по ссылке}
      procedure MaxNumber(a,b:integer;var maximum:integer); 
      begin
        maximum:=max(a,b);
      end;
      begin
       var (x,y):=readInteger2('введите x,y');
       var m:integer;
       MaxNumber(x,y,m); {фактические параметры}
       writeln('max=',m)
      end.

      В примере параметры a и b служат для хранения в них сравниваемых чисел, а параметр по ссылке max — для сохранения в ней максимального из двух чисел. Параметр по значению — параметр, принимаемый по значению, или выходной параметр передает свое значение в основную программу (фактическому параметру m), т.е. возвращает значение. Тогда как параметры по ссылке — параметры, принимаемые по ссылке, (входные параметры), наоборот, принимают значения из основной программы (из фактических параметров x и y). Для параметра по ссылке (max) используются те ячейки памяти, которые отведены под соответствующий параметр при вызове процедуры (ячейка m), именно поэтому такой параметр называется параметром, передаваемым по ссылке.

      Таким образом, сформулируем понятия:

      Если в качестве формального параметра указана обычная переменная с указанием ее типа, то такой параметр есть параметр, передаваемый по значению, или входной параметр (a и b в примере). Тип данных формального параметра-значения должен соответствовать типу данных его фактического параметра (a и b должны попарно соответствовать типу данных x и y).

      Если перед именем формального параметра в объявлении процедуры стоит служебное слово var, то такой параметр называется параметром, передаваемым по ссылке, или выходным параметром (max в примере). Для него используются те ячейки памяти, которые отведены под соответствующий параметр при вызове процедуры (m). А передача такого параметра называется передачей по ссылке (ссылка на ту же ячейку в памяти). Фактический параметр, соответствующий параметру-переменной, может быть только переменной (не константой, не литералом и не выражением).

    3. способ:
    4. Использование параметров-переменных позволяет тратить меньше памяти

      Pascal PascalABC.NET
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      
      var x,y:integer;
      {b - параметр по ссылке или выходной параметр}
      procedure exchange(a: integer;var b:integer); 
      var c:integer;
      begin
      if a>b then begin 
        c:=a;
        a:=b;
        b:=c; {второй параметр процедуры - b - всегда будет максимальным}
      end;
      end;
      begin
       writeln('введите два числа');
       readln(x,y);
       exchange (x,y);
       writeln('max=',y) 
      end.
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      
      {b - параметр по сслыке или выходной параметр}
      procedure exchange(a: integer;var b:integer); 
      begin
        b:=max(a,b);
      end;
      begin
       var (x,y):=readInteger2('введите x,y');
       var m:integer;
       exchange (x,y);
       writeln('max=',y) 
      end.

      Используя данный способ решения задачи, мы обошлись без третьего параметра. Для этого в процедуре мы использовали еще одну локальную переменную c. Процедура меняет значения переменных a и b таким образом, чтобы b всегда была максимальной. Поэтому в 15 строке программы в качестве максимальной выводится второй параметр (y), соответствующий формальному параметру b.

    Задача procedure 4.

    1. Необходимо определить наибольший общий делитель двух введенных чисел, используя цикл.
    2. Необходимо определить наибольший общий делитель двух введенных чисел, используя процедуру (два параметра по значению, один параметр по ссылке).

    Поиск наибольшего общего делителя на паскале
    Словесный алгоритм:

    • Вводятся a и b (например, 18 и 24)
    • В цикле повторяем действия:
    • Если а < b, то меняем переменные местами (1 шаг: a=24, b=18; 2 шаг: a=18, b=6)
    • Переменной a присваиваем остаток от деления a на b (1 шаг: a=6, b=18; 2 шаг: a=0, b=6)
    • Когда остаток равен 0, выводится результат (значения переменной b) (b=6)

    Алгоритм решения поиска НОД:

    числа a  и  b  остаток  результат
    1 a=18, b=24
    24>18
    если b>a → swap(a,b)
    a=24, b=18
    24/18  = 1(6) a=6, b=18
    2 a=6, b=18
    18>6
    если b>a → swap(a,b)
    a=18, b=6
    18/6 =3(0) a=0, b=6
    6
    128  и  56
    1 a=128,b=56
    a>b
    нет
    a=128,b=56
    128/56=2(16) a=16,b=56
    2 a=16,b=56
    b>a
    если b>a → swap(a,b)
    a=56, b=16
    56/16=3(8) a=8,b=16
    3 a=8,b=16
    b>a
    если b>a → swap(a,b)
    a=16,b=8
    16/8=2(0) a=0, b=8
    8

    Задача procedure 5. Используя процедуры, построить фигуру:

    1_1

    Задача procedure 6. Даны 3 различных массива целых чисел (размер каждого 15 элементов). В каждом массиве найти сумму элементов и среднее арифметическое значение.
    Для формирования элементов массива и подсчета суммы и среднего арифметического использовать одну процедуру (среднее арифметическое и сумму оформить как параметры-переменные).

    В задачах на Паскале часто встречается необходимость заполнить массив данными и затем вывести значения на экран. Почему бы не автоматизировать данную задачу заполнения и вывода массива — т.е. оформить при помощи процедур, а в дальнейшем использовать данные процедуры при надобности.

    Пример: Создать процедуру для вывода десяти элементов массива (два параметра: количество элементов, массив)

    Показать решение:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    const
        n = 10;
    var
        i:integer;
        a, b: array[1..n] of integer;
    procedure arr_out (k:integer; arr: array[1..n] of integer);
        var i: byte;
        begin
            write ('вывод массива: ');
            for i := 1 to k do
                write (arr[i]:4);
            writeln;
        end;
    begin
         for i:=1 to n do
             a[i]:=random(10);
         arr_out (n, a);
    end.

    Пояснение:
    Тело основной программы:
    — формирование элементов массива (с функцией random).
    — вызов процедуры с двумя параметрами: количество элементов, массив.
    Тело процедуры:
    — вывод элементов массива с использованием параметров

    Продолжим нашу задачу:

    Пример: Создать процедуру для заполнения массива с использованием функции random

    Показать решение:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    const
        n = 10;
    var
        a, b: array[1..n] of integer;
    procedure arr_rand (k:integer; var arr: array[1..n] of integer);
        var i: byte;
        begin
            write ('Заполнение массива случайными числами ');
            randomize;
            for i := 1 to k do
                arr[i]:=random(100);
        end;
    begin
         arr_rand (n, a);
    end.

    Задача procedure 7. Объедините обе решенные задачи (для заполнения и вывода массива).

    Задача procedure 8. Добавьте в задачу процедуру для заполнения значений массива пользователем (ввод значений с клавиатуры). Оформите вывод двух разных массивов: один — со значениями, сформированными случайным образом, другой — со значениями, введенными пользователем.

    Задача procedure 9. Составить программу с процедурой для вычисления степени числа (входные параметры: число и степень). Для вывода результата использовать параметр по ссылке.

    Задача procedure 10. Составить программу на Паскале с процедурой для вычисления факториала числа.   (0!=1, 1!=1, 2!=2,  3!=6 …)

    Передача аргументов по значению и по ссылке

      Рассмотрим более подробно два этих понятия:

    • Передача по значению: Значение фактического параметра копируется в соответствующий формальный параметр. Изменение формального параметра не ведет к изменению фактического параметра
    • 1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      
      procedure p(a: integer);
      begin
        a := 666; // изменяется только формальный параметр!
      end;
       
      begin
        var x := 555;
        p(x);
        Print(x); // 555
      end.
    • Передача по ссылке: Оба параметра и формальный и фактический ссылаются на одно и то же расположение в памяти, поэтому все изменения в теле процедуры отражаются и на фактическом параметре.
    • Изменение формального параметра изменяет и фактический параметр тоже:
    • 1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      
      procedure p(var a: integer);
      begin
        a := 666; 
      end;
       
      begin
        var x := 555;
        p(x);
        Print(x); // 666 – фактический параметр изменился тоже!
      end.

    Короткая запись

    Если тело процедуры состоит только из одного оператора, PascalABC.NET позволяет использовать при описании сокращенный синтаксис, без ключевых слов begin и end:

    1
    2
    3
    4
    5
    6
    
    ##
    procedure SqrtX(x: real) := print(sqrt(x));
    // основная программа
    begin
      SqrtX(9); //3
    end;

    Самостоятельная работа

    Общее задание 1: Написать процедуру рисования N прямоугольников сдвинутых по горизонтали. N, координаты точек x1, y1, x2, y2 и отступ O задаются параметрами процедуры (всего 6 параметров).

    Общее задание 2: Описать процедуру Mean(X, Y, AMean, GMean), вычисляющую:

    • среднее арифметическое AMean = (X+Y)/2
    • и среднее геометрическое GMean = √X*Y двух положительных вещественных чисел X и Y.

    X и Y — входные параметры, AMean и GMean — выходные параметры вещественного типа.
    В основной программе: Для заданных A, B, C, D найти среднее арифметическое и среднее геометрическое для пар (A, B), (A, C), (A, D), используя созданную процедуру.

    1 вариант: для 5 одномерных массивов определять произведение элементов каждого массива, используя процедуру с двумя параметрами — число элементов массива и параметр по ссылке — для вывода произведения.

    2 вариант: для 5 одномерных массивов определять минимальный элемент каждого массива, используя процедуру с двумя параметрами — число элементов массива и параметр по ссылке — для вывода минимального элемента.

    * сложное С помощью процедуры формировать случайным образом одномерные массивы из 10 элементов (значения от -20 до +20). Вызывать процедуру до тех пор, пока среди значений не появится ноль.

    процедура

    Что такое процедура:

    Процедура – это способ выполнения чего-либо, то есть процесс выполнения определенной вещи. Этот термин также может использоваться для обозначения того, как следует действовать в конкретной ситуации .

    Концепция процедуры может применяться в различных областях, которые требуют выполнения заказа для правильного выполнения процесса.

    Например, в медицине хирургическая процедура состоит из способа выполнения операции, для которого все участники (врачи, медсестры и сам пациент) должны следовать определенным правилам для правильного функционирования этого процесса.

    Согласно закону, юридические процедуры – это все методы, установленные законом, для рассмотрения судебных исков.

    Процедура синонимов

    • Режим действия;
    • ОБРАБОТКА;
    • путь;
    • поведения;
    • операции;
    • действие;
    • поведение;
    • путь;
    • Схема;
    • тактики;
    • стратегия;
    • методология;
    • Стратагема.

    Узнайте больше о значении процесса.

    Стандартная операционная процедура

    Исходя из английской стандартной операционной процедуры (POP), стандартная рабочая процедура (POP) представляет собой форму выполнения работы, часто используемую компаниями для регулирования того, как задачи выполняются разными сотрудниками.

    Стандартная рабочая процедура такая же, как и рабочие инструкции, список, который содержит все основные правила и механизмы для правильного выполнения различных операций, стандартизированным образом и с правильными результатами.

    Сводная процедура и обычная процедура

    Оба были отдельными процедурами, которые принадлежали Гражданскому процессу. Сводная процедура состояла из «ускорения» процесса, либо потому, что его стоимость очень высока, либо потому, что он не очень сложен.

    Обычный процесс является распространенным и применяется ко всем причинам, за исключением случаев, предусмотренных Гражданским процессуальным кодексом.

    Тем не менее, с помощью нового Гражданского процессуального кодекса, упрощенная процедура и обычная процедура были исключены, как в рамках общей процедуры (см. Статью 318 Нового УПК).

    Смотрите также: Значение гражданского права.

    §24. Процедуры.

    Информатика. Учебник для 9 класса (по учебнику К. Ю. Полякова, Е.А. Еремина, базовый уровень)


    Что такое подпрограмма?

    Ключевые слова:
    • процедура
    • параметр
    • локальная переменная
    • рекурсивная процедура
    

    Когда мы в 7 классе работали с исполнителем Робот, мы уже использовали вспомогательные алгоритмы (подпрограммы, процедуры). Каждая процедура решала одну подзадачу, из них строилась программа для решения основной задачи.

    Подпрограммы полезны в первую очередь потому, что готовые алгоритмы можно использовать много раз при решении более сложных задач, не «изобретая велосипед». Из подпрограмм составляются библиотеки, некоторые из них входят в состав языков программирования. Мы просто используем их, не задумываясь о том, как они работают. Это экономит время программистов, освобождая их от повторного выполнения работы, которая уже была кем-то сделана раньше.

    Подпрограммы бывают двух типов — процедуры и функции. Подпрограммы — процедуры выполняют какие-то действия. Например, writeln в языке Паскаль — это стандартная подпрограмма — процедура, которая выводит данные на экран. Подпрограммы — функции возвращают результат (число, строку). Подпрограмма sqrt, вычисляющая квадратный корень числа, — это функция.

    В этом параграфе мы научимся писать свои подпрограммы — процедуры, а в следующем займёмся функциями.

    Определите тип подпрограммы (процедура или функция), которая:

    а) рисует окружность на экране;
    б) определяет площадь круга;
    в) вычисляет значение синуса угла;
    г) изменяет режим работы программы;
    д) возводит число х в степень у;
    е) включает двигатель автомобиля;
    ж) проверяет оставшееся количество бензина в баке;
    з) измеряет высоту полёта самолёта.

    Простая процедура

    Предположим, что в нескольких местах программы требуется выводить на экран строку из 10 знаков ‘ -‘ (например, для того чтобы отделить два блока результатов друг от друга). Это можно сделать, например, так:

    вывод ‘—————‘, нс               writeln (‘—————‘);

    Конечно, можно вставить этот оператор вывода везде, где нужно вывести такую строку. Но тут есть две сложности. Во-первых, строка из минусов хранится в памяти много раз. Во-вторых, если мы задумаем как-то изменить эту строку (например, заменить знак ‘-‘ на ‘=’), нужно будет искать эти операторы вывода по всей программе.

    Для таких случаев в языках программирования предусмотрены процедуры — вспомогательные алгоритмы, которые выполняют некоторые действия:

    Процедуры

    Многоточием в текстах программ будем обозначать некоторые операторы.

    В алгоритмическом языке процедура оформляется точно так же, как и основной алгоритм, но размещается после основной программы.

    В языке Паскаль процедура начинается с ключевого слова procedure, тело процедуры начинается с begin и заканчивается ключевым словом end с точкой с запятой. Процедура расположена выше основной программы, до момента её первого использования.

    Фактически мы ввели в язык программирования новую команду printLine, которая была расшифрована прямо в тексте программы. Для того чтобы процедура заработала, в основной программе (или в другой процедуре) необходимо её вызвать по имени.

    Что произойдёт, если вызвать процедуру, но не включить её текст в программу? Проверьте этот вариант с помощью компьютера.

    Что произойдёт, если включить текст процедуры в программу, но не вызывать её? Проверьте этот вариант с помощью компьютера.

    Использование процедур сокращает код, если какие-то операции выполняются несколько раз в разных местах программы. Когда процедура написана и тщательно протестирована, можно передать её другим программистам для использования в этом же или другом проекте.

    Большую программу всегда разбивают на несколько частей, оформляя в виде процедур отдельные этапы сложного алгоритма. Такой подход делает всю программу более понятной и позволяет разделить работу между программистами.

    Процедура с параметром

    Теперь представьте себе, что нужно выводить строки из знаков «минус» разной длины (5, 10 и др). Конечно, можно сделать несколько процедур, например:

    Процедуры

    Но так делать не нужно. Дело в том, что обе процедуры выводят цепочки знаков «минус» (т. е. выполняют одни и те же действия!), только разной длины. Поэтому хочется использовать всего одну процедуру, передавая ей нужную длину цепочки.

    Заметим, что процедуру printLinelO можно переписать с помощью цикла:

    Процедуры

    Эта процедура делает то же самое, что и первый вариант, — выводит строку из 10 минусов и переходит на новую строку.

    Видим, что процедура стала длиннее и усложнилась, появился цикл. Внутри процедуры объявлена переменная i. Эта переменная принадлежит процедуре, она называется локальной. Другие процедуры и основная программа не могут обращаться к «чужой» локальной переменной.

    Где вы уже встречались со словом «локальный» в курсе информатики? Вспомните, от какого иностранного слова оно произошло.

    Локальная переменная — это переменная, объявленная внутри подпрограммы. Другие подпрограммы и основная программа не могут к ней обращаться.

    Локальная переменная существует только тогда, когда работает процедура. Как только работа процедуры закончена, все локальные переменные удаляются из памяти.

    Чем будет отличаться процедура, рисующая 5 знаков «минус», от последнего варианта процедуры printLine10?

    Если мы хотим, чтобы число повторений цикла можно было менять, в процедуре вместо числа нужно использовать переменную. И значение этой переменной нужно как-то передать процедуре. Оформляется это так:

    Процедуры

    Величина n называется параметром процедуры. В заголовке процедуры добавились круглые скобки, где записано имя параметра и его тип.

    Параметр — это величина, от которой зависит работа процедуры. Параметр имеет имя и тип, с ним можно работать так же, как с локальной переменной.

    Наша процедура printLine имеет один параметр, обозначенный именем n, — длину строки из знаков «минус».

    При вызове такой процедуры в скобках нужно передать фактическое значение, которое должна принять переменная п внутри процедуры. Такое значение называется аргументом (или фактическим параметром).

    Аргумент — это значение параметра, которое передаётся процедуре.

    При вызове процедуры аргумент передаётся в скобках:

    printLine (10);

    Что будет выведено на экран при выполнении фрагмента программы?

    printLine (7);

    printLine (5);

    printLine (3);

    Для тестирования процедуры printLine Иван хочет написать небольшую программу, в которой длина линии вводится с клавиатуры. Где нужно поместить оператор ввода — в процедуре или в основной программе?


    Несколько параметров

    Давайте немного улучшим процедуру: сделаем так, чтобы можно было изменять не только длину строки, но и символы, из которых она строится. Для этого в процедуру нужно добавить ещё один параметр символьного типа (лит в алгоритмическом языке и string в языке Паскаль):

    Процедуры

    В алгоритмическом языке параметры в заголовке процедуры отделяются запятой, а в Паскале — точкой с запятой.

    Запишите в тетради полный текст процедуры printLine.

    Что будет выведено на экран при выполнении фрагмента программы?

    printLine (‘-‘, 10);

    printLine (‘=’, 7);

    printLine (‘о’, 5);

    Процедуры в других языках программирования
    Рекурсия

    Процедура printLine с одним параметром на языках Python и С может быть записана так:

    Процедуры

    В языке Python объявление процедуры начинается ключевым словом def. Тип параметра указывать не нужно, он определяется автоматически. Тело процедуры записывается с отступом вправо, так же, как тело цикла и условного оператора. Вывести п одинаковых символов можно без цикла, построив сразу нужную строку с помощью «умножения» символа ‘-‘ на n.

    Программа на языке С очень похожа на программу на Паскале. Признак процедуры — слово void в заголовке (вместо procedure на Паскале). Тело процедуры заключено в фигурные скобки. Стандартная функция putchar выводит на экран один символ.

    Рекурсия

    Составим процедуру, которая выводит на экран двоичную запись натурального числа. Поскольку число будет меняться, это должна быть процедура с параметром:

    Процедуры

    Вспомним алгоритм перевода числа в двоичную систему: нужно делить число на 2, каждый раз выписывая остаток от деления, пока не получится 0. На алгоритмическом языке алгоритм можно записать так:

    нц пока <> 0

    вывод mod(n,2)

    n:= div(n,2)

    кц

    Проверьте вручную работу этого алгоритма для числа 6. Удалось ли вам получить правильный ответ? Почему?

    Проблема только в том, что первой мы получаем последнюю цифру двоичной записи, поэтому остатки выводятся в обратном порядке (не так, как нужно).

    Есть разные способы решения этой задачи, которые сводятся к тому, чтобы запоминать остатки от деления (например, в символьной строке) и затем, когда результат будет полностью получен, вывести его на экран. Однако можно применить ещё один красивый подход. Идея такова: чтобы вывести двоичную запись числа п, нужно сначала вывести двоичную запись числа div(n,2), а затем — его последнюю двоичную цифру, которая вычисляется как mod(n,2).

    Что же получилось? Прочитайте ещё раз фразу, выделенную курсивом в предыдущем абзаце. Выходит, что для того, чтобы решить задачу для исходного числа, нужно предварительно решить ту же самую задачу для меньшего числа div(n,2).

    Такой алгоритм очень просто программируется:

    Процедуры

    У нас получилось, что процедура printBin вызывает сама себя! Такой приём в программировании называется рекурсией, а процедура — рекурсивной.

    Рекурсивная процедура — это процедура, которая вызывает сама себя.

    Проверьте с помощью отладчика 1) в пошаговом режиме, что произойдёт при вызове этой процедуры.


    1) Для входа в процедуру в пошаговом режиме отладчика используйте клавишу F7.


    Приведённая процедура printBin ошибочна, вернее, она не доделана. Представим себе, что мы передали процедуре число 2. Сначала она вызывает сама себя для значения div(2,2) = 1, затем — для значения div(l,2) = 0, и потом ещё бесконечно много раз для нуля. Такие вызовы никогда не закончатся, и программа зациклится. Чтобы этого не произошло, нужно выйти из процедуры (и закончить эти вложенные вызовы), когда значение параметра станет равно нулю:

    Процедуры

    В алгоритмическом языке для выхода из процедуры используется оператор выход, а в языке Паскаль — оператор exit.

    Убедимся, что процедура остановится при любом заданном натуральном числе. Действительно, при каждом вложенном вызове значение параметра уменьшается (делится нацело на 2). В результате когда-нибудь оно обязательно станет равно нулю, и вложенные вызовы закончатся.

    Сформулируйте алгоритм вывода цепочки одинаковых символов, используя рекурсию. Напишите рекурсивную процедуру. Попробуйте придумать два варианта решения.


    Выводы

    • Процедура — это вспомогательный алгоритм (подпрограмма), решающий самостоятельную задачу, который может использоваться несколько раз.
    • Локальная переменная — это переменная, объявленная внутри подпрограммы. Другие подпрограммы и основная программа не могут к ней обращаться.
    • Параметр — это величина, от которой зависит работа процедуры. Параметр имеет имя, с ним можно работать так же, как с локальной переменной.
    • Аргумент — это значение параметра, которое передаётся процедуре.
    • Рекурсивная процедура — это процедура, которая вызывает сама себя.

    Нарисуйте в тетради интеллект-карту этого параграфа.


    Вопросы и задания

    1. Зачем нужны процедуры?
    2. Достаточно ли включить процедуру в текст программы, чтобы она «сработала»?
    3. Какие возможности появляются, когда в процедуру добавляются параметры?
    4. Как определить, что переменная — локальная?
    5. Выполните по указанию учителя задания в рабочей тетради.

    Подготовьте сообщение

    а) «Рекурсия в природе и искусстве»
    б) «Ханойские башни»


    Оглавление

    §23. Как разрабатывают программы?

    §24. Процедуры.

    §25. Функции.


    О чем эта статья

    Эта статья продолжает цикл статей «Первые шаги в разработке на 1С». В ней будут рассмотрены следующие вопросы:

    • Что такое процедуры и функции и когда их нужно использовать?
    • В чем отличие процедуры от функции?
    • Что такое параметр процедуры (функции) и как его передать?
    • В каком случае передавать параметр по ссылке, а в каком по значению?
    • Как быстро посмотреть список процедур текущего модуля?

    Применимость

    Материал полностью актуален для платформы «1С:Предприятие 8» редакций 8.2. и 8.3.

    Процедуры и функции

    В отдельные процедуры и функции можно выносить общие алгоритмы. Одинаковый программный код из разных модулей (какой-то общий алгоритм) разумно выносить в процедуру или функцию какого-нибудь модуля и обращаться к ней.

    При этом мы избавляемся от дублирования кода, заменив его вызовом процедуры (функции). Если возникает потребность внести изменения в алгоритм, то эти изменения будет достаточно внести в одном месте.

    Кроме того, процедуры и функции повышают читаемость программного кода. Гораздо проще просмотреть, что выполняет данный код, особенно, если вызовы процедур имеют осмысленные названия.

    В итоге облегчается сопровождение прикладного решения.

    Следует отметить, что начинающие разработчики иногда для названия процедуры или функции пытаются использовать зарезервированное слово Выполнить.

    Зарезервированные слова использовать для этих целей нельзя, и, естественно, в этом случае система будет сообщать об ошибке.

    Функция, в отличии от процедуры, может иметь возвращаемое значение. В теле функции для того, чтобы вернуть значение, нужно использовать оператор Возврат и указать то значение, которое будет возвращаться.

    Процедура, в отличии от функции, не может иметь возвращаемое значение. Она просто вызывается и выполняет какие-то действия.

    Если функция не будет иметь ключевого слова Возврат, то она вернет несуществующее значение, т.е. значение типа данных Неопределено. Вместе с тем, ключевое слово Возврат можно использовать и в процедуре, но в этом случае возвращаемое значение не указывается, а само ключевое слово будет означать: прекратить выполнение процедуры.

    Процедура или функция начинает описываться со слова Процедура (Функция). Далее следует Имя процедуры (функции). После имени обязательно указываются круглые скобки. Внутри скобок могут находиться описываемые параметры.

    Данные параметры нужно будет передавать при вызове (при обращении к процедуре). После круглых скобок может стоять слово Экспорт (экспортная функция).

    Потом следует тело процедуры (функции), т.е. последовательность из любого количества операторов.

    В теле могут находиться вызовы других процедур и функций данного модуля или других модулей, которые доступны из текущего программного модуля. Обязательным является наличие заключительного слова КонецПроцедуры (КонецФункции).

    После описания процедуры или функции точку с запятой ставить не нужно. При этом Платформа не считает ошибкой, если точка с запятой стоит после последней процедуры (функции) в модуле.

    Однако со временем эта процедура (функция) в результате действий программиста может стать не последней, и тогда будет выдаваться сообщение об ошибке. Примерный вид процедуры и функции представлен на рисунке.

    Описание процедур и функций

    Параметры, переданные в процедуру (функцию) при ее вызове, могут быть использованы при формировании возвращаемого результата функцией или при выборе используемого алгоритма в процедуре.

    При описании процедуры или функции мы можем указать, что для какого-либо параметра по умолчанию должно использоваться некоторое значение. Для этого справа от параметра через знак равенства указывается требуемое значение.

    В том случае, если при вызове процедуры (функции) значение параметра будет не задано, то оно примет значение, используемое по умолчанию.

    Таким образом, параметры, для которых указано значение по умолчанию, являются необязательными для указания при вызове. В описании процедуры(функции) вначале следуют обязательные параметры, а потом необязательные.

    Кроме этого, существует передача параметров по ссылке и по значению. Внутри процедуры (функции) параметр может анализироваться, а также может изменяться. Все данные хранятся в оперативной памяти компьютера.

    При передаче по ссылке система сообщает, что нужно обратиться к переменной, которая хранится в данной области памяти. В том случае, если значение параметра изменяется, оно меняется именно в указанной области памяти.

    Т.е. при вызове процедуры (функции) мы передавали параметр с одним значением, а после отработки вызываемой процедуры (функции) значение параметра изменилось.

    В случае передачи по значению указывается, что параметр нужно передавать по значению.

    В этом случае вызывается новая область памяти, отличная от предыдущей, и меняется именно она. Исходное значение параметра не меняется.

    По умолчанию все параметры передаются по ссылке. Чтобы передать параметр по значению, в описании процедуры перед параметром нужно поставить ключевое слово Знач.

    Следует сказать, что в некоторые процедуры-обработчики передается такой параметр, как Отказ. Значение данного параметра по умолчанию – Ложь.

    Если в теле процедуры-обработчика установить данному параметру значение Истина, то процедура не отработает.

    Порядок следования процедур и функций в модуле 1С:Предприятие 8 значения не имеет. Из любой процедуры (функции) модуля можно вызывать любую другую процедуру или функцию данного модуля.

    Чтобы обратиться к списку процедур текущего модуля в панели конфигуратора можно нажать на кнопку в виде лупы с надписью «PROC» или использовать горячие клавиши (Ctrl+Alt+P).

    Откроется диалоговое окно, в котором описаны функции F(x) и процедуры P( ). К ним возможно обращаться.

    Список может быть отсортирован в алфавитном порядке (для этого устанавливается галочка «Сортировка»).

    При снятой галочке процедуры и функции в списке размещены в соответствии с их следованием в модуле.

    Список процедур в панели конфигуратора

    Кроме процедур и функций в списке для разных модулей будут доступны разные стандартные обработчики. При выборе обработчика двойным кликом мыши в модуле создается шаблон соответствующей процедуры (обработчика события).

    Если в диалоговом окне «Процедуры и функции» выбрать процедуру и нажать на кнопку Перейти, то мы окажемся в начале выбранной процедуры (функции).

    Справа от кнопки с надписью «PROC» располагается поле. В этом поле указано имя текущей процедуры (функции).

    Первичное знакомство с процедурами и функциями будем считать завершенным. Однако отметим, что платформа содержит множество стандартных процедур и функций, логику которых вам не нужно писать самостоятельно. Достаточно только в случае необходимости вызвать их в нужном месте вашего программного кода. Изучением этих стандартных функций мы и займемся в нашей следующей статье 🙂

    PDF-версия статьи

    Мы ведем группу ВКонтакте – http://vk.com/kursypo1c.

    Если Вы еще не вступили в группу – сделайте это сейчас и в блоке ниже (на этой странице) появятся ссылка на скачивание материалов.

    Ссылка доступна для зарегистрированных пользователей)
    Ссылка доступна для зарегистрированных пользователей)
    Ссылка доступна для зарегистрированных пользователей)

    Если Вы уже участник группы – нужно просто повторно авторизоваться в ВКонтакте, чтобы скрипт Вас узнал. В случае проблем решение стандартное: очистить кеш браузера или подписаться через другой браузер.

    Иванов Г.А.

    ФГБУ “Консультативно-диагностический центр с поликлиникой” Управления делами Президента Российской Федерации, Москва

    Берестовская В.С.

    ГБОУ ВПО “Северо-Западный государственный медицинский университет им. И.И. Мечникова”, Санкт-Петербург

    Эмануэль А.В.

    ФГУП “ВНИИМ им. Д.И. Менделеева”

    Разработка стандартной операционной процедуры

    Авторы:

    Клименкова О.А., Иванов Г.А., Берестовская В.С., Эмануэль А.В.

    Как цитировать:

    Клименкова О.А., Иванов Г.А., Берестовская В.С., Эмануэль А.В. Разработка стандартной операционной процедуры. Лабораторная служба.
    2014;3(2):29‑41.
    Klimenkova OA, Ivanov GA, Berestovskaia VS, Émanuél’ AV. Development of a standard operating procedure. Laboratory Service. 2014;3(2):29‑41. (In Russ.)

    Как известно, в основе процесса общего управления качеством (Total Quality Management – TQM) лабораторных процессов лежит применение стандартов [1]. Под стандартом понимается разработанный для данной конкретной лаборатории регламент, определяющий порядок и правила выполнения совокупности работ. Стандарт также содержит критерии для оценки приемлемости качества оказания медицинской помощи, в частности лабораторных услуг, и позволяет нам ответить на вопросы, как должны быть организованы процессы в лаборатории, с помощью каких показателей мы сможем оценить эффективность и результативность лабораторных процессов. Но вот ответить на вопросы, как правильно мы должны делать, чтобы достичь критериев стандарта, кто это будет делать и зачем, позволяет нам другой документ – стандартная операционная процедура (СОП).

    СОП – это документально оформленная рабочая процедура, в которой описывается подробный алгоритм выполнения конкретного действия или нескольких действий.

    Как правило, в первую очередь СОПы создаются для тех критических аспектов лабораторного процесса, для которых вероятность возникновения ошибок максимальна [2]. Необходимо отметить, что одним из этапов процесса общего управления качеством является оценка качества (Quality Assessment) [1]. И для объективной оценки качества в новой версии стандарта ИСО 15189:2012 «Лаборатории медицинские. Требования по качеству и компетентности» (ISO 15189:2012 «Medical laboratories  – Requirements for quality and competence») появилось новое понятие – «индикаторы качества» [3]. Они представляют собой инструменты, которые позволяют пользователям количественно оценить качество выбранных элементов путем сравнения с определенными критериями. В п.4.14.7 ИСО 15189:2012 говорится о том, что «лаборатория должна установить индикаторы качества, чтобы отслеживать и оценивать качество выполнения в отношении критических аспектов преаналитического, аналитического и постаналитического процессов». И в 2013 г. Международная федерация клинической химии (IFCC) в лице рабочей группы «Work Group Laboratory Errors and Patient Safety» (WG-LEPS) предложила модель индикаторов качества, в которую вошли 34 индикатора качества для оценки преаналитического этапа, 7 -для оценки аналитического и 15 – для оценки постаналитических этапов [4]. В основе предложенных к использованию индикаторов качества заложены следующие принципы:

    1) обеспечение безопасности пациента;

    2) соответствие требованиям международного стандарта ИСО 15189 «Лаборатории медицинские. Частные требования к качеству и компетентности»;

    3) охват всех стадий лабораторного процесса (total testing process).

    В п.4.14.7 ИСО 15189:2012 описан план работы с индикаторами качества. В первую очередь необходимо определить цели применения индикаторов качества, затем определить методологию определения индикаторов качества, провести интерпретацию полученных результатов, разработать пределы критичных величин, обозначить запланированные действия в случае получения неудовлетворительных результатов, определить продолжительность измерения.

    Рассмотрим на конкретном примере внедрение одного из важных индикаторов качества на преаналитическом этапе – расчета процента гемолизированных, липемичных и иктеричных образцов, поступающих в лабораторию. Данные показатели дают объективную оценку качества преаналитического этапа, тем самым являясь мощным инструментом административного воздействия на данный этап, а также позволяют оценить уровень профессионализма процедурных сестер. Так как преаналитический этап лабораторного процесса является критическим в получении достоверных результатов, то необходимо создание СОП. Ниже представлен алгоритм создания СОП «Определение сывороточных индексов на автоматическом анализаторе с6000 фирмы «Roche», биохимическом модуле с501 и с502».

    Но что же такое «сывороточные индексы»? Они представляют собой пересчет параметров оптической плотности, которые дают полуколичественное представление об уровнях иктеричности, гемолиза или липемии, присутствующих в образцах пациентов. Таким образом, качество образца оценивается одновременно с проведением в нем заказанных исследований [5].

    В первую очередь необходимо определить область применения данной СОП, указать ее предназначение и затем перейти непосредственно к описанию алгоритма внедрения индикаторов качества в лабораторную практику.

    Область применения документа является одним из очень важных разделов, и к его написанию важно подойти неформально. В данном разделе необходимо детально указать, какой именно персонал из каких подразделений обязан использовать данную СОП в работе.

    Раздел может быть описан следующим образом.

    Область применения

    Настоящая стандартная операционная процедура (далее – СОП) определяет порядок проведения исследования сывороточных индексов в образцах, поступающих из процедурного кабинета и внешних контрагентов, с которыми заключены договора на оказание медицинских услуг.

    Настоящая СОП предназначена для врачей клинической лабораторной диагностики всех лабораторных подразделений (указать наименование учреждения и ответственного за результативность лабораторных процессов).

    Процедура предназначена для оценки качества поступающих образцов биоматериала и оценки преаналитического качества работы процедурных кабинетов через объективное определение наличия гемолиза, иктеричности и липемии.

    В следующем разделе СОП описывается применяемое оборудование, реагенты, расходные материалы.

    Вполне возможно описать не конкретные марки приборов, а требования, которым оборудование может соответствовать.

    Но для упрощения и лучшего понимания СОП персоналом допускается указание конкретных приборов, как это сделано в нашем случае.

    Применяемое оборудование и реагенты

    Определение сывороточных индексов проводится на автоматическом анализаторе с6000 фирмы «Roche», биохимическом модуле с501 и с502. Для этого используется готовый реагент «SI 2», каталожный номер 04489365 190. Калибратор не требуется.

    Далее детально описывается каждый этап выполнения работы. И здесь есть простой принцип: чем более тщательно и конкретно Вы пишете, тем более эффективно можно использовать процедуру.

    Есть еще один подход, когда степень детализации зависит от квалификации работающего персонала. В этом случае, чем выше квалификация, тем меньше подробностей нужно указывать в СОП и наоборот. Также стоит учитывать и текучесть кадров в той области, где данная СОП применяется. Если персонал меняется часто, то СОП будет использована для обучения новых сотрудников.

    В этом случае полезно повысить уровень детализации информации.

    Пример:

    Прием биоматериала и пробоподготовка для исследований

    – Курьер передает регистраторам лаборатории контейнеры с биоматериалом.

    – Регистраторы достают из контейнеров папки с направлениями, штативы с образцами крови.

    – Все штативы с образцами крови регистраторы передают фельдшеру-лаборанту для центрифугирования.

    – Образцы для биохимических и иммунологических исследований центрифугируются в центрифугах в течение 10 мин при 1500 оборотах.

    – После центрифугирования образцы извлекаются из центрифуги, выставляются в штатив и передаются в кабинет №__ для дальнейшей сортировки.

    – В кабинете №__ фельдшер-лаборант сортирует все образцы крови, поступающие в лабораторию по приборам с помощью лабораторной информационной системы (ЛИС) АКЛ-PSM plus.

    – Образцы, для которых назначены биохимические и/или иммунологические тесты, ставятся на автоматический анализатор с6000 фирмы «Roche», биохимический модуль с501 и с502, где проводится измерение сывороточных индексов.

    Так как назначение данной СОП – работа с сывороточными индексами, то раздел по приему биоматериала прописан очень коротко. По приему биоматериала разрабатывается отдельная СОП, ссылку на которую также можно сделать в данной СОП.

    Приведем пример более детального описания.

    Также укажем, что один из привычных критериев качества СОП – наличие фотографий, принтскринов, схем или иных средств визуализации того, что написано в СОП в виде текста. Описание всегда лучше дополнить визуальными данными.

    Назначение сывороточных индексов в ЛИС

    – В справочнике тестов в ЛИС прописаны три сывороточных индекса: гемолиз, липемия и иктеричность под соответствующими кодами: БХ0486, БХ0488, БХ0487.

    – Каждый сывороточный индекс «привязан» к каждому биохимическому и иммунологическому тесту и при назначении исследований регистратором, например АЛТ, в заказ автоматически добавляется еще три показателя: гемолиз, иктеричность и липемия. Так выглядит скрин-шот ЛИС, в котором отражен заказ на АЛТ и три сывороточных индекса (рис. 1).

    Рисунок 1. Скрин-шот ЛИС. Изображен заказ на АЛТ и три сывороточных индекса.

    Оценка результатов

    – Врач клинической лабораторной диагностики проводит одобрение результатов исследований в ЛИС и, если критическое значение индекса гемолиза выше допустимого для конкретного исследуемого показателя (критические значения индекса гемолиза для каждого биохимического и иммунохимического теста прописаны в инструкциях к реагентам и внесены в ЛИС), то в ЛИС в столбце «Текстовый результат» появляется сообщение «Повторить. Гемолиз в образце выше допустимого значения». Так выглядит скрин-шот ЛИС с ответом, где индекс гемолиза выше допустимого значения (рис. 2).

    Рисунок 2. Скрин-шот ЛИС с ответом.

    – После одобрения врачом результатов исследований, бланк ответа распечатывается регистратором. Так должен выглядеть бланк ответа с комментариями (рис. 3).

    Рисунок 3. Бланк ответа с комментариями.

    Порядок обработки и анализ данных процента гемолизированных образцов в лаборатории

    – 1 раз за 3 предыдущих месяца (1 апреля (отчет за январь, февраль, март), 1 июля (отчет за апрель, май, июнь), 1 октября (за июль, август, сентябрь), 10 января (отчет за октябрь, ноябрь, декабрь)) составить отчет количества исследований индекса гемолиза за 3 мес, выполненных лабораторией для всех контрагентов, включая процедурный кабинет(ы). Для этого в ЛИС в закладке «Отчет» выбирать «Отчет по результатам теста» – «Добавить» – «Выбрать тест» – «Гемолиз» – в столбце «Условие» выбрать значение «>», в столбце результат поставить «0», выставить интервал времени (например, 9 января – 28 февраля). Так выглядят параметры отчета (рис. 4).

    Рисунок 4. Скрин-шот. Параметры отчета.

    – Затем нажать клавишу «Сформировать».

    – Сформировать аналогичный отчет по схеме, указанной выше, только в столбец «Результат» поставить значение 10, а в столбец «Условие» поставить неравенство «≥». Так выглядят параметры отчета.

    Здесь мы не приводим рисунок, но в реальной СОП он должен быть.

    – В качестве дискриминационного значения использовать индекс гемолиза равный 10 и более, так как это минимальная концентрация свободного гемоглобина (10 мг/дл или HI 10), которая влияет на достоверность полученного результата (данные получены из инструкций реагентов) при исследовании теста, в частности КФК-МВ; в качестве дискриминационного значения используется показатель липемии равный 150 и более; в качестве дискриминационного значения используется показатель иктеричности равный 10 и более.

    – Исходя из полученных данных, рассчитать процент гемолизированных образцов (липемичных, иктеричных) для каждого контрагента и процедурного кабинета по формуле: (А/В)·100, где А – общее количество образцов с гемолизом (липемией, иктеричностью) выше соответственно 10, 150 и 10 поступивших в лабораторию за отчетный период; В – общее количество образцов, поступивших в лабораторию от контрагента за отчетный период.

    – Полученные данные внести в таблицу:

    – Сравнить полученные данные за отчетный период с данными, представленными ниже в таблице и определить уровень качества преаналитического этапа для каждого контрагента. Критерии уровня качества были определены на основании собственных данных, полученных за полгода анализа процента гемолизированных образцов, поступивших в лабораторию.

    СОП, связанные с преаналитическими процессами, позволяют лаборатории решать и управленческие задачи. В соответствии с требованиями ИСО 15189:2012 п. 5.4 «Преаналитические процессы», лаборатория отвечает за всю преаналитику, а не только лабораторную ее часть, начиная с назначения исследования, заканчивая получением результатов заказчиком.

    При этом понятно, что такие этапы данного процесса, как контроль правильной подготовки пациента к сдаче биоматериала, взятие биоматериала и т.п. находятся за рамками прямого контроля лаборатории.

    Документы, регламентирующие взаимодействие между разными подразделениями, подписанные главным врачом или иным представителем высшего руководства учреждения, позволяют установить правила, гарантирующие выполнение требований соответствующих стандартов, тем самым снижая риски для безопасности пациентов.

    Применение индикаторов качества преаналитического этапа позволяет выявить проблемы в подразделениях, не относящихся к лаборатории. Описание действий, следующих за выявлением проблемы преаналитического качества и их утверждение высшим руководством, дает лаборатории практический инструмент управления процедурными кабинетами и другими участниками преаналитического процесса. Особенно эффективно данный инструмент может применяться централизованными лабораториями, так как сывороточные индексы позволяют выявлять существенные проблемы у контрагентов (поставщиков биоматериала в централизованную лабораторию). Такую СОП полезно сделать приложением к договору об оказании лабораторных услуг и сделать ее обязательной для применения и у контрагентов (в части, касающейся совместных с лабораторией действий при обнаружении проблем). Часть СОП по данному вопросу описана ниже:

    Принятие решения, если уровень качества преаналитического этапа одного из обслуживаемых контрагентов соответствует минимальному и неприемлемому уровню качества

    – Сообщить о данном несоответствии заместителю главного врача по лабораторной службе или ответственному врачу по качеству.

    – Заместитель главного врача должен организовать выезд старшего лаборанта и/или ответственного по качеству в данное учреждение, а именно в процедурный кабинет, для выяснения причин несоответствий, которые привели к ошибкам на преаналитическом этапе.

    – Исходя из причин, которые привели к возникновению данного несоответствия, разработать корректирующие и предупреждающие действия для повышения качества на преаналитическом этапе.

    В конце СОП полезно привести перечень наиболее часто возникающих несоответствий для данной процедуры и принятые меры для их устранения.

    Пример:

    Выявление несоответствий и устранение их причин

    Подводя итог, дадим ряд рекомендаций, которые помогали нам и нашим коллегам в создании СОП:

    1) Не существуют «правила» создания или оформления СОП. СОП должна отражать специфику конкретной лаборатории. Она должна быть удобна и понятна персоналу, который с ней работает. Поэтому СОП одной лаборатории может не подходить другой. Предположим, в данном регионе учреждение здравоохранения сталкивается с серьезным дефицитом квалифицированных кадров и в лаборатории работает много совсем молодых специалистов. В этом случае СОП должна быть предельно детализирована и снабжена максимально подробными иллюстрациями.

    2) СОП должны создаваться наиболее квалифицированными в выполнении данной работы сотрудниками и находиться в подразделении лаборатории в доступном месте и свободном доступе для тех сотрудников, для которых они были созданы, а не храниться на полке у заведующего лабораторией или ответственного по качеству. В Японии под «стандартом» понимается наилучший способ выполнения работы. СОП – это часть стандарта. И самая большая ошибка, которую совершают при создании СОП, – поручить данную работу одному сотруднику. Лучшей практикой является создание перечня СОП, которые необходимо создать в лаборатории. После чего создать план-график работ по их написанию и распределить задачи между сотрудниками. Наибольшие проблемы встречаются при оформлении СОП. Вот здесь может помочь сотрудник, хорошо владеющей практикой оформления документов. Технические специалисты формулируют суть процедуры, а ее оформление может выполнить другой сотрудник.

    3) Не нужно стараться описать сразу все работы и процессы. Обычно делается иначе. Проводится серия внутренних аудитов, после чего выявляются работы и процессы, где наблюдается наибольшее число сбоев (несоответствий). Анализ причин этих несоответствий показывает, что многие из найденных проблемных зон возникают из-за отсутствия единых правил выполнения работы, т.е. отсутствия стандартизации. Создание СОП как инструмента стандартизации позволяет решить эту проблему. То есть СОП можно создавать последовательно, исходя из постоянной практики проведения внутренних аудитов, выявления проблемных зон (и тут может помочь подход на основе менеджмента рисков) и постепенной стандартизации работ, т.е. написания СОП.

    В приложении мы приводим еще один пример СОП, чтобы показать, как может выглядеть реально разработанная и применяемая на практике процедура.

    Данная СОП связана с описанной выше работой по индикаторам качества и регламентирует процесс приема биоматериала в лабораторию.

    Приложение

    1. Область применения

    Настоящая стандартная операционная процедура (далее – СОП) определяет порядок приема, регистрации биоматериала, поступающего в лабораторию из процедурного кабинета «Консультативно-диагностического центра» и других учреждений, обслуживаемых лабораторией, а также выявление несоответствий и их устранение.

    Настоящая СОП предназначена для фельдшера-лаборанта и оператора лаборатории.

    2. Нормативные ссылки

    2.1. Методические рекомендации «Организация преаналитического этапа при централизации лабораторных исследований крови» [Одобрены на Общероссийской научно-практической конференции «Реальные клинико-диагностические лабораторные услуги: степень соответствия стандартам лабораторной медицины, качество, себестоимость и цена» (Москва, 2-4 октября 2012 г.)]

    2.2. ГОСТ Р 53079.4-2008. «Технологии медицинские лабораторные. Обеспечение качества клинических лабораторных исследований. Часть 4. Правила ведения преаналитического этапа». Введен в действие с 01.01.2010.

    2.3. ИСО 15189:2012 «Лаборатории медицинские. Требования к качеству и компетентности»

    3. Организация процесса транспортировки биоматериала курьером и ответственность курьера

    3.1. Температуру в холодильнике, которая указана на дисплее в салоне машины, курьер фиксирует в журнале «Журнал учета температурного режима в холодильниках машин», а также в данном журнале курьер указывает свои ФИО, регистрационный знак машины и время отправления машины за биоматериалом непосредственно перед поездкой в учреждения. Данный журнал находится в кабинете №111. (Фото температурного датчика и фото формы журнала приведены в приложении №3.)

    3.2. Курьер, прибыв в ЛПУ, идет в регистратуру данного учреждения, где забирает контейнеры с разным биоматериалом. На каждом контейнере указаны название учреждения и тип биоматериала (кровь, моча, кал, предметные стекла с мазками, соскобы). Курьер размещает контейнеры в горизонтальном положении в холодильник машины, как это показано на фотографии (рис. 1).

    Рисунок 1. Контейнеры в горизонтальном положении в холодильнике машины.

    3.3. Курьер отвечает за целостность контейнеров, их сохранность, за обеспечение должного температурного режима в холодильнике машины (от +4 до +8 °С), а также за сохранность биоматериала, доставляемого из учреждений в лабораторию. Во время пути курьер отслеживает температуру в холодильнике машины, которая выводится на дисплей, установленный в салоне машины.

    4. Прием биоматериала в лаборатории

    4.1. Температуру, которая указана на табло в холодильнике машины на момент изъятия контейнеров, курьер отмечает в журнале «Журнал учета температурного режима в холодильниках машин» в графе, соответствующей государственному номеру машины. А также в этом же журнале водитель указывает время прибытия машины с биоматериалом из учреждений.

    4.2. Курьер передает промаркированные контейнеры с образцами крови, мазками и соскобами фельдшеру-лаборанту в кабинет №111.

    4.3. Курьер передает промаркированные контейнеры с мочой и калом фельдшеру-лаборанту в кабинет №222.

    4.4. В кабинете №111 фельдшер-лаборант открывает крышку контейнера и извлекает оттуда пробирки с кровью, предметные стекла с мазками и соскобами, папки с направлениями на исследования.

    4.5. Фельдшер-лаборант сортирует пробирки с кровью отдельно по штативам, согласно типу пробирок (биохимические, гематологические и коагулологические) и названиям учреждений, которые указаны на штативах (рис. 2).

    Рисунок 2. Сортирование пробирок с кровью по штативам.

    4.6. В кабинете №222 фельдшер-лаборант извлекает из контейнера образцы с мочой, калом и направления.

    5. Передача биоматериала и направлений в соответствующие подразделения лаборатории.

    5.1. В кабинете №111 фельдшер-лаборант ставит штативы с пробирками для биохимических, иммунологических, коагулологических исследований в контейнеры с маркировкой «для переноса биоматериала» и относит их в кабинет №333 для центрифугирования.

    5.2. Фельдшер-лаборант звонит в отделы гематологии и ПЦР для того, чтобы фельдшеры-лаборанты из соответствующих отделов забрали биоматериал из кабинета №111.

    5.3. Фельдшер-лаборант передает направления на исследования из кабинета №111операторам в кабинет №444 для регистрации.

    5.4. В кабинете №333 фельдшер-лаборант передает направления операторам, которые регистрируют бланки в том же кабинете.

    6. Регистрация бланков-заказов операторами

    6.1. Операторы в кабинете №444, получив бланки-направления от фельдшера-лаборанта из кабинета №111, регистрируют их в лабораторной информационной системе «АКЛ-Акросс». Порядок регистрации:

    – оператор считывает штрих-код, наклеенный на бланк-направление сканером;

    – затем оператор вводит в ЛИС паспортные данные пациента: ФИО, дату рождения, адрес проживания и другие данные: источник заказа (ОМС, ДМС, наличный расчет, диспансеризация), номер учреждения, отделение, ФИО врача, назначившего исследования, диагноз, код МЭС (медико-экономический стандарт);

    – после этого оператор вносит в ЛИС те показатели, которые назначил лечащий врач, и сохраняет сформированный заказ в ЛИС. Бланк-направление представлен в приложении №4.

    Приложение 1

    Блок-схема процесса

    Приложение 2

    Приложение 3

    Датчик температуры холодильника машины

    Приложение 4

    Бланк-направление

    Приложение 5

    Приложение 6

    Добавить комментарий