Eserverresult econverterror is an invalid integer 1с ошибка

рег номер 10729556Обновил общепит на версию 3.0.73.54Платформа 8.3.15.1830регламентное задание "Создание целевых документов по чекам общепита" перестало работать из-за лицензии, картинка прикрепленав менеджере лицензий по адресу 127.0.0.1:15201 все ключи работают и активны: 1 аппаратный и 2 программных СЛКПолагаю что из-за обновления вряд ли ключи слетели в менеджере СЛК, скорее всего это случилось ранее, просто работало всё и не было проблем. что предпринять, переустановить чтобы...
 

рег номер

https://portal.1c.ru/software/3554817

10729556

Обновил общепит на версию 3.0.73.54Платформа 8.3.15.1830

регламентное задание «Создание целевых документов по чекам общепита» перестало работать из-за лицензии, картинка прикреплена
в менеджере лицензий по адресу 127.0.0.1:15201 все ключи работают и активны: 1 аппаратный и 2 программных СЛК

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

что предпринять, переустановить чтобы заработало всё?
какая версия СЛК нужна для работы с последними версиями конфигурации?

Прикрепленные файлы

 

Добрый день.

У Вас используется очень старая версия сервера СЛК.
Обновите систему защиты на актуальную :

https://rarus.ru/downloads/2553/

   (

Сервер лицензирования v.2.0.8.360 и Сервер СЛК v.3.0.20.8469

). Обращаем Ваше внимание, что установку системы защиты необходимо проводить при закрытых программах 1С, остановленном сервере 1С .  

 

Виктор Рудаков

Заглянувший

Сообщений: 128
Авторитет:

0

Регистрация: 26.11.2012

#3



0


13.01.2020 10:18:38

Цитата
Кумельская Светлана написал:
Добрый день.

У Вас используется очень старая версия сервера СЛК.
Обновите систему защиты на актуальную :  

https://rarus.ru/downloads/2553/     ( https://rarus.ru/downloads/2553/LS_Setup_2.0.8.360_SLK_3.0.20.8469.exe Сервер лицензирования v.2.0.8.360 и Сервер СЛК v.3.0.20.8469  ). Обращаем Ваше внимание, что установку системы защиты необходимо проводить при закрытых программах 1С, остановленном сервере 1С .  

Переустановку буду выполнять удаленно.
Нужно ли будет аппаратный ключ выдернуть из порта USB перед переустановкой?

 

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

 

Всё как то фантомно работает.

После переустановки всех компонентов СЛК и перезагрузки сервера все ключи были ОК.

Затем при первом входе в 1с стало так как на картинке.

При попытке перейти на использование СЛК получаю сообщение.
Ошибка лицензирования : {ОбщийМодуль.слкМенеджерЗащиты.Модуль(578)}: Ошибка лицензирования (0F2A): (EServerResult.EBasicLicenceNotFound) Не обнаружен «основной» ключ защиты серии 0F2A

Документ «Выпуск продукции» не проводится с таким содержательным сообщением
ru = ‘ Не удалось провести документ’




На второй картинке скрин сервера лицензирования

Что сделать чтобы всё работало корректно???

 

Добавка к предыдущему сообщению
Если в СЛК развернкть программный ключ то там будет такой текст

Восстановлен: 13.01.2020 13:24:51
 

    Здравствуйте!
Виктор, судя по скринам — основной ключ не СЛК, а старой системы защиты (СЗ 1С-Рарус), а дополнительные лицензии — уже СЛК.
В такой комбинации все может быть очень непредсказуемо…
Очень рекомендую:

  • заменить ключ на СЛК
  • обновить и сервер и компоненты СЛК
  • перейти на прямое подключение к СЛК

вот подробнее в ветке об этом —

https://rarus.ru/forum/forum58/topic13245/

Все проблемы должны уйти в этом случае.

 

Виктор Рудаков

Заглянувший

Сообщений: 128
Авторитет:

0

Регистрация: 26.11.2012

#8



0


13.01.2020 14:40:42

Цитата
Алексей Павлов, рук. направления HoReCa написал:
   Здравствуйте!
Виктор, судя по скринам — основной ключ не СЛК, а старой системы защиты (СЗ 1С-Рарус), а дополнительные лицензии — уже СЛК.
В такой комбинации все может быть очень непредсказуемо…
Очень рекомендую:
 заменить ключ на СЛК
 обновить и сервер и компоненты СЛК
 перейти на прямое подключение к СЛК
 вот подробнее в ветке об этом —  https://rarus.ru/forum/forum58/topic13245/

Все проблемы должны уйти в этом случае.

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

https://solutions.1c.ru/catalog/slk

такой подойдет?

 

Алексей Павлов, рук. направления HoReCa

Заглянувший

Сообщений: 49
Авторитет:

0

Регистрация: 17.10.2014

#9



0


13.01.2020 14:55:24

Ключ нужен конечно не просто СЛК (как формат носителя), а именно от 1С:Общепит —

https://solutions.1c.ru/catalog/public-catering/buy

нужной серии… Замена через обслуживающего партнера-франчайзи производится. Как стандартный апгрейд продуктов 1С.
Если такого партнера нет или и у него появятся вопросы — пишите мне напрямую.
 

0 / 0 / 0

Регистрация: 15.01.2015

Сообщений: 9

1

18.01.2015, 15:25. Показов 8874. Ответов 4


помогите пожалуйста разобраться при запуске программы выдает ошибку. ошибка: проект вызвал класс исключения ‘EConvertError’ с сообщением is an invalid integer
сама задача: Создать класс обыкновенная дробь, поля класса — числитель и знаменатель.
Методы класса: сокращение дроби, вывод дроби. В классе предусмотреть
методы перегрузки операций: сложение, вычитание, деление и умножение
дробей.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls;
 
type
 
{ TForm1 }
 
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
type
TPecahan=class
private
x,y:integer;
public
constructor Create;
procedure reduction(nod:Tpecahan);
end;
 
var
Form1: TForm1;
pecahan1, pecahan2, pecahan3, pecahan4, pecahan5, pecahan6:TPecahan;
 
implementation
 
{ TForm1 }
 
constructor TPecahan.Create;
begin
x:=0; y:=0;
inherited Create;
end;
 
operator *(const a,b:TPecahan)r:TPecahan;
begin
r:=TPecahan.Create;
r.x:=a.x*b.x;
r.y:=a.y*b.y;
end;
 
operator /(const a,b:TPecahan)r:TPecahan;
begin
r:=TPecahan.Create;
r.x:=a.x*b.y;
r.y:=a.y*b.x;
end;
 
operator -(const a,b:TPecahan)r:TPecahan;
begin
r:=TPecahan.Create;
if a.y=b.y then
begin
r.x:=a.x-b.x;
r.y:=a.y;
end
else
begin
r.x:=a.x*b.y-b.x*a.y;
r.y:=a.y*b.y;
end;
end;
 
operator +(const a,b:TPecahan)r:TPecahan;
begin
r:=TPecahan.Create;
if a.y=b.y then
begin
r.x:=a.x+b.x;
r.y:=a.y;
end
else
begin
r.x:=a.x*b.y+b.x*a.y;
r.y:=a.y*b.y;
end;
end;
 
procedure TPecahan.reduction(nod:TPecahan);
var a,b:integer;
begin
 
a:=nod.x;
b:=nod.y;
while (a<>b) and ((a>0) or (b>0)) do
begin
if a>b then
a:=a-b
else
b:=b-a
end;
nod.x:=nod.x div a;
nod.y:=nod.y div a;
end;
 
procedure TForm1.button1click(sender:Tobject);
var str1, str2:string;
begin
pecahan1:=TPecahan.Create;
pecahan2:=TPecahan.Create;
pecahan3:=TPecahan.Create;
pecahan4:=TPecahan.Create;
pecahan5:=TPecahan.Create;
pecahan6:=TPecahan.Create;
pecahan1.x:=strtoint(edit1.text);
pecahan1.y:=strtoint(edit2.text);
pecahan2.x:=strtoint(edit3.text);
pecahan2.y:=strtoint(edit4.text);
pecahan3:=pecahan2*pecahan1;
pecahan4:=pecahan1/pecahan2;
pecahan5:=pecahan1-pecahan2;
pecahan6:=pecahan1+pecahan2;
str1:='Умножение '+inttostr(pecahan3.x)+'/'+inttostr(pecahan3.y)+' Деление '+inttostr(pecahan4.x)+'/'+inttostr(pecahan4.y)+ ' Вычитание '+inttostr(pecahan5.x)+'/'+inttostr(pecahan5.y)+' Сложение '+inttostr(pecahan6.x)+'/'+inttostr(pecahan6.y);
label1.caption:=str1;
pecahan1.reduction(pecahan1);
pecahan2.reduction(pecahan2);
pecahan3.reduction(pecahan3);
pecahan4.reduction(pecahan4);
pecahan5.reduction(pecahan5);
pecahan6.reduction(pecahan6);
str2:='Вывод результатов с сокращением. Скоращение дробей '+inttostr(pecahan1.x)+'/'+inttostr(pecahan1.y)+' '+inttostr(pecahan2.x)+'/'+inttostr(pecahan2.y)+' Умножение '+inttostr(pecahan3.x)+'/'+inttostr(pecahan3.y)+' Деление '+inttostr(pecahan4.x)+'/'+inttostr(pecahan4.y)+ ' Вычитание '+inttostr(pecahan5.x)+'/'+inttostr(pecahan5.y)+' Сложение '+inttostr(pecahan6.x)+'/'+inttostr(pecahan6.y);
label2.Caption:=str2;
end;
 
initialization
{$I unit1.lrs}
 
end.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



1С 8 СЛК. Ошибка: (EServerResult.ELicenceNotFound) Ключ защиты серии 6E30 не обнаружены

Описание ошибки:
Ошибка при запуске базы конфигурации 1С: Управление аптечной сетью 1.4:
Установка параметров СЛК
Укажите параметры соединения с сервером СЛК
Внимание! В клиент-серверном режиме сервер СЛК должен быть доступен на стороне сервера 1С:Предприятие
Ошибка:
(EServerResult.ELicenceNotFound) Ключ защиты серии 6E30 не обнаружены

Найденные решения:

Возможно, что на сервере, где размещается СЛК произошли какие-то изменения, о которых не оповестили программиста 1С, поэтому данная проблема возникла при запуске конфигурации 1С: Управление аптечной сетью, редакция 1.4 на базе 1С: Управление торговлей редакции 11.4 и не позволяла вести дальнейшую работу с базой.

Нажатие на изображении увеличит его
1С 8, ошибка установки параметров СЛК при запуске управление аптечной сетью

Надо обратить внимание, что в данном случае в поле «Компьютер» по умолчанию установлено не «localhost», как это устанавливается по умолчанию, а имя сервера, на котором установлена «Консоль сервера СЛК». Ее нужно будет запустить для устранения проблемы. Подробно про Систему лицензирования конфигураций можно прочитать на сайте Рарус.

1С 8, как настроить СЛК, систему лицензирования конфигураций, когда не найдена, не видит, не обнаружена лицензия

В браузере откроется «Сервер СЛК». Видно, что есть неопределенные ключи: S/N is not detected Closed: (EReadError) Stream read error

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

Слева переходим по ссылке «Обновление/восстановление лицензии». И в открывшемся окне нажимаем кнопку «Восстановить/ Обновить автоматически через Интернет» при условии, что интернет на сервере доступен. Если нет, то тогда придется воспользоваться кнопкой «Создать файл» и следовать дальнейшим инструкциям.

Нажатие на изображении увеличит его
1C 8, сервер СЛК, как обновить, восстановить лицензию ключа

В результате успешных операций — Ключ успешно обновлен.

Нажатие на изображении увеличит его
1С 8, ошибка, EServerResult.ELicenceNotFound, Ключ защиты серии 6E30 не обнаружены, как исправить, убрать

Возвращаемся в активное окно базы 1С 8, если не закрывали и нажимаем кнопку «Применить». Если все удачно, то работа в программе станет возможна. Если базу закрыли, то уже при открытии окно с ошибкой (EServerResult.ELicenceNotFound) Ключ защиты серии 6E30 не обнаружены не возникнет и работа будет возможна.

Нажатие на изображении увеличит его
1C 8, как устранить, убрать, избавиться, исправить, ошибка, EServerResult.ELicenceNotFound, Ключ защиты серии 6E30 не обнаружены

Оцените, помогло ли Вам предоставленное описание решения ошибки?




© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.

11-10-2021

Журавлев А.С.
(Сайт azhur-c.ru)

Ошибка СЛК в момент открытия базы

Я
   sqr4

15.05.18 — 17:31

Ошибка создания менеджера объектов СЛК!: {ОбщийМодуль.СЗК_МодульЗащиты.Модуль(287)}: Ошибка при вызове метода контекста (Подключить): Ошибка подключения внешних метаданных: Ошибка при выполнении файловой операции  ‘e1cib/tempstorage/a7dc2b72-1a6a-4c7b-a089-4631b53432b5’: Неверный формат хранилища данных ‘e1cib/tempstorage/a7dc2b72-1a6a-4c7b-a089-4631b53432b5’

Кэш чистил, чек делал. ЧТо еще может быть?

   Гад

1 — 15.05.18 — 17:38

зеркала протирал?

   Масянька

2 — 15.05.18 — 17:39

(0) После чего вылезло?

   sqr4

3 — 15.05.18 — 17:41

(2) а хер его знает, вроде ничего не происходило

   Масянька

4 — 15.05.18 — 17:41

(3) Не обновляли? Чей ключ?

   sqr4

5 — 15.05.18 — 17:43

Вроде нет, конфа 1С:Учет в управляющих компаниях ЖКХ, ТСЖ и ЖСК, редакция 3.0 (3.0.60.2)

   Sanek_GAL

6 — 15.05.18 — 17:43

(0) Защита от опасных действий у пользователя отключена?

   Масянька

7 — 15.05.18 — 17:46

(5) Кэш, удалить-добавить…

   sqr4

8 — 15.05.18 — 17:49

(6) Отключил не помогло

(7) КЭШ удалял. БАзу и списка тоже несколько раз удалял / добавлял

   Масянька

9 — 15.05.18 — 17:51

(8) Очень похоже, что обновили платформу. А ключ не арбайтэн под новую платформу. Стучать разрабу… По разным местам…

   sqr4

10 — 15.05.18 — 17:52

1С:Предприятие 8.3 (8.3.10.2667)

   sqr4

11 — 15.05.18 — 17:52

Вроде не последняя

   Масянька

12 — 15.05.18 — 17:53

+ (9) Как вариант — попробуй на более старой платформе.

   Масянька

13 — 15.05.18 — 17:53

(11) А с ключом все нормально? Может тупо ключ накрылся?

   sqr4

14 — 15.05.18 — 17:54

Ну в СЛК ключ видит все без ошибок.

   Масянька

15 — 15.05.18 — 17:55

(14) В конфигуратор пускает?

   sqr4

16 — 15.05.18 — 17:55

Платформа только одна на компе, значит не должны были обновлять.

   sqr4

17 — 15.05.18 — 17:55

В Конфигуратор пускает

   xraf

18 — 15.05.18 — 17:56

Саму службу слк перепнули?

   sqr4

19 — 15.05.18 — 17:56

(18) ДА комп перезагружали

   Масянька

20 — 15.05.18 — 17:57

(17) Копию и чеком попробуй — ошибки есть?

   sqr4

21 — 15.05.18 — 17:58

(20) ошибок нет

   sqr4

22 — 15.05.18 — 18:01

Пытаюсь запустить другие базы демо базу, вообще вылетает.

   sqr4

23 — 15.05.18 — 18:03

ТУт наверно либо прав в ОС не хватает либо платформа буду чекать

   sqr4

24 — 16.05.18 — 10:07

При запуске 1с под админскими правами, ошибка исчезает. Как можно определить на что не хватает прав?

   sqr4

25 — 16.05.18 — 10:55

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

   lodger

26 — 16.05.18 — 10:59

(25) можно банально открыть монитор ресурсов и смотреть куда система или 1с пишут при запуске. это если прям в лоб и сразу.

   Масянька

27 — 16.05.18 — 11:05

(25) Большой не факт, что на диск.

   sqr4

28 — 30.05.18 — 14:34

Апну тему. Не в правах дело, дал пользователю админские права, результат тот же. Дело в кеше каком то похоже, вроде все чистил у кого есть идеи?

   sqr4

29 — 30.05.18 — 14:38

А если жму запустить от имени администратора, но все норм, что то я запутался

   ildary

30 — 30.05.18 — 15:29

(29) я бы запустил что-то вроде filemon.exe и regmon.exe — и посмотрел все отказы, после чего думал, почему прав не хватает.

  

Сияющий в темноте

31 — 30.05.18 — 21:10

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

Можно просто попробовать ее отключить.

Я пытаюсь создать программу, которая принимает вводимые пользователем данные и проверяет, действительна ли она как дата (2000-2099 годы). когда я проверял код на ошибку, я дважды подряд вводил ввод в качестве ввода, при первом вводе ошибки не возникало, но во второй раз консоль мигает сообщением и вылетает. Я сделал снимок экрана, когда он разбился, и это ошибка, которую он показал

An unhandled exception occured at $0040CDE1
EConvertError : "" is an invalid integer

Я предполагаю, что ошибка была вызвана одним из моих StrToInt из-за EConvertError, но мне неясно, почему он выбрасывает его только при втором прохождении, а не при первом. Я подозреваю, что ошибка возникает в любой строке: 85, 98, 111 или 195.

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

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

program DateVerifierAssignment;

uses crt, sysutils;

var
    userInputArray: array[0..7] of string;  
    len, i, day, month, year: integer;
    date, userInput, stringDay, stringMonth, stringYear: string;
    errorCatch: boolean;

//DECLARING FUNCTIONS & PROCEDURES
procedure TitleScreen();
    begin
    //prints a coloured wall of text to give information like name and instructions
    WriteLn(' o-------------------------o');
    Write(' | ');TextColor(White);Write('Date Validation Program');TextColor(Cyan);WriteLn(' |');
    WriteLn(' o-------------------------o');
    WriteLn();
    WriteLn(' o-------------------------o');
    Write(' |      ');TextColor(White);Write('Instructions');TextColor(Cyan);WriteLn('       |');
    WriteLn(' o-------------------------o');
    Write(' |   ');TextColor(White);Write('Enter a date and the');TextColor(Cyan);WriteLn('  |');
    Write(' | ');TextColor(White);Write('program will verify it');TextColor(Cyan);WriteLn('  |');
    Write(' |  ');TextColor(White);Write('and convert it to its');TextColor(Cyan);WriteLn('  |');
    Write(' |        ');TextColor(White);Write('long form');TextColor(Cyan);WriteLn('        |');
    WriteLn(' o-------------------------o');
    WriteLn();
    TextColor(White);
    Write('   press any key to begin');
    
    //waits for user input then clears the screen and returns the text color to white
    ReadKey();
    ClrScr;
    end;
         
       
function DateVerification(var userInput: string): boolean;
    var
        errorLimit : boolean;
        bounds: integer;
    begin
    errorLimit := True;
    //stores the length of the string as a variable
    len := Length(userInput);
    
    //checks to see if entry is 8 chracters long and displays an error message and returns user to input screen if it doesn't fit
    if (len <> 8) and (errorLimit = True) then
        begin
        ClrScr();
        TextColor(Red);
        WriteLn('input was not the right length (8 characters)');
        TextColor(White);
        Write('make sure date fits format ');
        TextColor(LightGreen);
        WriteLn('dd/mm/yy');
        TextColor(White);
        Readkey();
        ClrScr();
        errorLimit := false;
        Dateverification := false;
        end;
    
    //spits each character into its own spot in an array
    for i := 1 to len do
          userInputArray[i - 1] := userInput[i];
            
    //tests if every slot in the array where a slash should be is a slash
    for i := 0 to len-1 do
        begin
        if (userInputArray[2] <> '/') or (userInputArray[5] <> '/') and (errorLimit = true) then
            begin
            ClrScr();
            TextColor(Red);
            WriteLn('input did not have slashes in correct locations ');
            TextColor(LightGreen);
            WriteLn('dd/mm/yy');
            TextColor(White);
            Readkey();
            ClrScr();
            errorLimit := false;
            Dateverification := false;
            end;
        end;
        
    year := ((StrToInt(userInputArray[6]))*10) + StrToInt(userInputArray[7]);
    if (year < 1) or (year > 99) and (errorLimit = true) then
        begin
        ClrScr();
        TextColor(Red);
        WriteLn('year was not from 0 to 99');
        TextColor(White);
        Readkey();
        ClrScr();
        errorLimit := false;
        Dateverification := false;
        end;
        
    month := ((StrToInt(userInputArray[3]))*10) + StrToInt(userInputArray[4]);
        if (month < 1) or (month > 12) and (errorLimit = true) then
        begin
        ClrScr();
        TextColor(Red);
        WriteLn('month was not from 1 to 12');
        TextColor(White);
        Readkey();
        ClrScr();
        errorLimit := false;
        Dateverification := false;
        end;
    
    day :=  ((StrToInt(userInputArray[0]))*10) + StrToInt(userInputArray[1]);
    if (month = 4) or (month = 6) or (month = 9) or (month = 11) then
        bounds := 30;
    
    if (month = 2) then
        begin
        if (IsLeapYear(year) = true) then
            bounds := 29
        else
            bounds := 28;
        end
    else
        bounds := 31;    
    
    if (day < 1) or (day > bounds) and (errorLimit = true) then
            begin
            ClrScr();
            TextColor(Red);
            WriteLn('day was not from 1 to days in month');
            TextColor(White);
            Readkey();
            ClrScr();
            errorLimit := false;
            Dateverification := false;
            end;
    
    if (errorLimit = true) then  
        DateVerification := True;   
    end;    


function IsLeapYear(var year: integer): boolean;
//simple function to determine if a year is a leap year on the gregorian calender
    begin
        if (year mod 4) = 0 then
            if (year mod 100 <> 0) then
                if (year mod 400 = 0) then
                    IsLeapYear := true
                else
                    IsLeapYear := false
            else
                IsLeapyear := false
        else
            IsLeapyear := false    
    end;


procedure DateToAlpha(var userInput: string);
    begin
    
    end;
    

//MAIN PROGRAM
begin
    //preparing for while loop later in code and changes text colour to cyan
    errorCatch := true;
    TextColor(Cyan);
    
    //Displays a title screen and instruction about how to use(stored in a procedure to help with readability)
    TitleScreen();
     
    //begins a loop so that if an error is to occur the program can easily ask for a new date and try again
    while (errorCatch = true) do
        begin
        //sets error catch to 0 so that if there a no errors the program will not loop
        errorCatch := false;
        
        //displays information on how to input a date as well as an example with different colours for better readability
        Write('Enter a date in the format');TextColor(LightGreen); WriteLn(' dd/mm/yy');TextColor(White);
        Write('e.g. ');TextColor(LightGreen);WriteLn(' 09/07/20'#13#10);TextColor(White);
        
        //takes date user inputs and stores it
        ReadLn(userInput); 
        
        //calls the date verification function to see if the date is valid        
        //(refer to dateVerification at the top of the program for more info and comments)
        if (DateVerification(userInput) = false) then
            errorCatch := true;
            
        len := Length(userInput);
        for i := 1 to len do
          userInputArray[i - 1] := userInput[i];
        
        year := ((StrToInt(userInputArray[6]))*10) + StrToInt(userInputArray[7]);
        readKey();
        end;   
end.

1 ответ

Лучший ответ

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

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

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

Я намеренно пропустил петли или приукрашивания кода, потому что для правильного первого важна ясная и лаконичная кодирование этапов обработки и проверки. Если вы хотите использовать петли, хорошо, но так, как вы использовали например errorCatch, держу пари, что если вы вернетесь к своему коду через 6 месяцев, вы не вспомните, как это должно работать. Для этой задачи вам не нужны какие-либо сложные флаги или циклы — пользователь просто должен иметь возможность ввести ровно восемь символов (за которыми следует [Enter]), и тогда код скажет, действительно ли это или нет.

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

userInputArray: array[0..7] of string;

Просто неправильно. Если вам нужен массив из определенного количества символов , хорошо, но это просто без нужды усложняют обработку и обработку того, что вводит пользователь. Это далеко проще и, следовательно, менее подвержено ошибкам принимать одну строку из 8 символов и просто смирись с этим. Но в любом случае, чтобы разрешить строку включать символы / после цифр дня и месяца, длина строкиg должна быть 10, а не восемь, чтобы учесть эти цифры и четыре года.

program DateVerification;

uses
  SysUtils;

var
  sUserInput,
  sDay,
  sMonth,
  sYear : String;
  iDay,
  iMonth,
  iYear,
  iDays: Integer;
  bIsLeapYear : Boolean;

function DaysInMonth(iMonth, iYear : Integer) : Integer;
begin
  Result := -1; //  you supply the code for this taking into account leap year for February
end;

begin
  writeln('Please enter a date between 01/01/2000 and 31/12/2099 in the format shown');
  readln(sUserInput);
  if Length(sUserInput) <> 10 then begin
    writeln('Input is wrong length.');
    Halt;
  end;
  if (sUserInput[3] <> '/') or (sUserInput[6] <> '/') then begin
    writeln('Input is incorrectly delimited.');
    Halt;
  end;

  sDay := Copy(sUserInput, 1, 2);
  sMonth := Copy(sUserInput, 4, 2);
  sYear := Copy(sUserInput, 7, 4);

  iYear := StrToInt(sYear);
  if (iYear < 2000) or (iYear > 2099) then begin
    writeln('Invalid year : ', sYear);
    Halt;
  end;

  bIsLeapYear := IsLeapYear(iYear); //  you supply the code for IsLeapYear

  iMonth := StrToInt(sMonth);
  if (iMonth < 1) or (iMonth > 12) then begin
    writeln('Invalid month : ', sMonth);
    Halt;
  end;

  iDay := StrToInt(sDay);

  if (iDay < 1) or (iDay > DaysInMonth(iMonth, iYear)) then begin
    //  You need to supply the DaysInMoth function, which of course
    //  needs to account for February in a leap year
    writeln('Invalid day of month: ', sMonth);
    Halt;
  end;

  writeln(sUserInput, ' is a valid date.');
  readln;

end.


3

MartynA
21 Авг 2020 в 20:42

Понравилась статья? Поделить с друзьями:
  • Eserverresult eaccessviolation access violation 1с ошибка
  • Esep crypto extension ошибка
  • Esea error 121
  • Ether1 fcs error on link mikrotik
  • Eth1 error while getting interface flags no such device