Имя: Пароль:
1C
1C 7.7
v7: Попытка
,
0 gabatel
 
19.06.12
11:31
номер=0;
НомерДок+номер;
~1:
Попытка
Происходит создание документа
ПроверкаНаИзменение()
Исключение
Если НомерДок уже создан тогда номер=номер+1
Перейти ~1;
КонецПопытки

Процедура ПроверНаИзменение(НомерДок,ДатаДок)
   Если ДокІД.НайтиПоНомеру(НомерДок,ДатаДок,) = 1 Тогда
       ТЗ.ВыбратьСтроки();
       Пока ТЗ.ПолучитьСтроку() = 1 Цикл  
           Если ПустаяСтрока(ТЗ.Идентификатор)=1  Тогда
               Продолжить;
           КонецЕсли;
           Если ДокІД+"."+ТЗ.Идентификатор = ТекущийДокумент().ТЗ.Идентификатор Тогда
               Если  ДокІД+"."+ТЗ.Значение = ТекущийДокумент().ТЗ.Значение Тогда                        
                   Одинак = 1;
               Иначе
                   Одинак = 0;
               КонецЕсли;
           Иначе
               Продолжить;
           КонецЕсли;
       КонецЦикла;
   КонецЕсли;
КонецПроцедуры


Проблема в том что если в процедуре ПроверНаИзменение() если не равно перескакивает на исключение
1 andrewks
 
19.06.12
11:32
О_о
2 zak555
 
19.06.12
11:33
что за фейкуя ?
3 Ork
 
19.06.12
11:34
Когда бАзар за быдлокод - это то, что в (0)?
4 gabatel
 
19.06.12
11:35
Извиняюсь сейчас переделаю
5 ДенисЧ
 
19.06.12
11:37
А с какого оно вообще должно реагировать на исключение?
6 Ёпрст
 
19.06.12
11:37
заместо метки можно бесконечный цикл слепить с Прервать по условию...
7 Ёпрст
 
19.06.12
11:38
>>>ТекущийДокумент().ТЗ.Идентификатор

зачет, ага..
8 gabatel
 
19.06.12
11:40

   ~1:
   Попытка        
       ДокІД = СоздатьОбъект("Документ.ІсторіяДок");
       ДокІД.Новый();
       ДокІД.НомерДок = Строка(ТЗ.Реквизит+"_"+Число(Номер));
       ДокІД.ДатаДок = Дата(Прав(ТЗ.Реквизит,2)+"."+Сред(ТЗ.Реквизит,5,2)+"."+Сред(ТЗ.Реквизит,3,2));
       ТЗ.ВыбратьСтроки();
       Пока ТЗ.ПолучитьСтроку() = 1 Цикл
           Если ТипЗначения(ДокІД.ПолучитьАтрибут(Что))=0 Тогда  
               Если ТипЗначенияСтр(текЗначен)="Справочник" Тогда
                   ДокІД.НазначитьТип(Что, "Справочник."+текЗначен.Вид());        
                   .....
               КонецЕсли;
           КонецЕсли;
           ДокІД.УстановитьАтрибут(Что,текЗначен);
       КонецЦикла;                  
       Одинак = 0;          
       ПроверНаИзменение(ВремНомерДок,ВремДатаДок);
       Если ДокІД.НайтиПоНомеру(ВремНомерДок,ДатаДок) = 1 Тогда
           ТЗ.ВыбратьСтроки();
           Пока ТЗ.ПолучитьСтроку() = 1 Цикл
               Если ДокІД+"."+ТЗ.Идентификатор = ТекущийДокумент().ТЗ.Идентификатор Тогда
                   Если  ДокІД+"."+ТЗ.Значение = ТекущийДокумент().ТЗ.Значение Тогда                        
                       Одинак = 1;
                   Иначе
                       Одинак = 0;
                   КонецЕсли;
               Иначе
                   Продолжить;
               КонецЕсли;
           КонецЦикла;
       КонецЕсли;
       Если Одинак=0 Тогда            
           ДокІД.Записать();          
       КонецЕсли;
   Исключение
       Номер=Номер+1;
       Перейти ~1;
   КонецПопытки;
КонецПроцедуры    




Процедура ПроверНаИзменение(НомерДок,ДатаДок)
   Если ДокІД.НайтиПоНомеру(НомерДок,ДатаДок,) = 1 Тогда
       ТЗ.ВыбратьСтроки();
       Пока ТЗ.ПолучитьСтроку() = 1 Цикл  
           Если ПустаяСтрока(ТЗ.Идентификатор)=1  Тогда
               Продолжить;
           КонецЕсли;
           Если ДокІД+"."+ТЗ.Идентификатор = ТекущийДокумент().ТЗ.Идентификатор Тогда
               Если  ДокІД+"."+ТЗ.Значение = ТекущийДокумент().ТЗ.Значение Тогда                        
                   Одинак = 1;
               Иначе
                   Одинак = 0;
               КонецЕсли;
           Иначе
               Продолжить;
           КонецЕсли;
       КонецЦикла;
   КонецЕсли;
КонецПроцедуры
9 Mikeware
 
19.06.12
11:41
изысканная бредятина
10 smaharbA
 
19.06.12
11:42
Происходит создание документа
11 gabatel
 
19.06.12
11:43
Нет (10)
12 Simod
 
19.06.12
11:44
Что такое "Одинак" и где оно используется?  :-)
13 gabatel
 
19.06.12
11:44
Это как? (6)
14 FoundMarket
 
19.06.12
11:44
может все дело в комментариях?

Попытка
Происходит создание документа
ПроверкаНаИзменение()
Исключение

а надо

Попытка
//Происходит создание документа
ПроверкаНаИзменение()
Исключение
15 FoundMarket
 
19.06.12
11:45
скорее всего в параметрах - ПроверкаНаИзменение(A,B)
16 gabatel
 
19.06.12
11:48
Одинак описано перед вызовом процедуры ПроверНаИзменение.Это флаг если документы разные тогда записать изменения (12)
17 gabatel
 
19.06.12
11:50
(15) Параметры проверял нормально.Код что в процедуру ПроверкаНаИзменение() я вписывал в попытку все равно вы кидает в исключение
18 FoundMarket
 
19.06.12
11:53
ну так убери попытку и он тебе скажет где ошибка то
19 Simod
 
19.06.12
11:55
(16) Я так понимаю, что необходимо создать новый с документ с определенным номером?
20 gabatel
 
19.06.12
11:56
(16) Нужно вести историю документ если препровели нужно знать какие значения были до и после
21 Simod
 
19.06.12
11:57
(20) И история изменений хранится в документе?
22 Mikeware
 
19.06.12
12:00
(20) нехорошо изменять документ при перепроведении.
23 gabatel
 
19.06.12
12:00
(21) Да
(22) Согласен
24 ЧеловекДуши
 
19.06.12
12:00
гоунокодервпроцессе :)
25 ЧеловекДуши
 
19.06.12
12:01
+ (0) Пользоваться метками, плохой тон, почти в любой языке программирования :)
26 gabatel
 
19.06.12
12:03
(18) ТекущийДокумент().ТЗ.Идентификатор Поле агрегатного объекта не обнаружено (ТЗ)
27 ЧеловекДуши
 
19.06.12
12:03
+ >>> ТекущийДокумент().ТЗ.Идентификатор

Вынеси это в строку:

ТекДок = ТекущийДокумент();

И работай так "ТекДок.ТЗ.Идентификатор", я надеюсь ТЗ, это реквизит в шапке документа :)
28 ЧеловекДуши
 
19.06.12
12:04
+(26) "шарик ты балбес" (матроскин)
29 ЧеловекДуши
 
19.06.12
12:05
Автора в дворники, он поди даже две жёлтые книги не прочитал до конца :)
30 Simod
 
19.06.12
12:07
(23) Ваш подход к решению проблемы не верен. Документ должен быть сам по себе, история его изменений сама по себе. Лучше хранить историю в Журнале регистрации или в спец. созданном справочнике. Как это сделать можно поискать по старым веткам на форуме или в поисковиках.

Сам код очень плох. И дело дело даже не в использовании метки перехода (хотя и без нее легко обойтись), а в плохом знании языка.
31 ЧеловекДуши
 
19.06.12
12:11
(30)Думается, он и конфигуратор то видит впервые.
А слово "Отладчик", даже и не слыхивал :)
32 gabatel
 
19.06.12
12:17
Спасибо всем огромное
(23) Спасибо за советы и спасибо за критику буду луче изучать.Дайте пару хороших ссылок на литературу
(28) Недоглядел
(30) Легче всего опозорить
33 Академик_
Келдыш
 
19.06.12
12:21
блеать тока за "~" руки оторвать. про оптимальность вообще молчу
34 Simod
 
19.06.12
12:28
(32) "Все когда-то учились". Обижаться легче всего. Начните хотя бы с этого: http://www.google.ru/search?as_sitesearch=forum.mista.ru&q=%E8%F1%F2%EE%F0%E8%FF+%E8%E7%EC%E5%ED%E5%ED%E8%E9
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn