Имя: Пароль:
1C
 
РегистрСведений.МенеджерЗаписи - метод "Прочитать"
0 cfk
 
19.08.09
19:23
такая процедура:
Процедура КнопкаВыполнитьНажатие(Кнопка)
   Попытка
       Excel=Новый COMОбъект("Excel.Application");
       DataFile = Excel.WorkBooks.Open(SrcFile);
       DataSheet = DataFile.Sheets(1);
       
       rsm=РегистрыСведений.ФИОФизЛиц.СоздатьМенеджерЗаписи();
       
       for row=2 to 2 do
           INN=undefined;
           FN=undefined;
           Nm=undefined;
           SN=undefined;
           FNS=undefined;
           for col=1 to 2  do            
               //Try
                   UserInterruptProcessing();                    
                   if IsBlankString(DataSheet.cells(row,col).Value)=false then        
                       if col=1 then
                           INN=ПроверитьИНН(DataSheet.cells(row,col).Value);
                       else
                           FNS=TrimAll(String(DataSheet.cells(row,col).Value));
                           S1Idx=Find(FNS," ");
                           FN=TrimALL(Left(FNS,S1Idx-1));//first name
                           S2Idx=Find(Right(FNS,StrLen(FNS)-S1Idx)," ");
                           Nm=TrimALL(Mid(FNS,S1Idx+1,S2Idx-1));//name
                           SN=TrimALL(Right(FNS,StrLen(FNS)-(StrLen(FN)+StrLen(Nm)+2)));//surname
                           
                           Usr=Справочники.ФизическиеЛица.НайтиПоРеквизиту("ИНН",INN);
                           if Usr<>Справочники.ФизическиеЛица.ПустаяСсылка() then
                           
                               rsm.ФизЛицо=Usr;
                               rsm.Период=ТекущаяДата();
                               rsm.Прочитать();
                               if rsm.Выбран() then
                                   rsm.ФамилияР=FN;
                                   rsm.ИмяР=Nm;
                                   rsm.ОтчествоР=SN;
                                   rsm.Записать();
                               else
                                   message("record for Usr "+Usr.Наименование+" in register not found!");
                               endif;
                           else
                               message("usr w "+INN+" nf!");//usr w current INN nf!
                           endif;
                           
                       endif;
                   else
                       message("empty value in cell @ r:"+string(row)+", c:"+string(col)+".");//empty cell value!
                   endif;    
               //except
               //        
               //endtry;
           enddo;
       enddo;
                   
   Исключение
       Ошибка = Строка(ОписаниеОшибки());
       Предупреждение(Ошибка);
       Excel.WorkBooks.Close();
       Excel.Quit();
       //Возврат Ошибка;
   КонецПопытки;    
   Excel.WorkBooks.Close();
   Excel.Quit();        
КонецПроцедуры

В результате rsm.Прочитать() не находит запись в регистре, хотя она там есть. Пробовал убирать период, оставлял только ссылку на физлицо, все равно не находит. Ничего не пойму.
1 ТелепатБот
 
гуру
19.08.09
19:23
2 cfk
 
19.08.09
19:34
т.е. метод Выбрать() возвращает ложь.
3 cfk
 
19.08.09
19:34
* Выбран()
4 Defender aka LINN
 
19.08.09
19:42
ААААА!!!
Мои глаза!!!...
Пипец, ЧТО ЭТО? О_О
З.Ы. Ну нету там записи, НЕТУ.
З.З.Ы. Юзай НаборЗаписей, а не менеджер.
5 inka
 
19.08.09
20:43
(4) - Как Вам удалось ЭТО дочитать?
6 Фокусник
 
19.08.09
20:58
(0) и не ломает расклатку переключать так часто...?
7 Фокусник
 
19.08.09
20:58
(6) *раскладку
8 cfk
 
20.08.09
11:28
Сразу видно урожденных кто тут кроме 1С в глаза ничего больше не видел. Прямо базар какой-то.
9 cfk
 
20.08.09
11:32
Один походу даже мутантом стал из "заклятья долины змей" =)
10 cfk
 
20.08.09
12:14
(6) по поводу рскладки - а не ломает писать операторы и функции с процедурами такой длины что они не влазят даже в большие разрешения?
11 Aprobator
 
20.08.09
12:21
(10) от такого нечитаемого да плюс к этому еще и корявого кода станешь фиг знает кем.
12 cfk
 
20.08.09
12:56
чем он корявый? А на счет нечитаемости спорный вопрос. Про BRAIN FUCK слыхали? По существу пожалуйста.

(4) - спасибо, помогло, но я уже и сам думал так сделать. Только я так и не понял почему с менеджером записи не работает.
13 Futarkh
 
20.08.09
13:31
(12) Патамушта МенеджерЗаписи нужен для другого.
Описание:
Позволяет читать, записывать и удалять отдельную запись регистра сведений. Используется только для регистров сведений, неизменяемых регистраторами, т.е. для которых в конфигураторе установлен режим записи "Независимый".
Предназначен для интерактивной работы с записью регистра сведений.

НаборЗаписей:
Описание:
Предназначен для операций с наборами записей регистра сведений в памяти. Представляет собой коллекцию записей регистра сведений. Позволяет выполнять считывание записей по определенному условию отбора из базы данных, добавлять, удалять и модифицировать записи в наборе. Также может быть выполнена запись в базе данных по определенному условию. При записи может выполняться замещение всех имеющихся в базе данных записей по данному условию на записи, содержащиеся в наборе.


Выбирай че тебе надо
14 Aprobator
 
21.08.09
10:53
(10)да хотя бы по количеству кода запиханного внутрь попытки. Например, поиск по справочнику что ли может дать ошибку? Нафиг это - то внутрь попытки запихано? Это раз.

Если вылет будет на Excel=Новый COMОбъект("Excel.Application"), то какой прок от строчек после КонцаПопытки да и в исключении? Это два. Это тока навскидку.