Новости

Заказ решебника

Закажи решебник и скоро он будет на сайте

  • Положительные стороны участия в школьных олимпиадах
    Облегчение поступления в университет. Вы можете задать своему ребенку конечную цель всего учебного процесса, тем самым убедив его в необходимости хорошей учебы. Часто родители говорят своим детям, что если они будут плохо учиться, то не смогут приобрести хорошую профессию в будущем, и пойдут в дворники.
  • Особенности питания школьника
    Питание в школе должно быть хорошо организованным. Школьник должен быть обеспечен в столовой обедом и горячим завтраком. Интервал между первым и вторым приемом пищи не должен превышать четыре часа. Наиболее оптимальным вариантом должен быть завтрак ребенка дома, в школе же он съедает второй завтрак
  • Детская агрессия в школе и сложности в процессе обучения
    Между детской агрессией и трудностями в процессе обучения установлена определенная взаимосвязь. Каждый школьник хочет иметь в школе много друзей, иметь хорошую успеваемость и хорошие оценки. Когда это у ребенка не получается, он делает агрессивные поступки. Каждое поведение на что-то нацелено, имеет смысловую
  • Советы психологов родителям
    В любых олимпиадах и всевозможных конкурсах ребенок, прежде всего, самовыражается и самореализовывается. Родители обязательно должны поддерживать своего ребенка, если он увлечен интеллектуальными соревнованиями. Ребенку важно осознавать себя частью общества интеллектуалов, в котором царят сопернические настроения, и ребенок сравнивает свои достигнутые
  • Ребенок отказывается от приема пищи в столовой школы
    Разборчивому ребенку школьная еда может прийтись не по вкусу. Зачастую, это самая распространенная причина отказа школьника от еды. Все происходит от того, что меню в школе не учитывает вкусовые потребности каждого отдельного ребенка. В школе никто не будет исключать какой-либо продукт из питания отдельного ребенка дабы
  • Как родители относятся к школе
    Для того чтобы понять как родители относятся к школе, то важно для начала охарактеризовать современных родителей, возрастная категория которых весьма разнообразна. Не смотря на это большую часть из них составляют родители, которые относятся к поколению девяностых годов, которые отличаются тяжелым временем для всего населения.
  • Школьная форма
    Первые школьные сборы навсегда остаются в памяти каждого из нас. Родители начинают закупать всю необходимую канцелярию, начиная с августа. Главным школьным атрибутом является форма школьника. Наряд должен быть тщательно подобран, чтобы первоклассник чувствовал себя уверенно. Введение школьной формы обосновывается многими причинами.

Рефераты

Уважаемые школьники и студенты! 

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

Вы согласны передать свой реферат (диплом, курсовую работу и т.п.), а также дальнейшие права на хранение,  и распространение данного документа администрации сервера "mcvouo.ru"?

Спасибо за ваш вклад в коллекцию!

Всего 19436 рефератов.

Найти

АРМ для работы со складом - (реферат)

Дата добавления: март 2006г.

    Автоматическое рабочее место для работы со складом
    ВВедение.

Данная программа автоматизированного рабочего места разработана для работников складских помещений, естественно если у них имеется компьютер классом не ниже Pentium. Сейчас на рынке программного обеспечения появляются все больше и больше различных программ для работы не только со складом, но и различные другие программные средства автоматизированного рабочего места, но стоимость их лицензионных копий доходит порой до нескольких десятков тысяч, а моя программа может быть конечно маленько еще “сыровата”, но в процессе работы с нею её можно “довести ее до ума” и все это лишь за пятерку по программированию цена не велика за произведение программного искусства. Каковы её плюсы: ну это естественно простота и понятность (для русского человека) интерфейса программы, что не требует дополнительного обучения или прохождения специальных курсов, особенно для женщин, работающих на складах и не посвященных в азы компьютеров и программного обеспечения; не требовательность к системным ресурсам машины; легкость ввода и отслеживания; простота резервирования базы данных (всего 1 файл), что не маловажно для такой программы.

При написании и разработке курсового проекта я научился работать с Borland Pascal, Microsoft Windows 95OSR2, Microsoft Word 97 SR-2 которые использовались для работы над курсовым проектом, научился использовать справку и другие функции Borland Pascal при этом даже разобрался с английским языком и использованием электронных словарей переводчиков таких как Promt, Stylus, Magic Gooddy 98. Огромное спасибо Волкову А. И. – за отличное преподавание предметов, Billу Gaits – за то что он умеет зарабатывать деньги собственным умом, Мерзлякову Д. С. – за поддержку в трудную минуту, Барышеву А. А. – за техническую поддержку, Русских А. И. – за программную поддержку, Казакову В. С. –за разрешение работать на компьютере, Sting, Queen, и другим за хорошую музыку во время работы над курсовым.

    Задание.

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

    Вводить новый товар, указывая следующие параметры
    Наименование;
    Количество;
    Цену;
    Дату поступления.

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

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

Выводить список выбывшего товара с возможностью сортировки по любому параметру. Выдавать общую статистическую характеристику:

    Общая стоимость имеющегося товара;
    Количество имеющегося товара;
    Количество выбывшего товара.
    Сохранять и восстанавливать всю информацию АРМ с диска.
    Описание переменных.
    basskl – основная запись с необходимыми переменными это:
    naim – наименование товара;
    kol – количество товара;
    price – цена товара;
    kol_p – количество пришедшего товара;
    kol_r – количество товара который ушел;
    date_p – дата прихода товара;
    date_r – дата расхода товара.
    f – file базы слада;
    list – массив данных базы;
    schet – cчетчик;
    curs – показатель позиции;
    stran – счетчик позиции курсора;
    i – переменная использования;
    mcurs – переменная начальной позиции меню;
    k –переменная определения клавиши;
    res –переменная выбора меню;
    da – переменная использования;
    er – переменная ошибки преобразования;
    tx – переменная текста при поиске;
    fil – переменная имени базы;
    key – флажок;
    seter – переменная использования.

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

    Функция probel;

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

    Выход: Текст требуемой длины.
    Функция Edtext;

Используется для вывода на экран в нужную позицию текста и его последующего редактирования

    Функция работает следующим образом:

Зацикливается до тех пор пока не будет нажатия Enter или Esc. В это время выводит на экран текст в нужную позицию, обновляется , ожидает нажатия клавиш или delete.

    Вход: Координаты, текст, длина текста, флажок.
    Выход: Вывод на экран текста, отредактированный текст.
    Функция Cifri;

Подобна функции Edtext только ввод текста ограничен цифрами. Работает также.

    Процедура Prishlo;

Применяется для вывода на экран меню “Приход” и занесения данных в позицию базы.

Описание работы: Работает со строкой массива базы. Выводит на экран меню “Приход”, преобразует текстовые переменные после ввода в строки меню.

    Процедура Ushlo;

Аналогична процедуре Prishlo . Заменена только формула вычисления количества.

    Процедура Vvodnov;

Процедура обеспечивающая вывод на экран меню “Новый товар”, ввод новой строки в базу.

Работает: Ограничивается строкой, для работы с переменными записи, выводит на экран меню, пользователем редактируются строки меню, преобразуются, увеличивается счетчик числа строк базы на 1.

    Процедура Edzapic;

Используется для редактирования записи в текущей позиции курсора листинга перечня товаров.

    Вход: Позиция
    Выход: отредактированный текст в данной позиции.
    Процедура Ekran;

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

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

    Функция Vivstr;
    Формирует строку по позиции в базе.

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

    Процедура Vivlist;

Обеспечивает формирование экрана с помощью процедуры Ekran, вывод поясняющей строки. Подкрашивание строки в позиции курсора, опрос клавиш курсора и служебных (для ввода новой, корректировки, удаления). Работает следующим образом: Выполняет процедуруEkran, прорисовывает строку пояснения, цикл пока не нажата клавиша “влево”, “вправо”, “Enter”, “Esc”–опрашивает клавиатуру с помощью функции “Readkey” если нажата “Вниз” или “Вверх” уменьшаетя или увеличивается соответственно текущий счетчик позиций меню

    Функция Vstroca;
    Функция организует главное меню в верхней строке экрана.

Устанавливает параметры цвета, выводит на экран массив с переменными меню т. е. названиями меню. Опрашивает клавиатуру на нажатие клавиши “Влево”, “Вправо”, “Enter” выполняет соответствующие этим клавишам команды. Затем если было нажато “Esc” функция принимает значение меньшее 1 и затем в головной программе происходит выход.

    Процедура Sortirovka;
    Сортирует данные по заданной колонке.

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

    Описание алгоритма работы программы.

Очищается экран выводится меню для указания месторасположения и названия файла базы по умолчанию это “С: \base. dat” затем проверяется создан ли файл если нет то создается. Организуется цикл до конца файла переписываются данные в массив базы. Обнуляются переменные. организуется меню по данным функцииVstroka затем происходи выбор с помощью оператора Case по которому осуществляются переходы. В случае “1” прихода функцииVstrokaвыводится листинг данных базы и заголовков, организация движения курсора по строкам базы при помощи процедурыVivlist. В случае результата “2” формируется окно с тенью “Пришло”, заполняется окно с помощью процедурыPrishlo по текущей позиции курсора экрана и листинга. “3” формируется окно “Расход”, заполняется с помощью процедуры Ushlo. “4” организуется окно “Найти наименование” вводится текст с помощью функции Edtext. сравнивается с наименованиями базы если находит устанавливает курсор на это место. Если не находит выводит сообщение и устанавливает на конечную позицию. “5” Окно сортировки. Выполняется процедураSortirovka. При других значениях функции Vstroca происходит запись файла базы, закрытие файла.

    Алгоритм программы.
    IV. Текст программы.
    Program kursovoi;
    uses crt;
    type basskl = record
    naim: string[40];
    kol: integer;
    price: single;
    kol_p: integer;
    date_p: string[8];
    kol_r: integer;
    date_r: string[8];
    end;
    var f: file of basskl;
    List: array[0...255] of basskl;
    Schet: Integer;
    curs, stran, i, mcurs: integer;
    k: char;
    Res, da, er, seter: Integer;
    Tx, files: String;
    key: boolean;
    const
    mnu: array[1...6] of string[13]=(
    ' Ввод ',
    ' Приход ',
    ' Расход ',
    ' Найти ',
    ' Сортировка ',
    ' Выход ');
    function Probel(Text: String; Len: Integer): String;
    begin
    While length(Text)    Probel: =copy(Text, 1, len)
    end;

function Edtext(x, y: Integer; Text: String; Len: Integer; var key: boolean): String; var c: char;

    begin
    key: =true;
    Edtext: ='';
    repeat
    gotoxy(x, y);
    write(Text);
    write(Probel('', len));
    gotoxy(x, y);
    write(Text);
    c: =Readkey;
    if c=#8 then delete(Text, length(Text), 1);

if c in ['A'...'z', ' ', '. ', '0'...'9', 'А'...'я', '-'] then Text: =Text+c; Text: =copy(Text, 1, len);

    until (c=#27) or (c=#13);
    if c=#13 then Edtext: =Text else key: =false;
    end;

function Cifri(x, y: Integer; Text: String; Len: Integer; var key: boolean): String; var c: char;

    begin
    key: =true;
    Cifri: ='';
    repeat
    gotoxy(x, y);
    write(Text);
    write(Probel('', len));
    gotoxy(x, y);
    write(Text);
    c: =Readkey;
    if c=#8 then delete(Text, length(Text), 1);
    if c in ['. ', '0'...'9', '-'] then Text: =Text+c;
    Text: =copy(Text, 1, len);
    until (c=#27) or (c=#13);
    if c=#13 then Cifri: =Text else key: =false;
    end;
    procedure Prishlo(posiz: integer);
    var Tx: String;
    er: integer;
    key: Boolean;
    kl: integer;
    begin
    clrscr;
    With List[Posiz] do begin
    writeln(' Приход');
    writeln(' Количество ->');
    writeln(' Дата прихода ДД. ММ. ГГ->');

val(Cifri(25, 2, '', 6, key), kl, er); if NOT key then exit;

    kol_p: =kol_p+kl; kol: =kol+kl;
    Date_p: =Cifri(25, 3, '', 8, key); if NOT key then exit;
    end;
    end;
    procedure Ushlo(posiz: integer);
    var er: integer;
    key: Boolean;
    kl: integer;
    begin
    clrscr;
    With List[Posiz] do begin
    writeln(' Расход');
    writeln(' Количество ->');
    writeln(' Дата расхода ДД. ММ. ГГ->');

val(Cifri(25, 2, '', 6, key), kl, er); if NOT key then exit;

    kol_r: =kol_r+kl; kol: =kol-kl;
    Date_r: =Cifri(25, 3, '', 8, key); if NOT key then exit;
    end;
    end;
    procedure Vvodnov;
    var Tx: String;
    er: integer;
    key: Boolean;
    begin
    clrscr;
    With List[Schet] do begin
    writeln(' Новый товар');
    writeln(' Наименование товара : ');
    writeln(' Количество : ');
    writeln(' Цена : ');
    writeln(' Дата прихода ДД. ММ. ГГ: '); {readln(date_p); }
    Naim: =Edtext(25, 2, '', 20, key); if NOT key then exit;

val(Cifri(25, 3, '', 6, key), kol, er); if NOT key then exit;

    kol_p: =kol;

val(Cifri(25, 4, '', 10, key), price, er); if NOT key then exit;

    Date_p: =Cifri(25, 5, '', 8, key); if NOT key then exit;
    inc(Schet);
    end;
    end;
    procedure Edzapic(posiz: integer);
    var Tx: String;
    er: integer;
    key: Boolean;
    begin
    clrscr;
    With List[posiz] do begin
    writeln(' Редактирование товара');
    writeln(' Наименование товара : ');
    writeln(' Цена : ');
    Tx: =Edtext(25, 2, Naim, 20, key); if key then Naim: =tx;
    str(price: 0: 2, tx);

tx: =Cifri(25, 3, tx, 10, key); if key then val(tx, price, er);

    end;
    end;
    function vstroca(var curs: integer): integer;
    var i: integer;
    begin
    Textbackground(15);
    TextColor(0);
    gotoxy(1, 1); write(Probel('', 80));
    for i: =0 to 5 do
    begin
    gotoxy(i*13+1, 1); write(mnu[i+1]);
    end;
    Textbackground(0);
    TextColor(14);
    gotoxy((curs-1)*13+1, 1); write(mnu[curs]);
    repeat
    k: =readkey;
    Textbackground(15);
    TextColor(0);
    gotoxy((curs-1)*13+1, 1); write(mnu[curs]);
    if k=#0 then k: =readkey;
    case k of
    #75: if curs>1 then dec(curs) else curs: =6;
    #77: if curs<6 then inc(curs) else curs: =1;
    end;
    Textbackground(0);
    TextColor(14);
    gotoxy((curs-1)*13+1, 1); write(mnu[curs]);
    if k=#13 then vstroca: =curs;
    until (k=#27) or (k=#13);
    if k=#27 then vstroca: =-1;
    end;
    function VIVSTR(nstr: integer): String;
    var Skol, sprice, summ,
    Pkol, Rkol: String[10];
    begin
    VIVSTR: ='';
    if (nstr=0) then
    With List[nstr] do
    begin
    str(kol, skol);
    str(price: 9: 2, sprice);
    str(price*kol: 9: 2, summ);
    str(kol_p, pkol);
    str(kol_r, rkol);

VIVSTR: =Probel(naim, 20)+Probel(skol, 6)+Probel(sprice, 11)+Probel(summ, 11)+ Probel(Pkol, 6)+Probel(Date_p, 10)+Probel(Rkol, 6)+Probel(Date_r, 9); end;

    end;
    procedure Ekran;
    var i: integer;
    Summ_, Sum_p, Sum_r: Double;
    begin
    Window(1, 2, 80, 25);
    Textbackground(5);
    TextColor(10);
    Clrscr;
    gotoxy(1, 1);
    Textbackground(3);

write(Probel('Наименование', 20)+Probel('Кол-во', 9)+Probel('Цена', 10)+ Probel('Сумма', 7)+Probel('Приход ', 7)+Probel('Дата

    пост', 10)+Probel('Расход', 6)
    +Probel(' Дата выд', 9));
    Textbackground(5);
    TextColor(14);
    for i: =0 to 20 do
    begin
    gotoxy(1, 2+i); Write(Vivstr(i+stran));
    end;
    Textbackground(15);
    TextColor(0);
    gotoxy(1, 1+curs); write(VIVSTR(curs+stran-1));
    Summ_: =0; Sum_p: =0; Sum_r: =0;
    for i: =0 to Schet-1 do
    begin
    Summ_: =Summ_+(List[i]. price*List[i]. kol);
    Sum_p: =Sum_p+(List[i]. price*List[i]. kol_p);
    Sum_r: =Sum_r+(List[i]. price*List[i]. kol_r);
    end;
    Textbackground(4);
    TextColor(15);
    gotoxy(1, 23); write(Probel('', 80));
    gotoxy(1, 23); write(' Итого: ',

Summ_: 12: 2, ' руб. Приход: ', Sum_p: 0: 2, ' руб. Расход: ', Sum_r: 0: 2, ' руб. '); gotoxy(15, 24); write ('Общее количество наименований товара: ', schet, ' шт'); end;

    procedure Sortirovka(num: Integer);
    var i, j, k: Integer;
    Bas: Basskl;
    begin
    for i: =0 to Schet-1 do
    begin
    Bas: =List[i];
    for j: =i+1 to Schet-1 do
    begin
    case Num of

1: if Bas. Naim>List[j]. naim then begin Bas: =List[j]; k: =j end; 2: if Bas. kol>List[j]. kol then begin Bas: =List[j]; k: =j end; 3: if Bas. price>List[j]. price then begin Bas: =List[j]; k: =j end; 5: if Bas. kol_p>List[j]. kol_p then begin Bas: =List[j]; k: =j end; 6: if Bas. date_p>List[j]. date_p then begin Bas: =List[j]; k: =j end; 7: if Bas. kol_r>List[j]. kol_r then begin Bas: =List[j]; k: =j end; 8: if Bas. date_r>List[j]. date_r then begin Bas: =List[j]; k: =j end; end;

    end;
    List[k]: =List[i]; List[i]: =Bas;
    end;
    end;
    procedure Vivlist(var seek, curs: integer);
    var c, k: char;
    i: integer;
    begin
    Ekran;
    Textbackground(3);

gotoxy(1, 24); write(Probel(' <- -> - меню | Ins - Добавить | Ctrl+F8 - Удалить | Ctrl+Enter - Изменить', 79));

    Textbackground(15);
    TextColor(1);
    gotoxy(1, 1+curs); write(VIVSTR(curs+stran-1));
    repeat
    c: =readkey;
    Textbackground(5);
    TextColor(14);
    gotoxy(1, 1+curs); write(VIVSTR(curs+stran-1));
    if c=#0 then k: =readkey;
    case k of
    #72: begin {Вверх курсор}

if (curs=1) and (stran>0) then begin dec(stran); Ekran end; if (curs>1) then dec(curs);

    end;
    #80: begin {Вниз курсор}
    if (curs=20) and (stran+20    begin inc(stran); Ekran end;
    if ((curs<20) and (Schet>=20))
    or ((Schet<20) and (curs    end;
    #101: begin{Удалить} {Ctrl+F8}
    if Schet>0 then
    for i: =curs+stran-1 to Schet-1 do
    begin
    List[i]: =List[i+1];
    end;
    dec(Schet);
    dec(curs);
    Ekran;
    end;
    #82: begin {Ins - новая запись}
    Window(12, 12, 72, 17);
    Textbackground(0);
    clrscr;
    Window(10, 11, 70, 16);
    Textbackground(7);
    clrscr;
    {новоя запись}
    Vvodnov;
    Sortirovka(1);
    Window(1, 1, 80, 25);
    Ekran;
    end;
    end;
    if c=#10 then {Ctrl+Enter}
    begin
    Window(12, 12, 72, 17);
    Textbackground(0);
    clrscr;
    Window(10, 11, 70, 16);
    Textbackground(7);
    clrscr;
    {новоя запись}
    Edzapic(Curs+stran-1);
    Sortirovka(1);
    Window(1, 1, 80, 25);
    Ekran;
    end;
    Textbackground(15);
    TextColor(1);
    gotoxy(1, 1+curs); write(VIVSTR(curs+stran-1));
    until (k=#27) or (k=#13) or (k=#75)or (k=#77);
    Window(1, 1, 80, 25);
    end;
    begin
    clrscr;
    Window(16, 12, 66, 15);
    Textbackground(9);
    textcolor (3);
    clrscr;
    write (' Введите название и полный путь базы');
    gotoxy (3, 3);
    readln (files);
    if files='' then files: ='c: \base. dat';
    assign(f, files);
    {$I-}
    reset(f);
    {$I+}
    if IOResult<>0 then rewrite(f);
    Schet: =0;
    While not eof(f) do
    begin
    inc(Schet);
    read(f, List[Schet-1]);
    end;
    Textbackground(0);
    clrscr;
    curs: =1; stran: =0; mcurs: =1; seter: =15;
    repeat
    Ekran;
    Window(1, 1, 80, 25);
    res: =vstroca(mcurs);
    case res of
    1: begin
    Vivlist(stran, curs);
    Window(1, 1, 80, 25);
    end;
    2: begin
    Window(16, 12, 66, 15);
    Textbackground(0);
    clrscr;
    Window(14, 11, 64, 14);
    Textbackground(7);
    clrscr;
    {Запуск новой записи}
    Prishlo(Curs+stran-1);
    Window(1, 1, 80, 25);
    end;
    3: begin
    Window(16, 12, 66, 15);
    Textbackground(0);
    clrscr;
    Window(14, 11, 64, 14);
    Textbackground(7);
    clrscr;
    {Запуск новой записи}
    Ushlo(Curs+stran-1);
    Window(1, 1, 80, 25);
    end;
    4: begin {Поиск}
    Window(16, 12, 66, 14);
    Textbackground(7);
    clrscr;
    Window(14, 11, 64, 13);
    Textbackground(8);
    clrscr;
    Gotoxy(2, 2); Write('Найти наименование: ');
    Tx: =Edtext(25, 2, '', 20, key);
    for i: =0 to Schet-1 do
    if List[i]. naim=tx then begin seter: =1; break; end;
    if i>20 then begin curs: =1; stran: =i end
    else begin curs: =i+1; stran: =0; end;
    if seter<>1 then
    begin
    Window(16, 12, 66, 14);
    Textbackground(7);
    clrscr;
    Window(14, 11, 64, 13);
    Textbackground(8);
    clrscr;

Gotoxy(2, 2); Write('Наименование ненайдено'); readln; stran: =1; curs: =1; end;

    Vivlist(stran, curs);
    Window(1, 1, 80, 25);
    end;
    5: begin {Сортировка}
    Window(16, 12, 66, 14);
    Textbackground(0);
    clrscr;
    Window(14, 11, 64, 13);
    Textbackground(7);
    clrscr;

Gotoxy(2, 2); Write('Введите поле для сортировки (1...8): ');

    val(Cifri(38, 2, '', 1, key), da, er);
    if da in [1...8] then Sortirovka(da);
    Window(1, 1, 80, 25);
    end;
    end;
    until (res<1) or (res=6);
    Rewrite(f);
    Sortirovka(1);
    for i: =0 to Schet-1 do Write(f, List[i]);
    close(f);
    end.

Скачен 490 раз.

Скачать