Форум программистов, компьютерный форум, киберфорум
1С: Администрирование и интеграция
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/113: Рейтинг темы: голосов - 113, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 29.05.2014
Сообщений: 41

1C 8.3 COMConnector Исключение при подключении [C#]

29.05.2014, 08:07. Показов 22872. Ответов 58
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Надеюсь по адресу обращаюсь. Не могу никак заставить работать программу. На форме 1 кнопка. Текст клика:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        private void button1_Click(object sender, EventArgs e)
        {
            string user = "Admin";
            string pas = "123456";
            string file = "D:\\1cv83\\TEST";
            dynamic result;
            dynamic refer;
            V83.COMConnector com1s = new V83.COMConnector();
            
            com1s.PoolCapacity = 10;
            com1s.PoolTimeout = 60;
            com1s.MaxConnections = 2;
            result = com1s.Connect("File='" + file + "';Usr='" + user + "';pwd='" + pas + "';");
            refer = result.Справочники.Номенклатура.СоздатьЭлемент();
            refer.Наименование = "Создано из C# Алексом";
            refer.Записать();
                       
        }
Текст ошибки при клике по кнопке
Необработанное исключение типа "System.Runtime.InteropServices.COMExcep tion" произошло в Link1C.exe
Дополнительные сведения: В результате вызова компонента COM возвращена ошибка в формате HRESULT E_FAIL.

P.S. система Windows 7 x64. 1С лицензионная, установлена в системе. Разработка ведется для x86 платформы в VS2010. База такая существует, пользователь в ней создан. Права на папку выданы

P.P.S только что обнаружил что во время выброса исключения в папке с базой появляются два *tmp* файлика, которые исчезают. То есть что-то происходит во время подключения, а что не понятно.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.05.2014, 08:07
Ответы с готовыми решениями:

Исключение при подключении к БД
привет! есть код:<?php class con{ private function podkl() { try{ $link=mysql_connect('localhost' , 'root' , ''); if...

Исключение при подключении к серверу
Приветствую. Вопрос вот в чём при подключении к серверу если сервер отключен, в средствах диагностики возникает исключение притом не один...

Исключение InvalidOperationException при подключении
Ошибка An unhandled exception of type 'System.InvalidOperationException' occurred in System.Data.dll, указывает на connect.open(), что ни...

58
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
06.06.2014, 14:06
Лучший ответ Сообщение было отмечено Wizard как решение

Решение

Студворк — интернет-сервис помощи студентам
Держи два варианта через COM (твой) и через Apllication

C#
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
using System;
using System.Windows.Forms;
using System.Reflection;
using System.Text;
using V82;
 
namespace COM_1C
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
 
            var v82ComConnector = Type.GetTypeFromProgID("V82.Application");
            dynamic V82 = Activator.CreateInstance(v82ComConnector);
            string t = @"File=""C:\DазыустаяБаза"";Usr="""";" ;
            Object[] ar = {};
            Object[] arguments = { t };
            dynamic isConnected = v82ComConnector.InvokeMember("Connect", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, V82, arguments);
            //v82ComConnector.InvokeMember("Visible", BindingFlags.Public | BindingFlags.SetProperty, null, V82, new object[] { true });
            dynamic _Module = v82ComConnector.InvokeMember("Модуль", BindingFlags.Public | BindingFlags.GetProperty | BindingFlags.Static, null, V82, ar);
 
            string _ResaltFunc = _Module.МояФункция();
 
            V82 = null;
            v82ComConnector = null;           
 
            MessageBox.Show(_ResaltFunc);
        }
 
 
        private void button2_Click_1(object sender, EventArgs e)
        {
 
            string user = "Admin";
            string pas = "123456";
            string file = @"C:\D\Базы\ПустаяБаза";
            dynamic result;
            dynamic refer;
            V82.COMConnector com1s = new V82.COMConnector();
 
            com1s.PoolCapacity = 10;
            com1s.PoolTimeout = 60;
            com1s.MaxConnections = 2;
            result = com1s.Connect("File='" + file + "';Usr='" + user + "';pwd='" + pas + "';");
            refer = result.Справочники.Номенклатура.СоздатьЭлемент();
            refer.Наименование = "Создано из C#";
            refer.ОбменДанными.Загрузка = true;
            refer.Записать();
 
        }
 
    }
}
2
0 / 0 / 0
Регистрация: 29.05.2014
Сообщений: 41
06.06.2014, 14:15  [ТС]
А-ЧУ-МЕТЬ. Прошу прощения. Взял вот эту строчку
C#
1
refer.ОбменДанными.Загрузка=true
и заработало! Но возникает резонный вопрос - а почему тогда в примере на инфостарте этого нет?
P.S. Большое спасибо) неделю бился над этой проблемой.

Добавлено через 2 минуты
Мало того, вы решили случайно мою следующую проблему) проблему совместимости с разными версиями платформы! Теперь просто меняя аргумент у GetTypeFromID я могу и к 7 подключаться и к 8
0
 Аватар для wwall
213 / 204 / 15
Регистрация: 29.05.2014
Сообщений: 1,058
06.06.2014, 14:19
странно, почему же заработало? может великий маг и волшебник Dethmontt расскажет что нибудь об этой строчке?

А случайно у вас еще нет случайных проблем? Люблю случайное программирование
0
0 / 0 / 0
Регистрация: 29.05.2014
Сообщений: 41
06.06.2014, 14:34  [ТС]
wwal, Ну сейчас перехожу к следующему шагу - создание накладной по данным пришедшим с COM порта) Видимо тут что-то будет)

Добавлено через 9 минут
Dethmontt, потихонечку раскапываю проблему. Накопал ПередЗаписью а в нем
1C
1
2
3
Если ОбменДанными.Загрузка Тогда
   Возврат;
КонецЕсли;
Выходит это костыль? Видимо ошибка выскакивает во второй части ПередЗаписью. Как бы разобраться, в чем именно...

Добавлено через 2 минуты
1C
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
// Обработчик события ПередЗаписью формы.
//
Процедура ПередЗаписью(Отказ)
 
    Если ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;
    
    Если НЕ ЭтоГруппа Тогда
        
        Если НЕ ЭтоНовый() Тогда
                Если Услуга <> Ссылка.Услуга И СуществуютСсылки()Тогда
                
                ТекстСообщения = "Номенклатура """ + СокрЛП(Ссылка) + """ участвует в товародвижении.
                |Признак услуги не может быть изменен!";
                ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения, Отказ);
                
            КонецЕсли;
        КонецЕсли;
        
        Если НЕ Услуга Тогда
            Если НЕ ЗначениеЗаполнено(БазоваяЕдиницаИзмерения) Тогда
                ОбщегоНазначения.СообщитьОбОшибке("Перед записью необходимо определить единицу измерения!", Отказ);
            КонецЕсли;
        КонецЕсли;
        
    КонецЕсли;
 
КонецПроцедуры // ПередЗаписью()
вот весь текст её. Не пойму что здесь может выкидывать эксепшн. Это не группа, новый элемент, БазоваяЕдиницаИзмерения стоит, и не услуга.
0
 Аватар для wwall
213 / 204 / 15
Регистрация: 29.05.2014
Сообщений: 1,058
06.06.2014, 14:38
не нравиться мне эта строка -
1C
1
ОбщегоНазначения.СообщитьОбОшибке("Перед записью необходимо определить единицу измерения!", Отказ);
может и тебе она не понравиться?
0
0 / 0 / 0
Регистрация: 29.05.2014
Сообщений: 41
06.06.2014, 14:45  [ТС]
wwall, я пробовал и с ней и без неё. ( я про refer.БазоваяЕдиницаИзмерения).
То есть вот последний код записал элемент и без неё, а вот сама 1С вручную не дает записать элемент без единицы измерения
0
 Аватар для wwall
213 / 204 / 15
Регистрация: 29.05.2014
Сообщений: 1,058
06.06.2014, 14:47
ну наверное есть резоны у нее так поступать. не знаю почему - но любит 1с что бы была единица измерения.
а ты просто не указал эту базовую единицу.
0
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
06.06.2014, 14:48
1C
1
2
3
4
Если НЕ Услуга Тогда //Это услуга? если нет ТОГДА
            Если НЕ ЗначениеЗаполнено(БазоваяЕдиницаИзмерения) Тогда //А заполнена ли базовая единица ? Если нет ТОГДА
                ОбщегоНазначения.СообщитьОбОшибке("Перед записью необходимо определить единицу измерения!", Отказ); // А ВОТ ТУТ ЭКСЕПШН
КонецЕсли;
0
0 / 0 / 0
Регистрация: 29.05.2014
Сообщений: 41
06.06.2014, 14:49  [ТС]
И еще код не добавляется в справочнике....это же нехорошо.

Добавлено через 32 секунды
refer.БазоваяЕдиницаИзмерения = "шт";
0
 Аватар для wwall
213 / 204 / 15
Регистрация: 29.05.2014
Сообщений: 1,058
06.06.2014, 14:51
1C
1
refer.БазоваяЕдиницаИзмерения = "шт";
ой... а точно в типовухе базовая еи - строка?

Добавлено через 46 секунд
или сверхинтелектуальный шарп догадается как из строки сделать ссылку на элемент справочника сам?
1
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
06.06.2014, 14:52
Цитата Сообщение от Wizard Посмотреть сообщение
И еще код не добавляется в справочнике....это же нехорошо.
А для этого в 1С есть метод:
C#
1
refer.УстановитьНовыйКод();
1
0 / 0 / 0
Регистрация: 29.05.2014
Сообщений: 41
06.06.2014, 15:00  [ТС]
wwall, хм.

Добавлено через 7 минут
Все добил) Теперь без костылей! Всем спасибо что разжевали

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
        private void button1_Click(object sender, EventArgs e)
        {
            string user = @"""Admin""";
            string pas = @"""123456""";
            string file = @"""D:\1CBase\AccountingBase""";
            dynamic result;
            dynamic refer;
            V82.COMConnector com1s = new V82.COMConnector();
            
            
            com1s.PoolCapacity = 10;
            com1s.PoolTimeout = 60;
            com1s.MaxConnections = 2;
            string con = "File=" + file + ";Usr=" + user + ";Pwd=" + pas + ";";
            result = com1s.Connect(con);
            refer  = result.Справочники.Номенклатура.СоздатьЭлемент();
            refer.УстановитьНовыйКод();
            refer.Наименование = "Персики";
            refer.НаименованиеПолное = "Персики солнечные";
            refer.БазоваяЕдиницаИзмерения = result.Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("796");
            refer.Записать();
                      
                       
        }
0
06.06.2014, 15:02

Не по теме:

Ты если чё, заходи... У тебя же еще расходная накладная впереди

0
0 / 0 / 0
Регистрация: 29.05.2014
Сообщений: 41
10.06.2014, 08:09  [ТС]
Есть первая версия создания документа Реализация товаров и услуг
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private void button2_Click(object sender, EventArgs e)
        {
            refer = result.Документы.РеализацияТоваровУслуг.СоздатьДокумент();
            refer.Дата = "20140610120000";
            refer.Организация = result.Справочники.Организации.НайтиПоНаименованию("ООО ВИК \"Эталон\"");
            refer.Контрагент = result.Справочники.Контрагенты.НайтиПоНаименованию("ЗЖБИ-4");
            refer.Склад = result.Справочники.Склады.НайтиПоНаименованию("Основной склад");
            refer.СпособЗачетаАвансов = result.Перечисления.СпособыЗачетаАвансов.Автоматически;
            
            dynamic refer_table = refer.Товары;
            dynamic new_row = refer_table.Добавить();
            new_row.Номенклатура = result.Справочники.Номенклатура.НайтиПоНаименованию("Персики");
            new_row.Количество = 40;
            new_row.Цена = 120;
            new_row.Сумма = new_row.Количество * new_row.Цена;
            refer.Записать();
 
        }
Известные огрехи:
-не получается получить дату непосредственно из 1С
-если контрагента, номенклатура, организации в базе нет - выкинет исключение
-тип операции (Продажа или комиссия) не ставится автоматически
-не подставляется автоматически договор с контрагентом и, как следствие, валюта документа

А так документ создается и есть в базе
0
 Аватар для wwall
213 / 204 / 15
Регистрация: 29.05.2014
Сообщений: 1,058
10.06.2014, 09:51
ты бы фантазию отключил, а мозг включил. Поможет.
в чем у тебя проблема с датой - не понял если честно.
(1) Заполнение реквизитов документа выполняется в типовой только в форме. а у тебя тут формы нет, голый объект.
тип операции - смотри пункт (1)
договор и прочее - смотри пункт (1)

Резюме - лезь смотреть код.
0
0 / 0 / 0
Регистрация: 29.05.2014
Сообщений: 41
10.06.2014, 09:55  [ТС]
wwall, при чем здесь фантазия?) Я бы без код из 1С и помощника по синтаксису не создал бы кстати. Там же нашел что делать, чтобы подставить договор. А насчет даты - я тут взял и просто строчку по формату вставил. Есть же другие методы - ТекущаяДата или РабочаяДата - я не могу их почему то взять - приложение эксепшн выдает, что нет таких свойств.
0
 Аватар для wwall
213 / 204 / 15
Регистрация: 29.05.2014
Сообщений: 1,058
10.06.2014, 11:11
фантазия - есть свойство мозга принимать желаемое за действительное.
В твоем случае - ТекущаяДата() это метод который 1С интерпретирует внутри себя и никак не транслирует в мир, но если ты откроешь синтаксис помощник, и попросишь показать все методы и свойства глобального контекста то с удивлением обнаружишь что этот жестокий мир дает тебе как минимум 3 даты - ТекущаяДатаСеанса (CurrentSessionDate)
ТекущаяУниверсальнаяДата (CurrentUniversalDate)
ТекущаяУниверсальнаяДатаВМиллисекундах (CurrentUniversalDateInMilliseconds)
которые ты можешь использовать как тебе захочется.

Добавлено через 1 минуту
и еще - я конечно не знаю постановки задачи, но сделал бы с точностью до наоборот - в 1С описал бы все что нужно, выставив просто интерфейс в мир. А как его там юзать - было бы дело каждого отдельного индивида
0
0 / 0 / 0
Регистрация: 29.05.2014
Сообщений: 41
10.06.2014, 11:23  [ТС]
wwal, у меня задача создавать документ Реализация товаров из своего приложения, которое общается с весовым терминалом через COM-порт. Вариантов много - внешняя компонента, web-сервисы, COM и OLE. И я до сих пор сомневаюсь в правильности выбранного решения работать через COM.
0
 Аватар для wwall
213 / 204 / 15
Регистрация: 29.05.2014
Сообщений: 1,058
10.06.2014, 11:28
стоп, дружище. Ты хочешь чего? что бы тебе заказчик в итоге за каждый чих платил? тогда ты прав - надо самому создавать расходные накладные, будет на хлебушек с колбаской. Но если ты хочешь что бы тебя уважали как спеца - сделай по другому - пусть твоя читалка весов будет ком объектом. Проинтегрируй ее как внешнее оборудование под интерфейс выставленный 1с и жизнь будет проще (БСП все равно будет захватывать мир, не смотря на наше отношение к этому)
0
0 / 0 / 0
Регистрация: 29.05.2014
Сообщений: 41
10.06.2014, 11:30  [ТС]
wwall, свой COM Объект это довольно серьезная задумка. Такое реализовали CAS - у них универсальный драйвер для подключения любых весов и терминалов в 1С. Но это, откровенно говоря, сложно. Можно ли сделать полноценное windows forms приложение на .net и превратить во внешнюю компоненту для 1с, не взирая на версию платформы или конфигурации?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.06.2014, 11:30
Помогаю со студенческими работами здесь

Исключение при подключении локали
Доброго времени суток, уважаемые форумчане! Вот такой кодstd::locale::global(std::locale(&quot;Russian&quot;)); вызывает исключениеterminate...

Возникает исключение при подключении к серверу
Подключение к серверу в программе происходит в блоке try-except: try //подключение к серверу ...

Необработанное исключение при подключении клиента к серверу
Добрый вечер, нуждаюсь в вашей помощи. Есть у меня такой вот код: using System; using System.IO; using System.Text; ...

Выдано исключение типа "System.FormatExcep при подключении карты в WPF/XAML
Делаю WPF приложение, подключил карту , теперь пытаюсь сделать реализацию центрирования по заданной координате выдаёт исключение ...

База данных. Ошибка при подключении "Исключение ввода/вывода"
Есть удаленная база данных oracle 11g на centOS. при подключение выдает ERROR org.hibernate.util.JDBCExceptionReporter - Исключение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru