Имя: Пароль:
1C
1С v8
COM: НайтиПоКоду
,
0 Кокос
 
15.08.11
16:22
СоединительСРабочейБазой = Новый COMObject("V82.COMConnector");;
СоединениеСРабочейБазой = СоединительСРабочейБазой.Connect(вРабочиеБазы.СтрокаСоединения+"Usr="+вРабочиеБазы.Пользователь+";"+"Pwd="+вРабочиеБазы.Пароль+";");
ЭлементДляЗаписи = Неопределено;
Если Тип = "Справочник" Тогда
   ЭлементДляЗаписи = СоединениеСРабочейБазой.Справочники[ИмяТипа].Выбрать();//.НайтиПоКоду(СокрЛП(ЭтотОбъект.Код));//
   Пока ЭлементДляЗаписи.Следующий() Цикл
       Сообщить(ЭлементДляЗаписи["Код"]);
   КонецЦикла;

Выбрать работает а закоментированный найтипокоду нет. В чем может быть дело?хотя вроде написано что в внешнем соединении должен работать. сейчас попробую запросом искать.
1 Кокос
 
15.08.11
16:26
фигасе сегодня скорость. полминуты и уже апать надо
2 MNS_Ротерта
 
15.08.11
16:27
(0) Какая хоть ошибка-то выходит. И лучше приводите в всегда синтаксис как писали. ЭтотОбъект у него этоновый()=ложь?
3 MNS_Ротерта
 
15.08.11
16:28
(0) Может ошибка не в НайтиПоКоду, а в дальнейшем цикле?
4 Кокос
 
15.08.11
16:29
(2) ошибки вообще не выходит. смотрел в отладчике. элемент пуст тип COM но при переборе коды выводятся как надо. УТ10. Справочник Номенклатуры.
5 Кокос
 
15.08.11
16:31
(3) да я сразу в отладчике смотрел после найтиПоКоду. Причем Выбрать() все работает отлично и коды видно и все. а как только меняю на НайтиПоКоду возвращает пустой com-объект реквизиты есть но все пустое. базы идентичные. просто сделал копию и делаю тестовое соединение
6 MNS_Ротерта
 
15.08.11
16:32
(0) Если считаешь что ошибка платформы (что бывает но очень редко) сделай иначе. Запросом например, оно и быстрее будет работать по идее.
7 hhhh
 
15.08.11
16:33
(5) сокрЛП зря вставил
8 mzelensky
 
15.08.11
16:33
(5) так может его просто НЕТ?
Возьми и укажи явно присутствующий код :

ЭлементДляЗаписи = СоединениеСРабочейБазой.Справочники[ИмяТипа].НайтиПоКоду("12345");//
9 Кокос
 
15.08.11
16:33
(6) да не ошибка думаю. просто может какие особенности метода при внешнем соединении. вот гуру всяких спрашиваю.
10 mzelensky
 
15.08.11
16:33
(0) а еще лучше выбери запросом!
11 Кокос
 
15.08.11
16:34
(7) я и так и так пробовал. не лИзЭ.
(8) базы идентичные. он есть. сейчас попробую явно указать.
12 MNS_Ротерта
 
15.08.11
16:34
(7) А как может СокрлЛП испортить впечатление?
13 hhhh
 
15.08.11
16:34
(11) иерархический справочник?
14 eklmn
 
гуру
15.08.11
16:35
Сообщить(ЭлементДляЗаписи["Code"]);
15 Кокос
 
15.08.11
16:36
(13) угу. но тестировал на корневом элементе. просто надо чтобы при записи на центральной базе цен и справочников все автоматом грузилось в рабочие. РИБ неохота юзать.
16 Кокос
 
15.08.11
16:36
(14) "     "
17 MNS_Ротерта
 
15.08.11
16:36
(0) А платформа какая ради любопытсва
18 Кокос
 
15.08.11
16:37
(8) не помогло
19 Кокос
 
15.08.11
16:37
(17) 1С:Предприятие 8.2 (8.2.14.519)
20 MNS_Ротерта
 
15.08.11
16:39
(0) А исполняется где код?

Описание:

Осуществляет поиск элемента по его коду.

Доступность:

Сервер, толстый клиент, внешнее соединение.
21 MNS_Ротерта
 
15.08.11
16:39
(0) А да во внешнем соединении где то упоминалось раньше.
22 Кокос
 
15.08.11
16:40
(21) угу. извне должно быть доступно... фигня какаят :)
23 mzelensky
 
15.08.11
16:41
(0) говорю тебе - ДЕЛАЙ ЗАПРОСОМ!
24 Кокос
 
15.08.11
16:41
(23) да уже ищу. был тут где-то код на мисте
25 Reset
 
15.08.11
16:43
Не находит он у тебя код. Проверяй значение, которое ищешь. Может там число, а ты ищешь по строке.
Метод абсолютно рабочий. Запрос здесь без необходимости.
26 MNS_Ротерта
 
15.08.11
16:44
(0) один знакомый знакомой который в 1С работает говорил что многое в 8.2 не отрабатывает приходиться сидеть извращаться методами которые работают пользоваться. Если вспомнить как рождалась 7.7, то там в описании были часто методы которые в палтформу не были заложены. Но позднее они появились и стали корректно работать, но в более подзних релизах платформы 7.7.
27 mzelensky
 
15.08.11
16:44
(24)

V81=Неопределено;    
   Параметры = ("Srvr=""123""; Ref=""123""; Usr=""123""; Pwd=""123""; ");                          
   V81 = Новый COMObject("v81.ComConnector");    // пытаемся открыть базу
   попытка
       V81=V81.Connect(Параметры);
   исключение
       ДатаК=Неопределено;    
       V81=Неопределено;  
       Сообщить("Подключиться к базе не удалось. Проверьте правильность ввода пользователя и пароля");
       возврат;          
   конецпопытки;


Запрос2 = V81.NewObject("запрос");    
               Запрос2.Текст = "ВЫБРАТЬ
               |    ПРЕДСТАВЛЕНИЕССЫЛКИ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом) КАК Документ,
               |    ЕСТЬNULL(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток, 0) КАК СуммаКОУТ,
               |    ЕСТЬNULL(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента.КоличествоДнейПоДоговору, 0) КАК Отсрочка,
               |    ВЫБОР
               |        КОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаОплаты = &ПД
               |            ТОГДА ДОБАВИТЬКДАТЕ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента.КоличествоДнейПоДоговору)
               |        ИНАЧЕ ДОБАВИТЬКДАТЕ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаОплаты, ДЕНЬ, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента.КоличествоДнейПоДоговору)
               |    КОНЕЦ КАК ДатаОплаты,
               |    ЕСТЬNULL(РАЗНОСТЬДАТ(ВЫБОР
               |                КОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаОплаты = &ПД
               |                    ТОГДА ДОБАВИТЬКДАТЕ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента.КоличествоДнейПоДоговору)
               |                ИНАЧЕ ДОБАВИТЬКДАТЕ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаОплаты, ДЕНЬ, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента.КоличествоДнейПоДоговору)
               |            КОНЕЦ, &ДКДата, ДЕНЬ), 0) КАК Просрочка
               |ИЗ
               |    РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(&ДК, ДокументРасчетовСКонтрагентом ССЫЛКА Документ.РеализацияТоваровУслуг
               |         И ДокументРасчетовСКонтрагентом.Контрагент.код = &Контр ) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки
               |ГДЕ
               |    ЕСТЬNULL(РАЗНОСТЬДАТ(ВЫБОР
               |                    КОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаОплаты = &ПД
               |                        ТОГДА ДОБАВИТЬКДАТЕ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента.КоличествоДнейПоДоговору)
               |                    ИНАЧЕ ДОБАВИТЬКДАТЕ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаОплаты, ДЕНЬ, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента.КоличествоДнейПоДоговору)
               |                КОНЕЦ, &ДКДата, ДЕНЬ), 0) > 0
               |
               |УПОРЯДОЧИТЬ ПО
               |    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом,
               |    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента,
               |    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.Контрагент";    
               Граница=V81.NewObject("Граница", КонецДня(ДК), V81.ВидГраницы.Включая);
               Запрос2.УстановитьПараметр("ДК",    Граница);     //Дата
               Запрос2.УстановитьПараметр("ДКДата",    КонецДня(ДК));     //Дата  
               Запрос2.УстановитьПараметр("ПД",    Дата('00010101'));                
               Запрос2.УстановитьПараметр("Контр",    Выборка.Контр.код);     //Дата
               
               ВыборкаУТ= Запрос2.Выполнить().Выбрать();
               Если ВыборкаУТ.Количество() >0 тогда
28 MNS_Ротерта
 
15.08.11
16:45
(25) кстати вполне возможно. хотя должно было б наверное выдать Неопределено тогда уж и отработать как будто ничего не найдено?
29 Кокос
 
15.08.11
16:45
(25) базы идентичные. просто скопировал. там и там строка
30 Кокос
 
15.08.11
16:46
(27) премного благодарен
31 Reset
 
15.08.11
16:47
(29) Не бывает чудес. Может, код номенклатуры, а ищешь в складах.
32 Кокос
 
15.08.11
16:51
(31) прочитай внимательно. Методов Выбрать() и Следующий() работают. плюс смотрел сам элемент в отладчике. он Пустой() но реквизиты все номенклатурные
33 eklmn
 
гуру
15.08.11
16:52
(31) Скорее всего платформа, много на ком написано, половина не работает
34 Reset
 
15.08.11
16:53
(32) Я внимательно прочитал. Из этого и следует, что такого кода там нет, или ты его неправильно передаешь.
35 Кокос
 
15.08.11
16:54
СоединительСРабочейБазой = Новый COMObject("V82.COMConnector");;
       СоединениеСРабочейБазой = СоединительСРабочейБазой.Connect(вРабочиеБазы.СтрокаСоединения+"Usr="+вРабочиеБазы.Пользователь+";"+"Pwd="+вРабочиеБазы.Пароль+";");
       ЭлементДляЗаписи = Неопределено;
       Если Тип = "Справочник" Тогда
           ЗапросПоиска = СоединениеСРабочейБазой.NewObject("Запрос");    
           ЗапросПоиска.Текст = "ВЫБРАТЬ
                                |    Номенклатура.Ссылка
                                |ИЗ
                                |    Справочник.Номенклатура КАК Номенклатура
                                |ГДЕ
                                |    Номенклатура.Код = &ТутошнийКод";    
           ЗапросПоиска.УстановитьПараметр("ТутошнийКод",    ЭтотОбъект.Код);     //Дата
           ВыборкаИзСоединения = ЗапросПоиска.Выполнить().Выбрать();
           Если ВыборкаИзСоединения.Количество() >0 тогда            
               Сообщить(ВыборкаИзСоединения.Ссылка.Код);
           КонецЕсли;

блин. не работает. не находит ничего :)
36 Кокос
 
15.08.11
16:55
Сообщить(ВыборкаИзСоединения[0].Ссылка.Код);

забыл индекс поставить. но туда все равно не заходит :)
37 Кокос
 
15.08.11
16:56
а. еще и выгрузить в тз надо перед индексом. но все равно результ пустойже
38 Reset
 
15.08.11
16:56
(36) Результат не зависит от того, каким пальцем давишь на кнопку.
39 Reset
 
15.08.11
16:56
Разбирайся со значением кода
40 Кокос
 
15.08.11
16:58
(39) а что с ним разбираться? я его в отладчике замечательно вижу. он такойже как в обоих базах.
41 Reset
 
15.08.11
16:59
(40) Не такой. Иначе бы находился.
42 Reset
 
15.08.11
17:03
напиши для проверки и чтобы не списывать на нечистые силы:

Выборка = СоединениеСРабочейБазой.Справочники[ИмяТипа].Выбрать();
Выборка.Следующий();
СуществующийКод=Выборка.Код;
ЭлементДляЗаписи = СоединениеСРабочейБазой.Справочники[ИмяТипа].НайтиПоКоду(СуществующийКод));
43 Кокос
 
15.08.11
17:06
(42) так работает :))
44 Кокос
 
15.08.11
17:13
(42)
           ЭлементДляЗаписи = СоединениеСРабочейБазой.Справочники[ИмяТипа].Выбрать();//
           Пока ЭлементДляЗаписи.Следующий() Цикл
               Если ЭлементДляЗаписи["Код"] = ЭтотОбъект.Код ТОгда
                   Сообщить(ЭлементДляЗаписи["Код"]);
               КонецЕсли;    
           КонецЦикла;

действительно код не находит. скорее всего дело в идентификации. наверное не идентифицирует пользователя а там у меня RLS стоит. спасибо
45 Reset
 
15.08.11
17:15
:)
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн