Экспресс-проверка ведения учета для 1С:Управление торговлей 8




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

83 Comments

  1. Шёпот теней

    !!!

    … процесс идЁт или завис …? какой-нибудь прогресБар или цифирки или меняющийся текст … а так только появляющиеся тексты ошибок …

    … вотВедьКакМогут …

    Reply
  2. Шёпот теней

    спАсиБО … хорОшО… крАсивО… идЕйно… дОходчиво …

    … вОт …

    Reply
  3. kondrashka

    НА УПП 8.1.14.72 (1.2.23.2) много ошибок. Напиши какая версия. Пока ничего не ставлю

    Reply
  4. Шёпот теней

    (3) … НЕ переЖИВАЙ … у товариЩчЪа первая рАбота … пОддержи …

    ( насколько я знаю нажатие «+» и потом «-» — обнуляЕт оценку…)

    … кОд открЫт …

    … ЗАодно и потестировали … гдядишь товариЩчЪ и испрАвит …

    … вОтАидеяЗамечательная …

    Reply
  5. Шёпот теней

    (8) … точно … Рад за нЕго … ииии крАсиво всЁтаки …

    … спАсибо gad_d … только подправь под кОмментарии … и удачи …

    … вОт …

    Reply
  6. Alex_IT

    Однозначно +

    Reply
  7. gad_d

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

    (4) На УПП не проверялась, только на УТ.

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

    (6) Ситуацию с датами поправил. На счет чеков, непонятно зачем вообще нужно проводить подобную проверку в течении текущего дня.

    Reply
  8. gad_d

    (12) если от заката до рассвета, то у вас целый световой день для технических работ )).

    А если серьезно, то проверку имеет смысл проводить на момент, когда кассовые смены закрыты. Или есть какие предложения?

    Reply
  9. WKBAPKA

    ох и любит же народ красивые цацки… афигеть !!!

    Reply
  10. d.snissarenko

    респект 🙂

    Reply
  11. susorov

    автор, при возможности, повтори это же и так же, но для УПП, плиз.

    (или дай рекомендации, а то на УПП 1.2.9.2 проверка зависает намертво)

    Reply
  12. freesyava

    Отлично. Как раз сам о таком думал, а тут раз и есть. Подгоняю правда под УПП.

    Reply
  13. Smile84

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

    Reply
  14. wirg

    Великолепная вещь

    Reply
  15. souldiver

    Хм… У меня в УТ 10.3 показывает в ошибке «Различия движений товаров по партиям и складам» один и тот же документ («Реализация товаров») в двух строчках.

    В первой — Расход по складу 10 штук, Расход по партии 0 штук

    Во второй — Расход по складу 0 штук, Расход по партии 10 штук

    Обе строчки относятся к одному документу.

    И так по очень многим документам «Реализация товаров»

    Reply
  16. mawr45

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

    {ВнешняяОбработка.ЭкспрессПроверкаВеденияУчета(212,22)}: Переменная не определена (ОбщегоНазначения)

    УчетнаяПолитика = <<?>>ОбщегоНазначения.ПолучитьПараметрыУчетнойПолитики(ТекДата, Отказ, Организация);

    {ВнешняяОбработка.ЭкспрессПроверкаВеденияУчета(325,20)}: Переменная не определена (ОбщегоНазначения)

    УчетнаяПолитика = <<?>>ОбщегоНазначения.ПолучитьПараметрыУчетнойПолитики(ДатаНач, Отказ);

    {ВнешняяОбработка.ЭкспрессПроверкаВеденияУчета(2946,4)}: Переменная не определена (ОбщегоНазначения)

    <<?>>ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки(), , ЗаголовокСообщения);

    {ВнешняяОбработка.ЭкспрессПроверкаВеденияУчета(2955,4)}: Переменная не определена (ОбщегоНазначения)

    <<?>>ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки(), , ЗаголовокСообщения);

    {ВнешняяОбработка.ЭкспрессПроверкаВеденияУчета(280,22)}: Переменная не определена (УчетНДС)

    УпрощенныйУчетНДС = <<?>>УчетНДС.ПолучитьУПУпрощенныйУчетНДС(Организация, ДатаНач, УчетнаяПолитика);

    Reply
  17. gad_d

    (22) Упс. У вас в конфигурации отсутствует общий модуль «ОбщегоНазначения». Какой релиз конфигурации?

    Reply
  18. mawr45

    УТ 10.2.6.4 а Бух 1.6.17.4, УТ не обновляем потому что много там доработок и смысла нет переходить на новую версию. Что можно сделать в моей ситуации?

    Reply
  19. Поручик

    (24). Всё-таки переходить на новую версию. У нас до недавнего времени тоже УТ 10.2.13.1 с кучей доработок использовалась, тем не менее поднатужившись, добил конфу до 10.3.7.9. Как выяснилось, многие доработки легко и непринуждённо выносятся в подписки на события, внешние обработки, регламентные задания. Из уцелевших доработок оставил только реально необходимое, на «юзерские хотелки» просто забил.

    Reply
  20. mawr41

    (25) Слишком много денег вбухали в доработки, начальство не даст перейти, опять придется много отстегивать, поэтому уж как есть:(

    Reply
  21. mawr41

    (23) «У вас в конфигурации отсутствует общий модуль «ОбщегоНазначения». Что можно сделать?

    Reply
  22. tango

    однозначно +

    на супер-переделанной конфе отработала без вылета +++

    Reply
  23. yuraskas

    У меня почемуто выдал ошибку — Поступление товара без указания стоимости, а именно док.ВозвратТовараОтПокупателя идет без стоимости, хотя в самом доке все ок, цена и сумма стоит. Этот нормально???

    ЗЫ. Прикол, запустил данную обработку в демке УТ — ошибок нашел больше, чем у меня 🙂

    Reply
  24. magic

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

    Reply
  25. sinjevla

    В новую базу УТ внесли справочники и остатки до этого учет ввелся в другой базе.

    Проверил обработкой выдает ошибки в Партионном учете.

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

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

    Это обработка показывает не правильно или я что-то не так делаю ?

    Reply
  26. msmaiorka

    Спасибо, очень полезная вещь!

    Reply
  27. multilab

    Классная обработка! Бухи в восторге)

    Reply
  28. alexkl

    удобно с чужой базой знакомиться

    Reply
  29. AlexKoso

    одно слово: отлично. Смущает только что с 2009 года не редактировалась. Или она идеальна? Или на базе ее создана новая обработка, как здесь не редко бывает, тогда поделитесь линком 🙂

    Reply
  30. maxpostal

    Есть ли аналогичная обработка под 8.2?

    Reply
  31. gad_d

    (36) Если подразумевается 11 редакция торговли, то нет

    (35) Конечно не идеальна :), но мне достаточно. Выложил версию посвежее, с вариантами для платформ 8.1 и 8.2.

    Reply
  32. maxpostal

    (37) нет подразумевается платформа 8.2 и редакция УТ 10.3 (10.3.14.5). Пойдет?

    Reply
  33. gad_d

    (38) maxpostal, Пойдет.

    Reply
  34. DimitrT

    Интересно, отработает на украинской конфигурации?

    Reply
  35. oxana1

    на молдавской работает!:)

    спасибо!

    Reply
  36. Fialka88

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

    Reply
  37. Fialka88

    {ВнешняяОбработка.ЭкспрессПроверкаВеденияУчета(280,22)}: Переменная не определена (УчетНДС)

    УпрощенныйУчетНДС = <<?>>УчетНДС.ПолучитьУПУпрощенныйУчетНДС(Организация, ДатаНач, УчетнаяПолитика);

    Выдает эту ощибку что можно сделать????

    Reply
  38. Fialka88

    что ни чего сделать нельзя??? (((

    Reply
  39. gad_d

    (44) Fialka88, уточните пожалуйста на какой конфигурации, платформе происходит описанная вами ошибка. Обработка изначально была предназначена для конфигурации «Управление торговлей, ред. 10.3». Работу с другими конфигурациями я не проверял.

    Reply
  40. Fialka88

    Управление торговым предприятием редакция 1.0, (1.0.15.9)

    Reply
  41. gad_d

    (46) Fialka88, к сожалению вам эта обработка не подходит.

    Reply
  42. Fialka88

    ((( да я уже поняла … спасибо

    Reply
  43. n_lintek

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

    Reply
  44. greenvitla

    интересно

    Reply
  45. n_lintek

    нашла ошибочку — заказ был зарезервирован, затем был снят весь товар с резерва , но в заказе поставщика и в поступлении есть товар , вставший под контроль этого заказа , отчет сообщает, что надо отгрузить » со склада» (( а отгружено верно «из резерва» так как резерв лег через » поступление товаров и услуг»

    Reply
  46. gad_d

    (51) n_lintek, Так как вы описали операция вообще не должна идентифицироваться как ошибочная. Проверил на демо базе, все отработало корректно. Что у вас показывает отчет «Товары в резерве на складах» по этой позиции? Используются ли у вас характеристики, серии при резервировании?

    Reply
  47. n_lintek

    Спасибо за отклик. У нас 1,0,5. Нет просто резервируем, без усложнений, но вот на КА 1,1,14,1 — точно есть такое (( в анализе по заказу все чисто, в отчете Анализ доступности товаров , тоже все чисто (( с какими настройками и группировками надо сделать Товары в резерве ?

    Reply
  48. n_lintek

    Ой спс за обработку )) нашла , такое устроить )) резерв на одном складе , а отгруз на другом . анализ заказ ни чего не показывает в таком случае.. ну очень странно .. (( (( это действительно видно в резерве именно по этому товару!

    Reply
  49. n_lintek

    gad_d, есть еще особенность в 1с , комплектующие под комплект можно резервировать, в документе «резервирование товаров» , созданный на основании заказа покупателя, заполняешь — размещением комплектующими для комплектов. Все они выходят в превышении над заказом в экспресс проверке ((, но при создании комплектации программа видит , весь этот товар зарезервирован и списывает из резерва! вот тут как посоветуете быть?

    Reply
  50. Mx00

    Спасибо, столько ошибок — теперь бухгалтер разбирается что с этим делать

    Reply
  51. gad_d

    (55) n_lintek, А что тут посоветуешь. Имейте в виду подобную ситуацию при анализе базы. Замечу, что экспресс проверка выявляет в учете точки на которые следует обратить внимание. Не обязательно эти точки — ошибки. «Это не баги, это фичи» )).

    Reply
  52. n_lintek

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

    Reply
  53. lexeika

    Отличная вещь, буду усиленно юзать. Спасибо.

    Reply
  54. lexeika

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

    При попытке напечатать отчет выходит: «{Форма.Форма.Форма(162)}: Ошибка при вызове метода контекста (Вывести)

    ВремТабДокумент.Вывести(ЭлементыФормы.ДокументРезультат.Область());

    по причине:

    Несоответствие типов (параметр номер ‘1’)

    »

    1С:Предприятие 8.2 (8.2.15.289)

    «Управление торговлей», редакция 10.3 (10.3.14.5) (http://v8.1c.ru/trade/)

    Copyright (С) ООО «1C», 2003-2011. Все права защищены

    (http://www.1c.ru)

    Reply
  55. gad_d

    (60) lexeika, Спасибо за замечания, исправил.

    Reply
  56. lexeika

    (61) Отлично. Спасибо огромное.

    Reply
  57. ASoft

    За идею спасибо. Плюсую.

    Reply
  58. ShestakovVitaly

    Делал отчет с большим фунционалом для УПП:

    http://infostart.ru/public/119569/

    Reply
  59. Ламия

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

    Reply
  60. electronik

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

    Reply
  61. Iwan777

    Эта обработка только ищет ошибки? Или ещё исправляет их?

    Reply
  62. desblyum

    Огромное спасибо, выручило!

    (67) Iwan777, Предлагает рекомендации по исправлению найденных ошибок

    Reply
  63. n_lintek

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

    Reply
  64. gad_d

    (69) n_lintek,

    А что именно, на ваш взгляд, нужно добавить(убрать)?

    Reply
  65. n_lintek

    Работа с комплектацией — резервирование, но как их вычислить в 1с эти резервы просто (( одни вопросы к разработчикам (( .. нет ни каких маркеров… а там тоже все зависает периодически, контролировать даже с отчетом сложно(( Но вполне возможно, что есть что-то просто я в силу своих неглубоких познаний 1с , не могу их увидеть (( И еще что можно добавить.. и это реально это проверка документов на время их проведение. например чтоб заказ был раньше реализации , ордер позже реализации.. такая мелочь, но приходиться ручками отслуживать(( и сразу добавить в обработку и исправление времени. например дату реализации увеличивать на 5 секунд, относительно времени заказ и подтягивать к этому ордер. Может еще где-то важны такие моменты, я пока ковыряюсь в этом. До остального просто руки не доходят (( все же время и силы ограниченны естественными причинами)

    Reply
  66. Prelude

    Надо бы её доработать, чтобы учитывала корректировки реализаций и поступлений

    Reply
  67. LexSeIch

    Мир этому дому!

    Идея интересная. С какими версиями УТ обработка работает?

    Reply
  68. Prelude

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

    Reply
  69. orehova123

    вот это просто спасение для нового буха или сопровожденца в новом проекте

    Reply
  70. sobeyko2008

    Спасибо огромное автору. Обработка огонь! Если автор еще в теме, проверь пожалуйста корректно ли сравнивает остатки номенклатуры организации с реальными. У меня в отчете по товарам ГТД организации сходится с фактическими, а обработка показывает что нет!

    Reply
  71. gad_d

    (76) sobeyko2008,

    А что именно не сходится? Можно ли подробнее с примерами (можно в личку). Что в вашем случае «реальные» остатки, это остатки по складам? Проверка «Разница в остатках по складам и организациям» сравнивает остатки [товары на складах]+[товары в НТТ]+[товары в рознице] с [остатки по организациям].

    Reply
  72. sobeyko2008

    Вот такая картина получается:

    Судя по вашему отчету фактически на складах товара:Утеплитель автомобильный № 10 (Белое) 6+2=8

    а остатков у организаций тоже 8. Вопрос номер 1 — почему тогда посчитало что это ошибка?

    а теперь воспользуюсь штатными отчетами и вижу что фактического остатка на складах 6+2+1 = 9 (проигнорирован один склад)

    а в отчете ГТД организации вообще 2+11=13

    см. скрины

    Reply
  73. sobeyko2008

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

    Reply
  74. sobeyko2008

    Что скажете?

    Reply
  75. shoy

    А были исправления с учётом документов корректировки поступления и реализации?

    Если нет, то стоит доработать.

    По этой причине, пока, не возьму даже тестить

    Reply
  76. V.Nikonov

    Не плохо бы добавить Анализ Ордерных схем: ТоварыКПередачеСоСкладов; ТоварыКПолучению

    Часто бывают Ордера не соответствующие первичному документу (Перемещение, Реализация, ПоступлениеТМЦ …)

    Reply
  77. floodprog

    При работе по «ордерной схеме» при операции перемещение. Выдает ошибку на проверке «Различие движений по партиям и складам». Так как двигают партии разные документы. Прих ордер на товари и Расх.

    Reply
  78. Strannik99

    Проект заморожен похоже ?

    Reply
  79. Эльвира933

    Добрый день. Скачала Вашу комплексную проверку (у нас конфигурация «Управление торговлей», редакция 10.3 (10.3.18.5)), почему-то при открытии выдает ошибку…

    Reply
  80. gad_d

    (85) Эльвира933, У вас старая версия торговли, и наверно переписанная. Возможно это и приводит к ошибке. А какая именно ошибка?

    Reply
  81. olesha

    Для УТ11, есть такая?

    Reply
  82. gad_d

    (87) Нет, к сожалению.

    Reply
  83. user1249898

    Приветствую!

    Хочу спросить, является ли нормальным наличие ошибки «Отрицательные остатки по заказам поставщикам» при условии, что:

    а) документы «Заказ поставщику» и «Поступление товаров и услуг» в USD (договоры и оплаты тоже, все документы привязаны к заказу поставщику)

    б) цены и количества в документе «Заказ поставщику» и «Поступление товаров и услуг» одинаковы

    в) все курсы на дату самого последнего документа в цепочке загружены

    г) между датами документов «Заказ поставщику» и «Поступление товаров и услуг» несколько месяцев (курсы изменились, но не на порядок)

    Спасибо!

    Reply

Leave a Comment

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