Программа-упаковщик DBF-файлов

Не секрет, что при удалении из DBF-базы записи, она не удаляется, а просто помечается как удалённая…

Не секрет, что при удалении из DBF-базы записи, она не удаляется, а просто помечается как удалённая, при этом физически оставаясь на своём месте и занимая место. Понадобилось мне почистить очень разросшуюся за годы DBF-базу. Сделал это средствами 1С, но мне это показалось не очень удобным (так как сама из под себя 1С база не упакуется), и родилась идея реализовать сабж в отдельной утилите на Delphi. Программа перебирает все BDF-файлы в выбранной директории, упаковывает их, и удаляет соответствующие CDX-файлы. Требует BDE engine.

Прошу сильно не пинать — всего лишь проба пера на Дельфе.

Приветствуются дельные замечания, исправления и наставления на путь истинный, пустобрехи — «не зачет».

99 Comments

  1. MRAK

    а чем ТИИ с соотв. галкой хуже?

    Reply
  2. CheBurator

    мдя… чтобы выдать одну команду (если мне не изменяет память zap…???) — понадобилось привлечь дельфи…

    Reply
  3. CheBurator

    .. или pack?

    Reply
  4. CheBurator

    пробуем — выбираем файл, жмакаем упаковать получаем ошибку борланд энжайн.. смотрим.. ааа! вместо выбранного файла подставилась маска путь*.dbf — низачот!!!

    Reply
  5. CheBurator

    фиг с ним — пишем файл ручками….

    http://s1.dump.ru/viewer/3577469/

    .

    хочется ругаться матом…

    Reply
  6. wing

    «PACK TABLE ‘» + полный_путь_к_дбф + «‘»

    Вроде бы большая часть драйверов и провайдеров умеет.

    Постоянно пользую с VFPOLEDB

    Reply
  7. wing

    +(6) Нарушено одно из главных правил программирования:

    Если это уже реализовано и применимо к задаче — нехрен ихобретать велосипед!

    Reply
  8. vikorn

    ну и нафига оно? когда в 1с это делается одной командой…

    Reply
  9. Parazyte

    (7) Ну, просил же сильно не пинать 🙁

    (1) Что такое ТИИ?

    (2) zap или pack — откуда или где такая команда?

    (4)(5) прога по моему желанию должна перебирать все DBF-файлы в выбранной директории и удалить соответственные CDX-файлы.

    (8) в 1С базу А нужно упаковывать из-под базы Б.

    Очень жесткий прессинг, всем спасибо за комменты…

    Reply
  10. vikorn

    (9) сделал бы еще поддержку командной строки еще куда нишло, а так пользы ноль, даже перебор каталога и удаления cdx 5 строчек кода в 1с

    Reply
  11. vasilykushnir

    Господа! Не стреляйте в пианиста — он играет, как умеет. Хотя лично мне и в голову бы не пришло писать подобное — есть же cdbfw, но дерзание заслуживает хотя бы уважения.

    Например, в лом набирать?:

    regsvr32 test.reg

    Можно написать приблуду, которая будет выполнять только одну эту команду. Удобнее? — стопудово! Так и здесь…

    Reply
  12. Parazyte

    (10) Я же объяснил, что перебор файлов базы из-под самой себя невозможен, только из другой базы — мне это неудобно.

    (11) ну хоть кто-то заступился 🙂

    Reply
  13. Parazyte

    (6) VFPOLEDB тож не вариант

    Reply
  14. CheBurator

    (9)

    (4)(5) прога по моему желанию должна перебирать все DBF-файлы в выбранной директории и удалить соответственные CDX-файлы.

    — не знаю что она там должна и как — я как пользователь — не телепат, тем более что все равно она этого не делает…

    Reply
  15. Altair777

    (0) > Прошу сильно не пинать — всего лишь проба пера на Дельфе.

    — Иди лучше тренируйся вон на… на кошках.

    © Операция «Ы» и другие приключения Шурика

    😉

    Reply
  16. Parazyte

    (15) Я же просил пустобрехов не флудить, а вы только этим и занимаетесь. Эт Вам к Петросяну на форум. Там наверное все такие умные. А чтоб по доброму подсоветовать, так Вам слабо.

    (14) Попроавил описание для нетелепатов » Программа перебирает все BDF-файлы в выбранной директории, упаковывает их, и удаляет соответствующие CDX-файлы. Требует BDE engine.».

    Reply
  17. CheBurator

    (16) ну так положи рядом бдеэнджайн….

    Reply
  18. Parazyte

    (17) ок, понял.

    Reply
  19. Арчибальд

    А что, база так разрослась, что конфигуратор не справляется?

    Reply
  20. Parazyte

    (19) Даже не знаю, как ответить. Скажем так: Я не ставил себе целью бороться с разросшейся базой средствами 1С. Достаточно того, что моя утилита справилать с поставленной задачей (упаковать DBF 1С базу не из-под 1С), к тому же я хотел немного познакомиться с Дельфи (чисто из спортивного интереса), и было желание поделиться результатами работы с сообществом (которое должно было не высмеивать и сарказничать над малоопытным программистом, а оценить и дать дельные советы по возможности). Но сообщество повело себя некрасиво, что не может радовать.

    Reply
  21. Altair777

    (16) Разъясню…

    1) Какое отношение эта разработка имеет к 1С?

    2) На коммент (1) Вы так и не ответили.

    3) > так как сама из под себя 1С база не упакуется

    А под этим Вы что имели в виду?

    4) А Вы знаете сколько раз я на форуме помогал людям? А Вы? Ровно 0 😀

    Reply
  22. Altair777

    (20) > над малоопытным программистом

    вот-вот… я бы не доверил обработку своих баз таким кодерам….

    Reply
  23. Арчибальд

    +21 и еще альтернатива есть: Администрирование — выгрузить данные — загрузить данные. То же самое делает…

    Reply
  24. Parazyte

    (21.1) я её собирася применить к 1С+DBF.

    (21.2) Ответил в (9).

    (21.3) верно, чувак. ты меня уличил в малоопытности (о чём я сообщил в предыдущем комменте).

    Вопрос снят. Признаю бесполезность этой программы для сообщества.

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

    Reply
  25. Altair777

    (24) из 9-ого коммента….

    (1) Что такое ТИИ?

    Замечательный ответ 😀 Честно сказать, я подумал что это шутка.

    И напрасно Вы обижаетесь. В (15) Я пытался Вам мягко намекнуть, что не стоит, не зная как следует платформу (Дельфи), заниматься такими серьезными вещами, как изменение файлов данных на низком уровне.

    А Вы в ответ начали ругаться 🙂

    Reply
  26. Parazyte

    (25) Ну, уж извиняйте, намёк не так понял. Просто мне не пришло в голову (21.3), так бы я к другой среде разработки и не прибегал.

    Reply
  27. Altair777

    (26) Ладно, я не злой 🙂

    Но Вы все равно осваивайте Дельфи. Гдядишь, и пригодится в будующем 😉

    P.S. А, может, и мне молодость вспомнить… что-то такое на Clipper’е написать… 😀

    Reply
  28. Parazyte

    оки. В конце концов — хоть кто-то (в частности Altair777) что-то дельное сказал 🙂

    Reply
  29. Altair777

    (28) снял минус 😉

    Reply
  30. Parazyte

    а минуса можно было и поснимать 😳

    Reply
  31. Parazyte

    (30) повторяю (28) 😀

    Reply
  32. Parazyte

    + (23) хотя бы по теме. и на том спс.

    Reply
  33. MRAK

    http://infostart.ru/profile/32077/, ну хоть и велосипед с неровноми колесами изобрел, но всеж молодца. Минуса, на мой взгляд, тут не нужны.

    Reply
  34. Parazyte

    (33) поддерживаю. нельзя рубить начинания на корню — это же не педагогично (с) Макаренко 🙂

    Reply
  35. Altair777

    (33) А вот интересно… Если по какой-то причине не все файлы будут упакованы, это скажется на ссылочной целостности?

    Анализируется ли она для помеченных на удалениях записях (на уровне dbf)? Есть у меня смутное подозрение, что да.

    И тогда неровные колеса могут привести к тяжелым последствиям…

    Reply
  36. Altair777

    (34) 😀

    «Бить не нужно. А не вникнут — разъяснять!» © В. Высоцкий.

    Reply
  37. Altair777

    +(36)

    — Шурик! Вы комсомолец?

    — Да.

    — Это же не наш метод!

    © Операция «Ы» и другие приключения Шурика

    Reply
  38. Parazyte

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

    Reply
  39. Altair777

    (38) Это же не в транзакции делается?

    А если свет отключат?

    Reply
  40. Altair777

    (38) Я имел в виду штатную проверку ссылочной целостности.

    Пример. Удаленный элемент справочника, удаленный документ с ссылкой на этот элемент справочника.

    Файл справочника упаковался, а файл документа — нет.

    Т.е. в нем осталась ссылка на справочник. Хотя, и помеченная на удаление на физическом уровне.

    Reply
  41. Parazyte

    (39) тоже вариант, нужно ИБП ставить в таком случае. То же самое может произойти и при ТИИ.

    Reply
  42. Parazyte

    (40) исключено. вовремя упаковки ДБФ не удаляются записи помеченные на удаление в 1С, только те, которые в 1С не видны (удалены совсем), соответственно ссылок на них уже быть не может.

    Reply
  43. Abadonna

    Команда 1С для объекта Хbase Сжать()

    Синтаксис:

    Сжать()

    Назначение:

    Сжать базу, убрав удаленные записи.

    Запускай себе ert-шку из другой базы (хоть пустой) и пакуй сколько хочешь. За это минус. За применение Дельфи — плюс (потому как Дельфи 😉 )

    Итого: НОЛЬ

    Reply
  44. Parazyte

    (43) «Запускай себе ert-шку из другой базы» — не устраивает, в том то и дело. А вот то, что Альтаир подсказал в (21.3) — Вполне, и не нужно изгаляться со сторонними утилитами 🙂

    Reply
  45. Parazyte

    (43) я же говорил, что уже реализовывал это средствами 1С — всё не то.

    «Итого: НОЛЬ» — и на том спасибо, хоть не минус 🙂

    Reply
  46. Abadonna
    уже реализовывал это средствами 1С — всё не то.

    Дык тогда проще поставить FoxPro, там помимо ручной правки есть и команда pack.

    Что BDE engine поставить, что фокспро…

    Reply
  47. Abadonna

    +(46) Кстати, на дельфе можно было и ADO заюзать

    Reply
  48. Parazyte

    (47), да но это БДЕ для меня проще оказался, я ж в дельфи первый раз писал

    Reply
  49. marsohod

    (43) «Плавали — знаем…»

    Метод Сжать() не работал раньше (лет пять назад, на старых релизах). Отрабатывал без ошибок, но записи не удалял. Как сейчас — не проверял, сама тема не очень актуальна.

    Reply
  50. wing

    (9) Это все команды фокспро, которые понимаются большинством драйверов дбф.

    «и удалить соответственные CDX-файлы» — а потом все равно запускать 1С и ждать переиндексации? а не проще тогда сразу из-под 1С все делать?

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

    (16) Нелогично ради такой простой операции тянуть за собой еще и BDE…

    (46) Весь фокс ставить смысла нет — достаточно VFPOLEDB.

    Reply
  51. vikorn

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

    а если база открыта и в ней юзеры сидят и правят доки, а тут раз и сжатие и удаление cdx

    программа может и полезная

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

    Reply
  52. Parazyte

    (50)(51) читай (21.3) и (24)

    Reply
  53. vasilykushnir

    Итак… Вижу тут налетели на человека: и не так свистишь, и не туда летишь…

    1. О полезности/бесполезности рассуждать не буду — ибо считаю, если хоть одному человеку облегчит жизнь, это уже польза. Хотя вместо кнопки «Выбрать файл из базы данных» я бы поставил поле выбора «Каталог БД», но это уже так… мелкие придирки и на общую картину не влияют (думаю автор по своему усмотрению изменит это дело).

    2. За попытку написать на Делфи естественно надо поощрить. Говорят — все это делается штатно. Не вопросс. Но мне почему-то, к примеру, если только «посмотреть» внешнюю обработку, сподручнее плагин Абадонны к тотал командиру, чем запускать огромадину 1С и в ней уже смотреть. Дело вкуса. А о вкусах не спорят.

    Так что давайте не забывать, что все мы, даже гуру, когда-то были начинающими. И чем больше маленьких, легеньких приблуд, облегчающих работу с 1С — тем лучше, или я люто извиняюсь…

    Reply
  54. Parazyte

    (53) от такой проникновенной речи меня сразу отпустило … есть же справедливость на свете 🙂

    Reply
  55. Parazyte

    и даже общий «-1» меня уже не огорчает 🙂

    Reply
  56. wing

    (52) Ничего то ты не понял. Большинство комментирующих не ставят целью принизить твои умственные способности, скорее наоборот — показывают промахи для того, чтобы ты мог развиваться, а не топтаться на месте…

    Подробнее:

    BDE штука довольно мощная, но и слишком объемная для таких целей, потому я и предложил как альтернативу использовать ВМЕСТО нее VFPOLEDB, который по сути своей является одной из последних версий движка Visual FoxPro, т.е. позволяет использовать ВЕСЬ его функционал, установкой всего лишь ОДНОГО файла в систему.

    Использовать же его возможности можно откуда угодно — из 1С, delphi, VB, js, etc… (примеры и ссылки можно найти на этом форуме)

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

    Reply
  57. Parazyte

    (56) 1. «… показывают промахи для того, чтобы ты мог развиваться, а не топтаться на месте …» Естественно, я для этого и показываю свою разработку, но это не значит, что нужно ставить минусы (именно это и расстраивает, а не стимулирует к дальнейшему развитию).

    2. BDE не такая уж и большая штука — bdeinst.cab — 3,4Mb. Содержит всего один файл, который нужно за-регсрв32-ить. Его достаточно для работы БДЕ.

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

    Reply
  58. Abadonna

    (35)

    А вот интересно… Если по какой-то причине не все файлы будут упакованы, это скажется на ссылочной целостности?

    Анализируется ли она для помеченных на удалениях записях (на уровне dbf)? Есть у меня смутное подозрение, что да.

    мдя… такие элемнетраные вещи надо бы знать 😥

    все равно как коммунист, не знающий кто такой Карл Маркс

    Reply
  59. Altair777

    (58) Я задаю наводющий вопрос. А Вас есть на него ответ?

    Есть у меня смутное подозрение, что …..

    Reply
  60. Abadonna
    А Вас есть на него ответ?

    Есть!!! В полях таблиц 1С (хоть dbf, хоть sql), ессть поле IsMarket.

    По нему сама 1С определяет, что запись помечена на удаление, но в самих таблицах она физически существует за милую душу, и база даже не подозревает, что запись удалена. А вот при ПОЛНОМ (непоссредственном удалении из 1С) уже БАЗА ее помечает, как удаленную, и потом может использовать эту строку (если не делали pack) для другой записи.

    Так что свои подозрения

    Есть у меня смутное подозрение, что …..

    можешь… убрать в ящик стола

    Reply
  61. Abadonna

    +(60) И в школу!

    Reply
  62. Parazyte

    Согласен с описанием в (60), только поле ISMARK, а не ISMRKET.

    Reply
  63. Abadonna

    (62) Ну, по памяти сказал 😀

    не заглянул в dd

    Просто из вышеизложенного становится понятен уровень «чистых» одноэснегов 😀

    Reply
  64. Abadonna

    А минус у тебя зря, за инициативу наказывать нельзя! Подравняю до нуля 😉

    Reply
  65. Parazyte

    😀 да ладно, с кем не бывает. Я тоже не считаю себя полным профаном в 1С, однако про момент в 21.3 почемуто забыл, и понесло меня в дебри Дельфи. 🙁 🙂

    Reply
  66. Parazyte

    (64) вот и спасибки — справедливость восторжествовала

    Reply
  67. Abadonna

    +(64) Во, и Василий (Душелов) тебя за инциативу в плюсы выгнал 😀

    Reply
  68. Parazyte

    Меня вообще отпустило после его плюса, даже захорошело как-то 🙂

    Reply
  69. Арчибальд

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

    Девушка: Вы знаете санскрит?

    Студент: А когда сдавать?

    😉

    Reply
  70. Altair777

    (60) Это я прекрасно знаю. Вопрос был в том, знает ли об этом автор?

    Позволю себе маленький ликбез 😉

    Физически запись помечается на удаление при Операции — Удаление помеченных объектов, а не мифическом при ПОЛНОМ (непоссредственном удалении из 1С)

    И при Удалить(1)

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

    Reply
  71. vasilykushnir

    (69)ОТВАГА?

    Что это по-вашему?

    Участвовать в корриде?

    Или в гонках Формулы 1?

    Может быть в воздушном бою на истребителе?

    А может затяжной прыжок с парашютом?

    Прыжок в пропасть на резиновой растяжке или спуск по горной реке на плоту?

    Поспорить на всю зарплату?

    Напасть на вышибалу в баре?

    Или подраться с начальником?

    Прокатиться на поломанном чертовом колесе?

    Ерунда…….все это мелочи!

    Вот что такое ОТВАГА!

    http://pics2.pokazuha.ru/pic0/n/0/6028965i0n.jpg

    Reply
  72. Abadonna

    (71)

    мифическом при ПОЛНОМ (непоссредственном удалении из 1С)

    Еще раз мдя…. А удаление обработкой Спр.Удалить(1) — это мифическое?

    А если включен режим непосредственного удаления, а я на отладке для себя его именно такой включаю, — это мифический?

    Так что — еще раз в школу!

    Reply
  73. vasilykushnir

    + к (70) Ну отвага, не отвага, а минуса при каких хырах? Оно что, не работает, портит данные, садит сервер? Если хоть одно с выше перечисленного, тогда да — можно предъявлять претензии, а так… Злопыхательство в чисом виде.

    Reply
  74. Altair777

    И поэтому мой вопрос в (35) был правильный, хоть и наводящий 🙂

    (33) А вот интересно… Если по какой-то причине не все файлы будут упакованы, это скажется на ссылочной целостности?

    Вопрос был задан автору! И прав был Кушнир, предлагая выбирать не отдельные файлы, а каталог со всеми файлами.

    Но и УПСы не спасают от зависания компьютера при сжатии базы.

    Могут рухнуть ссылки…

    Reply
  75. Altair777

    (72) Да уже ходил я в школу и не раз 🙂

    СП — моя «настольная» книга 😉

    А Удалить(1) — это криво….

    Удалить(<?>);

    Синтаксис:

    Удалить(<Режим>)

    Назначение:

    Удалить документ.

    Параметры:

    <Режим> -: 1 — непосредственное удаление, 0 — пометка на удаление (необязателен, по умолчанию — 1).

    Замечание:

    Метод можно использовать только для объектов, созданных функцией СоздатьОбъект.

    Reply
  76. Арчибальд

    (73) Минуса от меня тут и не было никогда. 😮

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

    Это по-нашему (с) Душелов 8)

    Reply
  77. Abadonna
    Но и УПСы не спасают от зависания компьютера при сжатии базы.

    А что, для особых идиотов автор должен был написать «сделайте сначала резвную копию»?

    Reply
  78. Altair777

    Я же пишу — Внимание! Первый запуск в монопольном режиме 🙂

    Но при этом идиотами никого не называю…

    Reply
  79. Altair777

    Аркадий, что ты цепляешься, а?

    Я что не прав, что ссылочная целостность может нарушиться при неполном сжатии базы?

    Reply
  80. Noy

    (79) Думаю что ты не прав

    Reply
  81. Altair777

    (80) сейчас проверю на тестовой базе

    Reply
  82. vip

    (79) Ты не прав. Налицо непонимание элементарных вещей и неумение прислушиваться к мнению понимающих людей.

    Reply
  83. Altair777

    (82) налицо желание разобраться

    Reply
  84. Abadonna
    Но при этом идиотами никого не называю…

    Я разве кого-нибудь назвал? Поднимите мне веки..

    «для особых идиотов» — гипотетическое выражение

    Reply
  85. Altair777

    Стоп. Если запись физически помечена на удаление, значит ссылок на нее нет.

    сорри, ступил

    Reply
  86. Abadonna
    (80) сейчас проверю на тестовой базе

    еще можно запустить «Калькулятор» и проверить дествительно ли 2х2=4?

    😀

    Reply
  87. vasilykushnir

    (76) Это был вопрос за минуса к тем, чьи минуса еще «висят». Но похоже риторический….

    Reply
  88. Арчибальд

    (84) «Поднимите веки» — это не твое. Тебе надо говорить «Снимите с меня очки» 😀

    Reply
  89. vip

    (85) Слава богу.

    Ты просто мыслишь только на уровне 1С.

    Ширше надо глядеть, не надо мистицизма там, где его нет.

    А вообще механизм ссылочной целостности реализован в 1С очень плохо.

    Перебираются ВСЕ таблицы, поэтому работает очень медленно.

    Никогда не использую, пользуюсь своими механизмами.

    А в случае, если при каком-то неучтенном условии неразрешенная ссылка появилась, ее очень легко можно вернуть на место руками.

    Reply
  90. Altair777

    (86) Калькулятор — это отстой! Excel — это сила 😀

    см. (85)

    (87) см. (85)

    Reply
  91. Abadonna

    (85) Слава Христу, Аллаху, Будде и прочим!

    Reply
  92. Altair777

    (94) чес.слово… весь в запарке

    проблема с ИТЗ, может кто подскажет?

    проблема с группами справочника

    они не индексируются, итогов не могу получить

    Reply
  93. vip

    (99) Не загаживай тематическую ветку.

    Тебе на 1cpp.ru

    Reply
  94. Parazyte

    (91) >(87) см. (85)

    понял, я когда отправлял — ещё не видел (85)

    (93) — да я, как посмотрю, действительно, такие дебаты — о-го-го. Особенно весело про отвагу в (70) 🙂

    Reply
  95. Altair777

    (101) Я не загаживаю… апаю разработку моего друга 🙂

    Reply
  96. vip

    (106) Поразительно много у тебя друзей.

    Сам себе назначаешь?

    Reply
  97. Altair777

    (109) не всех 🙂

    хм… кто-то, кажется, призывал «Не загаживай тематическую ветку.«

    Reply
  98. Abadonna

    (89)

    Тебе надо говорить «Снимите с меня очки»

    Ну я ж не такой уж зверь;) Да и Азазелло в отпуске 😀

    Reply
  99. wing

    (57) 2. ты указал файл дистрибутива, который потом еще распаковывает кучу файлов и устанавливает в систему, что само по себе уже не есть 1 файл.

    3. Я разве сказал что-то против дельфи? я показал только то, что есть движок доступа к данным намного роднее к ДБФ + имеющий больше возможностей (например, БДЕ не понимает Dbase5).

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

    (105) + надо изучить все имеющиемся драйверы и провайдеры, а потом уже выбирать наиболее подходящий под задачу.

    Автору стоит внимательно прочитать (105) коммент, а далее справку по ADO в дельфи и на сайте мелкомягких, если он и дальше планирует разрабатывать приложения для работы с БД.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *