Имя: Пароль:
1C
1С v8
Как обратиться к реквизиту из одной базы в другую через COMОбъект("V81.Applicat
0 egorover
 
31.08.11
13:49
Есть стандартный обмен из УТ 10.3 в БП 1.6, но при переносе в БП проводки с ручными корректировками слетают, хочу из УТ подсоединится к базе БП и узнать в каких документах проводки вручную откорректированы и удалить из узла обмена, НО КАК ОБРАТИТЬСЯ К РЕКВИЗИТУ В БП?
Процедура ВыбКоррктировка(Элемент)
   
   БазаПолучатель = Новый COMОбъект("V81.Application");
   Srvr="MC-1C";Ref="bp81";
   Попытка
       СтрокаСоединения = "Srvr=""MC-1C"";Ref=""ut81_st"";Usr=""Администратор"";Pwd=""1111111""";
       Открытие = БазаПолучатель.Connect(СтрокаСоединения);
   Исключение
       Сообщить("Ошибка подключения");
       Возврат;
   КонецПопытки;
   
   Сообщить("Подключились...");
   
   Если ЭлементыФормы.ТипДокумента.Значение = Неопределено Тогда
       Для к = 0 по Метаданные.Документы.Количество() - 1 Цикл
           Состояние(Метаданные.Документы.Получить(к).Имя);
           
           //перебираем документы в базе получатель
           
           ТипДок = Метаданные.Документы.Получить(к).Имя;
           
           Если ТипДок = "АктСверкиВзаиморасчетов"
               ИЛИ ТипДок = "АктСверкиВзаиморасчетов"
                   ИЛИ ТипДок = "АктСверкиВзаиморасчетов"

                   Тогда
            Продолжить;
           КонецЕсли;

           РеестрДок = Документы[ТипДок];
           Реестры = БазаПолучатель.Документы[ТипДок].Выбрать(НачалоДня(НачПериода), КонецДня(КонПериода));
           
           Пока Реестры.Следующий() Цикл
               
               Сообщить(реестры.Номер);
               Попытка
                   Если Реестры.РучнаяКорректировка = 1 Тогда
                       НайденыйДок = РеестрДок.НайтиПоНомеру(Реестры.Номер, Реестры.Дата);
                       //ПланыОбмена.УдалитьРегистрациюИзменений(Узел, НайденыйДок.Ссылка);
                       Сообщить("ручная "+НайденыйДок.Ссылка);      
                   КонецЕсли;
               Исключение
                   Сообщить("Не удалось по документу " + ТипДок + " № " + реестры.Номер + " " + ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
               КонецПопытки;
               
           КонецЦикла;
       КонецЦикла;
   КонецЕсли;
КонецПроцедуры
1 egorover
 
31.08.11
13:50
Если Реестры.РучнаяКорректировка = 1 Тогда
вот тут идет обращение
2 izekia
 
31.08.11
13:54
условие отличное))
3 Рэйв
 
31.08.11
13:57
(0)Может

Если Реестры.РучнаяКорректировка = истина Тогда

?
4 egorover
 
31.08.11
14:18
(3) нет, я пробовал, ругается на поле РучнаяКорректировка, там в принципе можно вытащить только строку и дату
5 egorover
 
31.08.11
14:18
через COM? или есть способы?
6 Ненавижу 1С
 
гуру
31.08.11
14:20
(4) брешишь, более того можно вообще написать

Если Реестры.РучнаяКорректировка Тогда
7 palpetrovich
 
31.08.11
14:23
брешишь  - не такого слова :)
8 Ненавижу 1С
 
гуру
31.08.11
14:23
(7) если брешут, то и слово есть
9 Ненавижу 1С
 
гуру
31.08.11
14:24
(7) ну ладно, "брешешь"
10 egorover
 
31.08.11
14:26
мальчики не ругайтесь
11 egorover
 
31.08.11
14:27
(6) у меня так и было написано раньше, просто я в бытность свою к 7.7 обращался там вроде булево - 1 и 0 было вот и ступил
12 egorover
 
31.08.11
14:30
при варианте
Если Реестры.РучнаяКорректировка Тогда

Поле объекта не обнаружено (РучнаяКорректировка)
13 egorover
 
31.08.11
14:32
да и в отладчике только список реквизитов той базы из которой соединяюсь (т.е. УТ)
14 Ткачев
 
31.08.11
14:38
В разве не ?
Реестры = ОТКРЫТИЕ.Документы[ТипДок].Выбрать(НачалоДня(НачПериода), КонецДня(КонПериода));
15 palpetrovich
 
31.08.11
14:39
почитал код, а что, разве так можно?
... (14) опередил :)
16 egorover
 
31.08.11
14:40
(14) стыдно, но сейчас попробую
17 egorover
 
31.08.11
14:45
(14) не понял?
{Форма.Форма(80)}: Значение не является значением объектного типа (Документы)
           Реестры = ОТКРЫТИЕ.Документы[ТипДок].Выбрать(НачалоДня(НачПериода), КонецД
18 Ненавижу 1С
 
гуру
31.08.11
14:46
(14) нет, у него апликайшен, а не коннектор
19 egorover
 
31.08.11
14:47
(18) так через коннектор соединиться?
20 palpetrovich
 
31.08.11
14:49
(18) аа, СеменСеменыч, не заметил ...дык может коннектор попользовать?
у мну так:
   БазаУТ = Новый COMObject("V81.ComConnector");
   Попытка
       Соединение = БазаУТ.Connect("File="+СокрЛПКаталогБазыУТ+"; Usr="+ПользовательУТ+"; Pwd="+ПарольУТ);
   Исключение    КонецПопытки;
   //=============================
   Выборка = Соединение.Документы.Доверенность.Выбрать(ДатаНач, КонецДня(ДатаКон));
   Пока Выборка.Следующий() Цикл
21 Ненавижу 1С
 
гуру
31.08.11
14:49
(19)(20) ну не я ж хозяин кода
22 egorover
 
31.08.11
14:50
(20) попробую
23 Ткачев
 
31.08.11
14:52
(18) А в чем причина тогда может быть что через апликайшен не может законнектиться ?
24 zbv
 
31.08.11
14:55
не у всех документов есть реквизит "РучнаяКорректировка"
25 Ткачев
 
31.08.11
14:58
(24)Условие ведь есть :)
           Если ТипДок = "АктСверкиВзаиморасчетов"
               ИЛИ ТипДок = "АктСверкиВзаиморасчетов"
                    ИЛИ ТипДок = "АктСверкиВзаиморасчетов"

                   Тогда
            Продолжить;
           КонецЕсли;
26 zbv
 
31.08.11
15:04
(25) ну да, такое условие трудно не заметить... )

но телепат подсказывает, что это не единственный документ.
и тут
               ИЛИ ТипДок = "АктСверкиВзаиморасчетов"
                    ИЛИ ТипДок = "АктСверкиВзаиморасчетов"

должны быть другие виды.
27 Ткачев
 
31.08.11
15:11
(26)Может тут и попадает на другие виды где нету РучнаяКорректировка
28 egorover
 
31.08.11
15:12
да с этим все нормально
Если ТипДок = "АктСверкиВзаиморасчетов"
               ИЛИ ТипДок = "ВозвратТоваровОтПокупателя"
               ИЛИ ТипДок = "ГТДИмпорт"
               ИЛИ ТипДок = "а_Факт_РеестрПереданныхДокументов"
               ИЛИ ТипДок = "УстановкаЦенДоставки"
               
               Тогда                    
               Продолжить;
           КонецЕсли;

суть не в этом все равно Поле объекта не обнаружено (РучнаяКорректировка)
29 egorover
 
31.08.11
15:14
Процедура ВыбКоррктировка(Элемент)
   
   БазаПолучатель = Новый COMObject("V81.ComConnector");

   Srvr="MC-1C";Ref="bp81";
   Попытка
       СтрокаСоединения = "Srvr=""MC-1C"";Ref=""ut81_st"";Usr=""Администратор"";Pwd=""02670873""";
       Открытие = БазаПолучатель.Connect(СтрокаСоединения);
   Исключение
       Сообщить("Ошибка подключения");
       Возврат;
   КонецПопытки;
   
   Сообщить("Подключились...");
   
   Если ЭлементыФормы.ТипДокумента.Значение = Неопределено Тогда
       Для к = 0 по Метаданные.Документы.Количество() - 1 Цикл
           Состояние(Метаданные.Документы.Получить(к).Имя);
           
           //перебираем документы в базе получатель
           
           ТипДок = Метаданные.Документы.Получить(к).Имя;
           
           Если ТипДок = "АктСверкиВзаиморасчетов"
               ИЛИ ТипДок = "ГТДИмпорт"
               Тогда                    
               Продолжить;
           КонецЕсли;
           
           РеестрДок = Документы[ТипДок];
           Реестры   = Открытие.Документы[ТипДок].Выбрать(НачалоДня(НачПериода), КонецДня(КонПериода));
           
           Пока Реестры.Следующий() Цикл
               
               Сообщить(реестры.Номер);
               Попытка
                   Если Реестры.РучнаяКорректировка Тогда
                       НайденыйДок = РеестрДок.НайтиПоНомеру(Реестры.Номер, Реестры.Дата);
                       //ПланыОбмена.УдалитьРегистрациюИзменений(Узел, НайденыйДок.Ссылка);
                       Сообщить("ручная "+НайденыйДок.Ссылка);      
                   КонецЕсли;
               Исключение
                   Сообщить("Не удалось по документу " + ТипДок + " № " + реестры.Номер + " " + ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
               КонецПопытки;
               
           КонецЦикла;
       КонецЦикла;
   КонецЕсли;
КонецПроцедуры
30 zbv
 
31.08.11
15:15
(29) в сообщение что пишет ? какой типдок ?
31 egorover
 
31.08.11
15:16
(30) Не удалось по документу ПоступлениеТоваровУслуг № 00000012033 Поле объекта не обнаружено (РучнаяКорректировка)
32 zbv
 
31.08.11
15:19
(31) а нафига ты к УТ коннектишься ?!
33 Ткачев
 
31.08.11
15:20
А тут правильно ? Ref=""ut81_st""
34 egorover
 
31.08.11
15:22
(33) тьфу ты .... вот я осел
35 egorover
 
31.08.11
15:23
а я ещё сижу удивляюсь что в отладчике у меня реквизиты как в УТ
36 zbv
 
31.08.11
15:24
(34) а вообще не правильно, ты получешь метаданные текущей базы, а документы уже внешней базы - могут быть траблы..
37 egorover
 
31.08.11
15:30
(36) в каком месте? я тут получаю только типы документов
ТипДок = Метаданные.Документы.Получить(к).Имя;
38 zbv
 
31.08.11
15:32
(37) ну... типы документов базы УТ.

а тут
Реестры   = Открытие.Документы[ТипДок].Выбрать(НачалоДня(НачПериода), КонецДня(КонПериода));
           
базы БП.
а ведь имя документа может не совпадать или вообще нет такого.
39 egorover
 
31.08.11
15:35
(38) твоя правда, чуть повыше исключу
40 Ткачев
 
31.08.11
15:47
(39)Зачем исключать, сделать так, потом отредактировать все что неправильно.
Попытка
Реестры   = Открытие.Документы[ТипДок].Выбрать(НачалоДня(НачПериода), КонецДня(КонПериода));
Исключение
Сообщить(ТипДок);
Продолжить;
КонецПопытки;
41 egorover
 
31.08.11
15:50
(40) ещё лучше, ну попёрло...
42 egorover
 
31.08.11
16:19
черт, в БП даты ещё могут отличаться
43 egorover
 
31.08.11
16:37
конечный релиз
Процедура ВыбКоррктировка(Элемент)
   
   БазаПолучатель = Новый COMObject("V81.ComConnector");

   Попытка
       СтрокаСоединения = "Srvr=""MC-1C"";Ref=""bp81"";Usr=""админ"";Pwd=""11111""";
       Открытие = БазаПолучатель.Connect(СтрокаСоединения);
   Исключение
       Сообщить("Ошибка подключения");
       Возврат;
   КонецПопытки;
   
   Сообщить("Подключились...");
   
   Если ЭлементыФормы.ТипДокумента.Значение = Неопределено Тогда
       Для к = 0 по Метаданные.Документы.Количество() - 1 Цикл
           Состояние(Метаданные.Документы.Получить(к).Имя);
           
           ТипДок = Метаданные.Документы.Получить(к).Имя;
           
           Если ТипДок = "АктСверкиВзаиморасчетов"
               ИЛИ ТипДок = "КорректировкаЗаписейРегистров"  
               ИЛИ ТипДок = "Доверенность"
               ИЛИ ТипДок = "РаспределениеНДСКосвенныхРасходов" Тогда
               Продолжить;
           КонецЕсли;
           
           РеестрДок = Документы[ТипДок];
           
           //перебираем документы в базе получатель
                       
           Попытка
               Реестры   = Открытие.Документы[ТипДок].Выбрать(НачалоДня(НачПериода), КонецДня(КонПериода));
           Исключение
               Сообщить("пропускаем документ "+ТипДок+", его нет в Бухгалтерии" );
               Продолжить;
           КонецПопытки;
           
           Пока Реестры.Следующий() Цикл
               
               //Сообщить(реестры.Номер);
               Попытка
                   Если Реестры.РучнаяКорректировка Тогда
                       НайденыйДок = РеестрДок.НайтиПоНомеру(Реестры.Номер, Реестры.Дата);
                       Сообщить("ручная корректировка у документа "+НайденыйДок.Ссылка+", удаляем его из узла обмена" );
                       ПланыОбмена.УдалитьРегистрациюИзменений(Узел, НайденыйДок.Ссылка);    
                   КонецЕсли;
               Исключение
                   Сообщить("Не удалось по документу " + ТипДок + " № " + реестры.Номер + " " + ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
               КонецПопытки;
               
           КонецЦикла;
       КонецЦикла;
   КонецЕсли;
КонецПроцедуры
44 egorover
 
31.08.11
16:40
(33) Спасибо большое Ткачеву,редкой души человечище я бы сказал, благодарности всем - большое спасибо
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший