Ожидается символ ‘)’ |
Я |
27.10.10 — 09:19
Помогите исправить ошибку!
при выполнении:
Макет.Параметры.ИспытательныйСрокСтрокой = ?(НЕ ЗначениеЗаполнено(Выборка.ИспытательныйСрок),»Без испытательного срока», ВЫБРАТЬ ДобавитьКДате(Выборка.ДатаПриема, «МЕСЯЦ», Выборка.ИспытательныйСрок));
выдает ошибку:
{ОбщийМодуль.СотрудникиОрганизацийПереопределяемый.Модуль(283,135)}: Ожидается символ ‘)’
Макет.Параметры.ИспытательныйСрокСтрокой = ?(НЕ ЗначениеЗаполнено(Выборка.ИспытательныйСрок),»Без испытательного срока», ВЫБРАТЬ<<?>> ДобавитьКДате(Выборка.ДатаПриема, «МЕСЯЦ», Выборка.ИспытательныйСрок)); (Проверка: Толстый клиент (обычное приложение))
1 — 27.10.10 — 09:20
«ВЫБРАТЬ ДобавитьКДате(Выборка.ДатаПриема, «МЕСЯЦ», Выборка.ИспытательныйСрок)»
2 — 27.10.10 — 09:22
(0) посчитай скобки — количество открывающихся должно быть равно количеству закрывающихся
3 — 27.10.10 — 09:25
(2) да там вообще чушь какая-то…
4 — 27.10.10 — 09:25
(0) А что за оператор такой «ВЫБРАТЬ» и что за функция «ДобавитьКДате»? Насколько я знаю это ключевое слово запроса, но тут оно явно используется вне запроса. Так что же должна эта строка вообще делать?
5 — 27.10.10 — 09:26
(3) +1
6 — 27.10.10 — 09:42
по заданию нужно вывести дату окончания испытательного срока. Делается это так: к дате приема прибавляется испытательный срок в месяцах.
А функцию ВЫБРАТЬ ДобавитьКДате я нашел в справке
7 — 27.10.10 — 09:46
вот пример:
ДОБАВИТЬКДАТЕ(<Исходная дата>, СЕКУНДА | МИНУТА | ЧАС | ДЕНЬ | НЕДЕЛЯ | МЕСЯЦ | КВАРТАЛ | ГОД | ДЕКАДА | ПОЛУГОДИЕ, <Величина увеличения>)
Функция предназначена для прибавления к дате некоторой величины.
Примеры:
ВЫБРАТЬ ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2002, 10, 12, 10, 15, 34), МЕСЯЦ, 1)
Результат:
12.11.2002 10:15:34
8 — 27.10.10 — 09:46
(6) вообще-то 2 языка существуют в 1с: встроенный язык и язык запросов. Твоя программа на встроенном языке, а «ВЫБРАТЬ» и «ДобавитьКДате» — это из языка запросов.
9 — 27.10.10 — 09:47
Тогда уж так надо делать:
Макет.Параметры.ИспытательныйСрокСтрокой = ?(НЕ ЗначениеЗаполнено(Выборка.ИспытательныйСрок),»Без испытательного срока», ДобавитьМесяц(Выборка.ДатаПриема, Выборка.ИспытательныйСрок));
ВЫБРАТЬ — используется в запросах, ДобавитьКДате — тоже в запросах!
Читай внимательно Справку!!!
10 — 27.10.10 — 09:49
(0) руки прочь от Конфигуратора!!! Вот так вот юзерам админский пароль давать…
11 — 27.10.10 — 09:49
(10) а теперь поведай, как ты начинал…
12 — 27.10.10 — 09:51
начинал в институте программить по специальности, потом решил податься в 1С, кодить начинал с большой книги Радченко, а не на базе клиента…
13 — 27.10.10 — 09:51
(6) Это запросом…
То есть если оч хочется то:
Запрос = новый Запрос();
Запрос.Текст =
«ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&Дата, МЕСЯЦ, 1) как НоваяДата»
Запрос.УстановитьПараметр(«Дата»,Дата);
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
МояДата = Выборка.НоваяДата;
Но это как то по извращенски =)
А надо
ДобавитьМесяц (AddMonth)
Синтаксис:
ДобавитьМесяц(<Дата>, <Число месяцев>)
Параметры:
<Дата> (обязательный)
Тип: Дата. Исходная дата.
<Число месяцев> (обязательный)
Тип: Число. Количество месяцев, которое необходимо добавить к исходной дате. Если принимает отрицательное значение, то число месяцев вычитается.
Возвращаемое значение:
Тип: Дата. Дата, полученная в результате добавления.
Описание:
Добавляет (или вычитает) к указанной дате заданное число месяцев.
Пример:
МояДата = ДобавитьМесяц(Дата,1);
14 — 27.10.10 — 09:53
(12) а с чего ты взял, что автор мучает базу клиента?
15 — 27.10.10 — 09:53
спасибо получилось))
а можно сделать чтобы к дате приема прибавить месяцы и вычесть 1 день?
16 — 27.10.10 — 09:53
(12) Двоечник… =)
Давай я поведаю=)
Я закончил техникум на программиста, и работал разноробочим, потом попал в франч и развозил «Конслатинг стандарт», а потом ИТС, а потом не было прога а сделать надо было , вот меня и послали к клиенту =)
17 — 27.10.10 — 09:54
(15)
МинусДень=ТоЧтоПолучилось-86400;
18 — 27.10.10 — 09:54
МояДата = ДобавитьМесяц(Дата,1) — 24*60*60
(24*60*60) — это день в секундах
19 — 27.10.10 — 09:56
(17) Мда… а потом гадай что за магическое число =)
Кстати можно ещё;
МинусДень = НачалоДня(ТоЧтоПолучилось) -1;
Будет -1 день а время 23:59:59
20 — 27.10.10 — 09:56
(16)Ы =) а теперь история ТС
Работаю менеджером, бухгалтер попросила сделать кнопку, потому что я один в фирме в компах разбираюсь. Зашел в яндекс. Попал сюда. Интересное это дело 1С… Щас мне код скинут, если заработает, пойду в программисты 
21 — 27.10.10 — 09:56
я так сделал:
Макет.Параметры.ИспытательныйСрокСтрокой = ?(НЕ ЗначениеЗаполнено(Выборка.ИспытательныйСрок),»Без испытательного срока», ДобавитьМесяц(Выборка.ДатаПриема, Выборка.ИспытательныйСрок)-1);
это правильно?
22 — 27.10.10 — 09:57
(19)Не надо гадать.Надо запомнить число как отче наш и все:)..
23 — 27.10.10 — 10:01
(21) Макет.Параметры.ИспытательныйСрокСтрокой = ?(НЕ ЗначениеЗаполнено(Выборка.ИспытательныйСрок),»Без испытательного срока», ДобавитьМесяц(Выборка.ДатаПриема, НачалоДня(Выборка.ИспытательныйСрок)-1)); — Так будет правильно, а ты просто вычел одну секунду…
ivan-black
24 — 27.10.10 — 10:04
(23) Сорри, не так…
Вот так надо:
Макет.Параметры.ИспытательныйСрокСтрокой = ?(НЕ ЗначениеЗаполнено(Выборка.ИспытательныйСрок),»Без испытательного срока», ДобавитьМесяц(НачалоДня(Выборка.ДатаПриема)-1, Выборка.ИспытательныйСрок));
У тебя ж испытальный срок в месяцах…
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 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 |
PROGRAM SIMPLEX; USES CRT; LABEL ZN,ST,ELL,_END, POVZNAC; TYPE MAS=ARRAY[1..30] OF REAL; MASB=ARRAY[1..30] OF STRING[3]; MASX=ARRAY[1..30,1..30] OF REAL; VAR Fo,FunctPr,B,H,Hnew,C,Cnew,CPr,CPrnew,FX:MAS; X,Xnew:MASX; BS,Bvsp,ZNAC:MASB; MIN,I1,I,J,Kx,Ky,Kit,NachKell,NachY,K_st:INTEGER; PriznacY,KLstr,KLst,ErrCode,Dop_X:INTEGER; P,P1,Mo,F0,Epsilon,Z:REAL; VSP,S,PrGomory:STRING; F:TEXT; DPx,DPy,Fm,Kell,Kstr:INTEGER; { Функция создания индексов } FUNCTION SIMVB(V:INTEGER;S:CHAR):STRING; VAR M,Z:STRING; BEGIN STR(V,M); Z:=S+M; SIMVB:=Z; END; { Процедура записи данных в файл } PROCEDURE SAVE(X1:REAL;K:STRING;Mstr:INTEGER); VAR V:STRING; BEGIN ASSIGN(F,'c:SIMPLEX.dat'); APPEND(F); CASE Mstr OF 0:WRITELN(F,''); 1:BEGIN IF K=' ' THEN STR(X1:1:0,V) ELSE STR(X1:10:4,V); WRITE(F,V); WRITE(F,' '); END; 2:WRITE(F,K); 3:WRITELN(F,K); END; CLOSE(F); END; { Определение дополнительных переменных } PROCEDURE DOP_PER; BEGIN IF ZNAC[I1]='=' THEN BEGIN Kell:=Kell+1;Bvsp[Kell]:=SIMVB(DPy,'Y'); DPy:=DPy+1; Xnew[I1,Kell]:=1; IF Fm=1 THEN FX[Kell]:=-1 ELSE FX[Kell]:=1; FunctPr[Kell]:=1; FOR I:=1 TO Kstr DO IF I<>I1 THEN Xnew[I,Kell]:=0; END; IF ZNAC[I1]='>=' THEN BEGIN Kell:=Kell+1;Bvsp[Kell]:=SIMVB(DPx,'X'); DPx:=DPx+1;Dop_X:=Dop_X+1; Xnew[I1,Kell]:=-1;FX[Kell]:=0; FOR I:=1 TO Kstr DO IF I<>I1 THEN Xnew[I,Kell]:=0; Kell:=Kell+1;Bvsp[Kell]:=SIMVB(DPy,'Y'); DPy:=DPy+1; Xnew[I1,Kell]:=1; IF Fm=1 THEN FX[Kell]:=-1 ELSE FX[Kell]:=1; FunctPr[Kell]:=1; FOR I:=1 TO Kstr DO IF I<>I1 THEN Xnew[I,Kell]:=0; END; IF ZNAC[I1]='<=' THEN BEGIN Kell:=Kell+1;Bvsp[Kell]:=SIMVB(DPx,'X'); DPx:=DPx+1;Dop_X:=Dop_X+1; Xnew[I1,Kell]:=1;FX[Kell]:=0; FOR I:=1 TO Kstr DO IF I<>I1 THEN Xnew[I,Kell]:=0; END; END; { Процедура сокращения Y } PROCEDURE SOKR; VAR P:INTEGER; BEGIN Kell:=Kell-1; FOR P:=NachKell+DOP_X TO Kell DO IF Bvsp[P]=BS[KLstr] THEN BEGIN FOR J:=P TO Kell DO Bvsp[J]:=Bvsp[J+1]; FunctPr[J]:=FunctPr[J+1]; Fx[J]:=Fx[J+1]; FOR I:=1 TO Kstr DO Xnew[I,J]:=Xnew[I,J+1] END; END; { Подготовка к вводу данных } NachKell:=Kell; DPx:=Kell+1;DPy:=1; Kx:=1;Ky:=4; Epsilon:=0.00001; CLRSCR; WRITELN('Введите систему уравнений:'); WRITELN('(коэффициенты при всех Х,знак и свободные члены)'); { Ввод данных } FOR I:=1 TO Kstr DO BEGIN POVZNAC: WRITELN('Введите ',I,'-е уравнение:'); { Ввод коэффициентов при X в I-том уравнении } FOR J:=1 TO Kell DO BEGIN GOTOXY(Kx,Ky);Kx:=Kx+6; READLN(Xnew[I,J]); END; { Ввод знака в I-том уравнении } Kx:=Kx+6;GOTOXY(Kx,Ky);READLN(ZNAC[I]); {Проверка введенного знака на правильность} IF (ZNAC[I]<>'>=') AND (ZNAC[I]<>'=') AND (ZNAC[I]<>'<=') THEN BEGIN WRITELN('Неправильно задан знак'); Ky:=Ky+3;Kx:=1; GOTO POVZNAC; END; END; IF (ZNAC[I]='=') OR (ZNAC[I]='>=') THEN PriznacY:=1; { Ввод свободного члена в I-том уравнении } Kx:=Kx+6;GOTOXY(Kx,Ky);READ(B[I]); Kx:=1; Ky:=Ky+2; END; WRITELN('Введите коэффициенты при Х в целевой функции:'); { Ввод коэффициентов при Х в целевой функции } FOR J:=1 TO Kell DO BEGIN GOTOXY(Kx,Ky);Kx:=Kx+6; READ(FX[J]); END; { Подготовка индексации X } FOR J:=1 TO Kell DO Bvsp[J]:=SIMVB(J,'X'); { Определение дополнительных переменных } FOR I1:=1 TO Kstr DO DOP_PER; { Замена оптимальной функции с MAX на MIN при наличии в базисе Y-ков если идет исследование на минимум } MIN:=0; IF (Fm=1) AND (PriznacY=1) THEN BEGIN MIN:=Fm;Fm:=2; FOR J:=1 TO Kell DO FX[J]:=-FX[J]; END; { Сортировка дополнительных переменных по индексу } FOR I1:=NachKell+1 TO Kell DO FOR J:=I1+1 TO Kell DO IF Bvsp[J]<Bvsp[I1] THEN BEGIN VSP:=Bvsp[J];Bvsp[J]:=Bvsp[I1];Bvsp[I1]:=VSP; P:=FX[J];FX[J]:=FX[I1];FX[I1]:=P; P:=FunctPr[J];FunctPr[J]:=FunctPr[I1];FunctPr[I1]:=P; FOR I:=1 TO Kstr DO BEGIN P:=Xnew[I,I1];Xnew[I,I1]:=Xnew[I,J];Xnew[I,J]:=P; END; END; Kit:=1; CLRSCR; { Подготовка столбцов C,B,H } FOR I:=1 TO Kstr DO BEGIN Hnew[I]:=B[I]; FOR J:=NachKell+1 TO Kell DO IF Xnew[I,J]=1 THEN BEGIN BS[I]:=Bvsp[J]; Cnew[I]:=FX[J]; CPrnew[I]:=FunctPr[J]; END; END; NACH:; REPEAT PriznacY:=0; { Передача данных в исходные переменные c обнулением чисел, по модулю меньших чем 0.00001 } FOR I:=1 TO Kstr DO BEGIN IF INT(10000*Hnew[I])=0 THEN H[I]:=+0 ELSE H[I]:=Hnew[I]; C[I]:=Cnew[I]; CPr[I]:=CPrnew[I]; IF BS[I][1]='Y' THEN PriznacY:=1; FOR J:=1 TO Kell DO IF INT(10000*Xnew[I,J])=0 THEN X[I,J]:=+0 ELSE X[I,J]:=Xnew[I,J]; END; { Обнуление и вывод индексации элементов индексной строки } SAVE(0,' C Б H ',2); FOR J:=1 TO Kell DO BEGIN SAVE(0,Bvsp[J],2); P1:=LENGTH(Bvsp[J]); IF P1=2 THEN SAVE(0,' ',2); SAVE(0,' ',2); Fo[J]:=0; END; SAVE(0,'',0); { Вывод Симплекс-таблицы } P1:=0; FOR I:=1 TO Kstr DO BEGIN IF CPr[I]=1 THEN IF C[I]<0 THEN SAVE(0,'-M ',2) ELSE SAVE(0,'+M ',2) ELSE SAVE(C[I],'',1); SAVE(0,BS[I],2); P1:=LENGTH(BS[I]); IF P1=2 THEN SAVE(0,' ',2); SAVE(0,' ',2);SAVE(H[I],'',1); FOR J:=1 TO Kell DO SAVE(X[I,J],'',1); SAVE(0,'',0); END; { Вычисление значений в индексной строке } F0:=0; FOR J:=1 TO Kell DO Fo[J]:=0; FOR I1:=1 TO Kstr DO BEGIN IF PriznacY=1 THEN IF BS[I1][1]='Y' THEN BEGIN F0:=F0+H[I1]; FOR J:=1 TO Kell DO Fo[J]:=Fo[J]+X[I1,J]; END; IF PriznacY=0 THEN BEGIN F0:=F0+H[I1]*C[I1]; FOR J:=1 TO Kell DO Fo[J]:=Fo[J]+C[I1]*X[I1,J]; END; FOR J:=1 TO Kell DO IF Bvsp[J][1]='Y' THEN Fo[J]:=+0 ELSE IF ABS(Fo[J])<Epsilon THEN Fo[J]:=+0; END; { Вывод значений целевой функции } SAVE(0,' ',2);SAVE(F0,'',1); FOR J:=1 TO Kell DO BEGIN IF PriznacY<>1 THEN Fo[J]:=Fo[J]-FX[J]; SAVE(Fo[J],'',1); END; SAVE(0,'',0); { Проверка условия оптимальности } P:=0; FOR J:=1 TO Kell DO IF Fm=1 THEN IF Fo[J]<-Epsilon THEN BEGIN P:=1; CONTINUE; END ELSE ELSE IF Fo[J]>Epsilon THEN BEGIN P:=1; CONTINUE; END; IF P<>1 THEN BEGIN SAVE(0,'В ',2);SAVE(Kit,' ',1); SAVE(0,'-й итерации было получено оптимальное решение',3); SAVE(0,'т.к. при исследовании на ',2); IF Fm=1 THEN SAVE(0,'МАКСИМУМ индексная строка не содержит отицательных элементов.',3) ELSE SAVE(0,'МИНИМУМ индексная строка не содержит положительных элементов.',3); FOR I1:=1 TO Kstr DO IF BS[I1][1]='Y' THEN BEGIN SAVE(0,'Но т.к. из базиса не выведены все Y, то ',3); SAVE(0,'можно сделать вывод, что РЕШЕНИЙ НЕТ',3); HALT; END; { Округление значений массива Х до целого числа, если разность округленного и обычного значений по модулю меньше чем 0.00001 } FOR I:=1 TO Kstr DO BEGIN Z:=ROUND(H[I]); IF ABS(Z-H[I])<Epsilon THEN H[I]:=ROUND(H[I]); FOR J:=1 TO Kell DO BEGIN IF X[I,J]<0 THEN Z:=ROUND(X[I,J]); IF ABS(Z-X[I,J])<Epsilon THEN X[I,J]:=ROUND(X[I,J]); END; END; { Проверка целочисленности решения } P1:=0; FOR I:=1 TO Kstr DO BEGIN IF INT(10000*FRAC(H[I]))<>0 THEN BEGIN P1:=1;CONTINUE; END; FOR J:=1 TO Kell DO IF BS[I]=Bvsp[J] THEN FOR I1:=1 TO Kstr DO IF ABS(FRAC(X[I1,J]))>=Epsilon THEN BEGIN P1:=1;CONTINUE; END; END; { Составление новой базисной строки для целочисленного решения } IF (PrGomory='Y') AND (P1=1) THEN BEGIN GOMORY; NachKell:=Kell; I1:=Kstr;DPy:=1; DOP_PER; BS[Kstr]:=Bvsp[Kell]; CPrnew[Kstr]:=FunctPr[Kell]; Cnew[Kstr]:=FX[Kell]; GOTO NACH; END; IF P1=0 THEN SAVE(0,'Данное решение является целочисленым.',3); SAVE(0,'При этом:',3); IF MIN=1 THEN BEGIN F0:=-F0;Fm:=MIN; END; IF Fm=1 THEN SAVE(0,'Fmax=',2) ELSE SAVE(0,'Fmin=',2); SAVE(F0,'',1); SAVE(0,'',0); FOR I1:=1 TO Kstr DO BEGIN SAVE(0,' ',2); SAVE(0,BS[I1],2);SAVE(0,'=',2); SAVE(H[I1],'',1); SAVE(0,'',0); END; HALT; END; { Нахождение ключевого столбца } KLst:=1;Mo:=0; FOR J:=1 TO Kell DO IF Fm=1 THEN IF Fo[J]<Mo THEN Mo:=Fo[J]; FOR J:=1 TO Kell DO BEGIN IF Bvsp[J][1]<>'Y' THEN IF Fm=1 THEN BEGIN IF Fo[J]<0 THEN IF Fo[J]>=Mo THEN BEGIN Mo:=Fo[J]; KLst:=J; END; END ELSE BEGIN IF Fo[J]>0 THEN IF Fo[J]>=Mo THEN BEGIN Mo:=Fo[J]; KLst:=J; END; END; END; SAVE(0,'Ключевой столбец: ',2);SAVE(KLst,' ',1); { Нахождение ключевой строки } P1:=0;K_st:=0; FOR J:=1 TO Kell DO IF ABS(Mo-Fo[J])<Epsilon THEN BEGIN K_st:=K_st+1; FOR I:=1 TO Kstr DO IF X[I,KLst]>0 THEN BEGIN B[I]:=H[I]/X[I,KLst]; P:=B[I];KLstr:=I; END ELSE BEGIN B[I]:=-1; P1:=P1+1; END; END; IF P1=Kstr*K_st THEN BEGIN SAVE(0,'',0); SAVE(0,'РЕШЕНИЙ НЕТ т.к. невозможно определить ключевую строку',3); HALT; END; P1:=0; FOR J:=1 TO Kell DO IF ABS(Mo-Fo[J])<Epsilon THEN FOR I:=1 TO Kstr DO IF B[I]>=0 THEN BEGIN IF B[I]<P THEN IF Bvsp[KLst]<>BS[I] THEN BEGIN P:=B[I]; KLstr:=I; END; IF INT(10000*B[I])=INT(10000*P) THEN IF (BS[I][1]='Y') AND (BS[KLstr][1]='X') THEN IF Bvsp[KLst]<>BS[I] THEN BEGIN P:=B[I]; KLstr:=I; END; END; SAVE(0,'Ключевая строка: ',2);SAVE(KLstr,' ',1); SAVE(0,'',0); FOR I:=1 TO Kstr DO IF Bvsp[KLst]=BS[I] THEN BEGIN SAVE(0,'РЕШЕНИЙ НЕТ т.к. в базисном столбце уже есть ',3); SAVE(0,'такая переменная.',3); HALT; END; { Вызов процедуры сокращения Y } IF CPr[KLstr]=1 THEN SOKR; { Построение следующей Симплекс-таблицы } BS[KLstr]:=Bvsp[KLst]; Cnew[KLstr]:=FX[KLst]; CPrnew[KLstr]:=FunctPr[KLst]; FOR I:=1 TO Kstr DO BEGIN IF I=KLstr THEN Hnew[I]:=H[I]/X[KLstr,KLst] ELSE Hnew[I]:=H[I]-(H[KLstr]*X[I,KLst]/X[KLstr,KLst]); FOR J:=1 TO Kell DO BEGIN IF (I=KLstr) AND (J=KLst) THEN Xnew[I,J]:=1; IF (I=KLstr) AND (J<>KLst) THEN Xnew[I,J]:=X[I,J]/X[KLstr,KLst]; IF (I<>KLstr) AND (J=KLst) THEN Xnew[I,J]:=0; IF (I<>KLstr) AND (J<>KLst) THEN Xnew[I,J]:=X[I,J]-(X[KLstr,J]*X[I,KLst]/X[KLstr,KLst]); END; END; KLst:=0;KLstr:=0; Kit:=Kit+1; UNTIL (Kit=0); END; { Основная программа } BEGIN CLRSCR; Kit:=0;Dop_X:=0; ASSIGN(F,'SIMPLEX.DAT'); REWRITE(F); CLOSE(F); ST:; WRITE('Введите кол-во строк:');READLN(Kstr); IF Kstr>10 THEN BEGIN WRITELN('Программа не расчитана на введенное кол-во строк!'); GOTO ST; END; ELL: WRITE('Введите кол-во элементов:');READLN(Kell); IF Kell>10 THEN BEGIN WRITELN('Программа не расчитана на введенное кол-во элементов!'); GOTO ELL; END; ZN: WRITE('Исследуем на МАКСИМУМ(1) или МИНИМУМ(2):');READLN(Fm); IF (Fm<>1) AND (Fm<>2) THEN BEGIN WRITELN('Введите снова');GOTO ZN; END; WRITE('Целочисленное решение(Y/N): ');READLN(PrGomory); IF (PrGomory='Y') OR (PrGomory='y') THEN PrGomory:='Y' ELSE PrGomory:='N'; { Вызов процедуры SIMPLEX} SIMPLEX; END. |
Специфика современных версий учетных программ обуславливается использованием многоуровневого кода. Логично, что чем сложнее структура — тем выше вероятность возникновения внеплановых ситуаций, с которыми приходится сталкиваться рядовым пользователям конфигурации. В отдельных случаях даже сотрудники администрирующих служб предприятия не всегда способны сразу определить исходную причину появления неполадок, поэтому работа по устранению неудобств может занять немало времени. Одной из наиболее часто встречающихся проблем является классическая ошибка SDBL 1С, источники и способы устранения которой мы и рассмотрим в сегодняшнем обзоре.

Общее представление
Взаимодействуя с учетной программой, пользователи выполняют различные операции, каждая из которых, так или иначе, формирует запрос к базе данных. Создание нового документа, интеграция библиотеки, плановое обновление — во время любого из процессов есть вероятность получить в ответ уведомление от системы, свидетельствующее о том, что одна из логических цепочек была нарушена. Распространенный вариант — когда на экране появляется сообщение об ошибке SDBL 1С ожидается выражение (pos = 6) (а также 15, 57, 198, 250, 469, или любой другой номерной идентификатор).
Фактически это говорит о наличии технического сбоя, с которым чаще всего сталкиваются пользователи, самостоятельно обновляющие конфигурацию автоматическими средствами. Важно понимать, что при работе с программой (и в том числе при установке новых релизов) необходимо иметь определенный уровень навыков и знаний, достаточный для внесения изменений и управления функциональными возможностями платформы.

Впрочем, сильно переживать не стоит. Появление ошибки SDBL 1С еще не значит, что структура базы данных предприятия разрушена полностью — в большинстве случаев исправить проблему можно при помощи стандартного набора способов, реализовать которые под силу даже начинающим пользователям.
Причины возникновения
Один из главных факторов, о котором многие забывают в процессе работы с учетной системой — необходимость соответствия платформы и конфигурации обновления. То есть перед тем как начать использовать новый релиз, нужно создать условия, в которых он сможет нормально функционировать. Простейший вариант — доверить контроль за установкой профильному специалисту, который поможет избежать технических сбоев в программе.
Если говорить об уже упомянутой ранее ошибке SDBL 1С «ожидается выражение (pos = 144)» (или 48, 153, 13 — не столь принципиально), то в этом случае ключевым обстоятельством становится повреждение базы данных, обусловленное нарушением системных логических циклов. К числу распространенных причин возникновения, отмечаемых специалистами, относят не только применение устаревшей конфигурации или платформы, но также и проблемы, связанные с серверным кешем. Кроме того, всегда существует вероятность случайного запуска с некорректной учетной записи, не обладающей достаточным набором прав.

Чаще всего системные ошибки происходят в процессе очередного обновления БД, а также при обращении к ней — через запрос на добавление документов, во время тестовой проверки логической целостности, или же в иных ситуациях. Критической проблемой при установке расширений может стать и «некорректное использование LOCAL/GLOBAL в SET GENERATION», не позволяющее полноценно сохранить базу даже после выборочного удаления. Стоит отметить, что стандартное решение в виде перезагрузки программы обычно не помогает, поэтому для восстановления работоспособности придется воспользоваться альтернативными методиками.
Какие сообщения возникают

Уведомление о технических неполадках отражает специфику возникшей проблемы, и может появиться как во время обновления конфигурации, так и в процессе работы с обменом данных. Как правило, текст в информационном окне раскрывает специфику возникшей ошибки SDBL 1С: «не является именем поля», «ожидается идентификатор» или «выход за пределы размерности результата 1C», и т. д.
Встречаются и вспомогательные приписки, причем их количество зависит от конкретной неточности, допущенной в ходе сборки и настройки обновленного расширения:
-
предпринята попытка ввести неприемлемый тип значения «NULL»;
-
пропущена точка с запятой;
-
нарушение индексирования с полным текстом;
-
неоднозначное определение некоторого поля;
-
отсутствует выражение (pos =) — с различными числовыми идентификаторами в скобках.
Практика работы с типовыми конфигурациями показывает, что количество сообщений достаточно велико, и определенно выходит за рамки приведенного списка, в котором собраны только наиболее часто встречающиеся варианты.

Готовые решения для всех направлений
Ускорь работу сотрудников склада при помощи мобильной автоматизации. Навсегда устраните ошибки при приёмке, отгрузке, инвентаризации и перемещении товара.
Узнать больше
Мобильность, точность и скорость пересчёта товара в торговом зале и на складе, позволят вам не потерять дни продаж во время проведения инвентаризации и при приёмке товара.
Узнать больше
Обязательная маркировка товаров — это возможность для каждой организации на 100% исключить приёмку на свой склад контрафактного товара и отследить цепочку поставок от производителя.
Узнать больше
Скорость, точность приёмки и отгрузки товаров на складе — краеугольный камень в E-commerce бизнесе. Начни использовать современные, более эффективные мобильные инструменты.
Узнать больше
Повысь точность учета имущества организации, уровень контроля сохранности и перемещения каждой единицы. Мобильный учет снизит вероятность краж и естественных потерь.
Узнать больше
Повысь эффективность деятельности производственного предприятия за счет внедрения мобильной автоматизации для учёта товарно-материальных ценностей.
Узнать больше
Первое в России готовое решение для учёта товара по RFID-меткам на каждом из этапов цепочки поставок.
Узнать больше
Исключи ошибки сопоставления и считывания акцизных марок алкогольной продукции при помощи мобильных инструментов учёта.
Узнать больше
Получение сертифицированного статуса партнёра «Клеверенс» позволит вашей компании выйти на новый уровень решения задач на предприятиях ваших клиентов..
Узнать больше
Используй современные мобильные инструменты для проведения инвентаризации товара. Повысь скорость и точность бизнес-процесса.
Узнать больше
Показать все решения по автоматизации
Устранение ошибки SDBL 1С
Попытки справиться с возникающими проблемами самостоятельно не всегда заканчиваются одинаково успешно, поскольку в каждой отдельно взятой ситуации влияние оказывают разнообразные факторы — как в самой системе, так и за ее пределами.
В связи с этим главной рекомендацией специалистов является регулярное резервное копирование, позволяющее без особого труда восстановить исходные данные в случае наступления критических обстоятельств. Оптимальный график предусматривает не только ежедневное ночное создание копий, но также и дополнительное резервирование перед каждой значительной операцией, будь то обновление или закрытие периода. Автоматизированная архивация базы реализуется встроенным функционалом учетной программы, а восстановление из Конфигуратора занимает минимум времени, позволяя откатиться к рабочему состоянию практически без прерывания процесса.

Практически любая ошибка SDBL 1С — «недопустимый символ (pos = 40)», «пропущена точка с запятой», или «ожидается имя таблицы 21», может быть устранена путем выполнения несложного набора действий. Перечень доступных вариантов выглядит следующим образом:
-
Удаление кэшированных данных — как на пользовательском рабочем месте, так и на основном сервере, где произошел технический сбой. Для реализации процедуры очистки кэша достаточно закрыть учетную программу, открыть «Проводник», найти, выбрать и удалить набор папок из раздела «Application Data». Отличить нужные элементы проще всего по названию, которое выглядит как хаотичный набор символов — например, «ac5c8bm4-y65k-4s23-a9g8-2dcttp0b15da».
-
Использование функционала Конфигуратора, позволяющего провести тестирование и исправление информационной базы. В этом случае необходимо найти поврежденную ИБ, выбрать ее и перейти в раздел «Администрирование», после чего активировать встроенную функцию для теста и корректировки ошибок.
-
Перезагрузка сервера, на котором расположены программные приложения системы 1С. Самый простой вариант — включение и выключение всех взаимосвязанных SQL-сервисов, включая агент. Для выполнения задачи нужно зайти на нужный серверный источник, выделить агентскую службу, вызвать контекстное меню и остановить процесс. Аналогичные действия повторяем на SQL со служебными процедурами Server и Agent. Повторная активация осуществляется в обратном порядке.
-
Выгрузка БД в отдельный DT-файл с последующей повторной «заливкой». По сути, метод напоминает стандартную перезагрузку системы — структура записывается в файловом формате, что позволяет упорядочить проблемные разделы. Для выполнения процедуры достаточно открыть меню управления учетной программой, найти в категории «Администрирование» функцию «Выгрузить информационную базу», и после ее завершения выбрать опцию «Загрузить ИБ», используя сформированный файл.
-
Откат к последней резервной копии. Один из самых простых и доступных вариантов — конечно, в том случае, если архивирование данных проводится на регулярной основе, а не только перед закрытием периодов. Вообще, решение записывать текущее состояние перед каждым внесением изменений может избавить от большинства проблем, связанных с техническими сбоями. Даже если вы столкнетесь с уведомлением о том, что «ожидается имя поля», или получите ошибку «таблица 1С inforg не создана в новом поколении», источник которой не всегда понятен даже опытным пользователям — загрузка последней копии просто вернет систему к исходному состоянию. Для резервирования допускается использование как SQL MS, так и Конфигуратора учетной программы — через последовательную выгрузку файлов в уже упомянутом DT формате.
-
Обновление платформы через сайт информационно-технологического сопровождения разработчиков, доступный всем лицензированным пользователям продукта. Функционал портала ИТС позволяет установить последнюю редакцию, актуальную на момент обращения, инсталляция которой производится как на основной сервер, так и на рабочие места клиента.
Как правило, один из перечисленных методов позволяет добиться желаемого результата, устраняя проблему в работе учетной системы. В ситуациях, когда применить готовое решение так и не удалось, есть резервный вариант, отличающийся высокой вероятностью успешного исхода. Очистка в менеджере SQL 1С таблиц ConfigChngR и ExtProps, что за последние годы стало уже привычным способом восстановления для большинства специалистов, осуществляется стандартной командой Delete.
На что еще обратить внимание при устранении ошибок SDBL, и как реализовать рассмотренные методы? Сейчас разберемся.
Права доступа
Пожалуй, самая простая причина неполадок, которая тем не менее все еще встречаться на практике — попытка запустить систему через учетную запись, не обладающую соответствующими полномочиями. Убедитесь, что профиль для запуска выбран корректно, чтобы не провоцировать сбои собственными действиями.
Перезагрузка серверов 1С и SQL
Это один из простейших методов восстановления, единственным обязательным условием, для применения которого является выход всех пользователей из базы. Убедившись, что доступ открыт, зайдите на сервер и последовательно выключите агент программы Server и SQL-agent, после чего запустите их в обратном порядке.
Удаление кэшированных данных

Создание кэша представляет собой процесс буферизации информации, используемой базой чаще всего, и, как правило, относящейся к статичной категории. Кэширование позволяет ускорить программный цикл — так, если говорить об учетных системах, оптимизация затрагивает загрузку файлов конфигурации, исключая необходимость постоянного обращения к основному серверу. Однако на практике встречаются случаи некорректной обработки программным обеспечением подобных задач, что в конечном счете становится причиной неправильной работы платформы.
Перечень факторов, обуславливающих нарушение логических циклов, весьма обширен, и охватывает не только динамические обновления системной структуры, но и технические сбои программного или аппаратного характера. В некоторых случаях для устранения ошибки SDBL 1С «ожидается имя поля/таблицы (pos = 21, 45, 48…)» достаточно почистить кэш, сохраненный на сервере, либо на рабочем месте пользователя.
Стандартный путь к месту хранения кэшированных данных выглядит следующим образом:
-
«%userprofile%AppDataRoaming1C1Cv8» и «%userprofile%AppDataLocal1C1Cv8» — для операционных систем начиная с Windows 7.
-
«%userprofile%Local SettingsApplication Data1C1Cv8» и «%userprofile%Application Data1C1Cv8» — для тех, кто все еще продолжает работать на ХР.
Откройте каталог, расположенный по указанному адресу, выделите и удалите все хранящиеся в нем папки, имя которых представляет собой сгенерированный автоматически набор цифр и букв (вроде «abg7n8ty4-brt9r893-am…»). Стоит отметить, что во время чистки кэша нужно быть особенно внимательными, поскольку в директории также могут находиться поисковый индекс и журналы регистрации 1С, которые не требуют удаления.
Загрузка DT-файла

Этот метод может показаться немного странным, поскольку фактически не предполагает внесения каких-либо корректировок в основную структуру данных. Однако в действительности выгрузка БД в отдельный файл, сохраняемый в формате DT, с последующим обращением к ней же, нередко позволяет восстановить нормальную работу программы. Алгоритм достаточно прост — в режиме Конфигуратора нужно выбрать раздел «Администрирование», использовать опцию «Выгрузить ИБ» (указав каталог для сохранения), после чего повторно залить сформированную базу обратно в систему.
Тестирование и исправление
Еще одна удобная функция, доступная в режиме корректировки конфигурации — встроенный инструментарий, предназначенный для теста и внесения коррективов. В отдельных ситуациях может возникнуть проблема с запуском Конфигуратора — вместо этого можно воспользоваться специальной утилитой chdbfl.exe, представляющей собой упрощенный программный аналог с идентичным функционалом. Приложение находится в каталоге «bin», поэтому найти его не составляет особого труда — как через стандартный путь «C:Program Files (x86)1cv88.3bin», так и через опцию поиска, предлагаемую операционной системой.

Для использования программы достаточно указать расположение проблемной базы данных, и запустить цикл тестирования. При желании можно активировать опцию автоматического исправления выявленных ошибок — в противном случае утилита ограничится диагностикой, и сформирует перечень технических неполадок в отдельном реестре.
Обновление платформы
Еще одно простое решение, предусматривающее использование сайта технической поддержки разработчиков 1С. Скачайте дистрибутив актуального релиза, распакуйте архив и активируйте инсталлятор setup.exe — система обновится автоматически.
Очистка таблиц базы данных
Если ни один из вышеперечисленных способов не дал желаемого результата — остается вариант с удалением табличных значений БД, вызывающих появление ошибки, расположенных в каталогах ConfigChngR и ExtProps. Для этого применяется скрипт менеджера SQL, с указанием информационного раздела и командой delete from. В этом случае лучше всего обратиться к профильному специалисту, поскольку некорректное восстановление может привести к более серьезным последствиям.
Заключение
Автоматизация учетных процессов — важный аспект, позволяющий оптимизировать работу компании. Ошибки SDBL 1С встречаются достаточно часто, поэтому стоит заранее позаботиться об оперативном устранении возможных проблем. Мобильные решения, предлагаемые компанией «Клеверенс», гарантируют квалифицированную поддержку, а также помогут решить задачи, связанные с учетом данных на предприятии.
Количество показов: 7755










