Имя: Пароль:
1C
1С v8
1c 8.3 + c#+ dynamic
0 sands74
 
31.08.14
17:21
Облазил весь интернет, куцая информация вообще, не говоря про то, что в 8.3 в справке напрочь исчез раздел работы с Контрагентами.

Проблема в следующем, есть код:
V83.COMConnector __v83 = new V83.COMConnector();
dynamic __c1 = __v83.Connect(@"File=C:\Data\;Usr='Администратор';pwd=''");
dynamic Контрагенты = __c1.Справочники.Контрагенты;
dynamic найтиПоКоду = Контрагенты.НайтиПоКоду("123");
if (найтиПоКоду != null)
{
}

Как можно получить (а там д.б. вроде как (int)1) в переменной найтиПоКоду.

Буду признателен за ответ.
1 shuhard
 
31.08.14
17:22
(0)[не говоря про то, что в 8.3 в справке напрочь исчез раздел работы с Контрагентами]
доктора в топик, срочно
2 sands74
 
31.08.14
17:31
Ага, 1С:Предприятие 8.3 (8.3.5.1088),
Меню\Синтаксис помощник\Индекс,
ищу Контрагент
результат = нет
3 Escander
 
31.08.14
17:33
(2) а теперь расскажи когда она там была
4 sands74
 
31.08.14
17:33
в c# как можно выдернуть значение результата выполнения функции НайтиПоКоду?
в if предполагается занести нового контрагента, если такого нет по коду
5 sands74
 
31.08.14
17:35
2Escander
Прикольно, а я не знаю, просто в 7.7 вроде была, а мне надо контрагентов перекачать 70000 штук, из них штук 30000 уже есть. качаю из сиквела. скрипт код 1с не предлагать.
6 Escander
 
31.08.14
17:36
(5) в 7.7 в справке и даже двухтомнике по макроязыку не было про Контрагентов.
7 shuhard
 
31.08.14
17:38
(5)[ качаю из сиквела. скрипт код 1с не предлагать.]
и пофиг, что в 8.х написать запрос к сиквелу через  ADODB займёт 30 секунд
8 sands74
 
31.08.14
17:42
2 Escander
Ну монстр тогда )) Я тупо решаю пригладные задачи, вытащил свой кусок кода, пытаюсь присандалить в c# 4.0
Не могу получить значение.
Я конечно признателен, что мы стали обсуждать справку, но решение есть вообще какое-либо?

Напомню:
dynamic найтиПоКоду = Контрагенты.НайтиПоКоду("123");

Получить значение:
найтиПоКоду

Вроде как int ...
9 Аденэсниг
 
31.08.14
17:43
принес попкорн
10 sands74
 
31.08.14
17:44
Внутренние скрипты не предлагать, мне надо проверить есть ли Контрагент с заданным кодом. Исходник в топе.
11 Escander
 
31.08.14
17:46
(8) ну вообще-то тут четь меньше чем немерянно тех кто это напишет на языке 1С (я-б не называл его скриптовым языком в контексте 8.*). А вот по динамиксу - это ты неудачно зашёл...

Если база на сиквеле одинэсовская, то тип поля код может быть и строковый.
12 sands74
 
31.08.14
17:48
Он строковый, НайтиПоКоду("1sdfsdf23"), в делфях мне возвращает 1, в шарпе

var найтиПоКоду = Контрагенты.НайтиПоКоду("1sdfsdf23");
if (найтиПоКоду == 1)

ошибка:
Ошибка    22695    Не удается применить оператор "==" к операндам типа "System.__ComObject" и "int"
13 sands74
 
31.08.14
17:52
2 Escander,
" ... я-б не называл его скриптовым языком ..."
он такой и есть, тупо пошаговый, маш код не генерит, может свой скрипт окучивает в нечитабельность, для продвинутости, но это я могу сделать за секунду любым из алгоритмов в шарпе
14 Escander
 
31.08.14
17:52
(12) скажу последний раз: тут чуть меньше чем немерянно тех кто это напишет на языке 1С (я-б не называл его скриптовым языком в контексте 8.*). А вот по динамиксу - это ты неудачно зашёл...
15 Escander
 
31.08.14
17:53
вот  смотрю....
__v83.Connect(@"File=C:\Data\;Usr='Администратор';pwd=''")

база точно на сиквеле?
16 Escander
 
31.08.14
17:54
но если тебе религия запрещает писать на 1С - я тебе точно не помогу
17 mikecool
 
31.08.14
17:54
(0)
смотри, что метод возвращает
СправочникМенеджер.<Имя справочника>.НайтиПоКоду (CatalogManager.<Имя справочника>.FindByCode)
СправочникМенеджер.<Имя справочника> (CatalogManager.<Имя справочника>)
НайтиПоКоду (FindByCode)
Синтаксис:

НайтиПоКоду(<Код>, <ПоискПоПолномуКоду>, <Родитель>, <Владелец>)
Параметры:

<Код> (обязательный)

Тип: Число; Строка.
Искомый код.
Строка или число в зависимости от настроек справочника в конфигураторе.
<ПоискПоПолномуКоду> (необязательный)

Тип: Булево.
Определяет режим поиска по полному коду. Истина - искомый код следует задавать в виде строки, состоящей из последовательности кодов по уровням справочника, разделенных символом "/".
Значение по умолчанию: Ложь.
<Родитель> (необязательный)

Тип: СправочникСсылка.
Родитель, в пределах которого нужно выполнять поиск. Если не указан, то поиск будет проводиться во всем справочнике.
<Владелец> (необязательный)

Тип: СправочникСсылка.
Владелец, в пределах которого нужно выполнять поиск. Если не указан, то поиск будет проводиться во всем справочнике.
Возвращаемое значение:

Тип: СправочникСсылка.<Имя справочника>; Неопределено.
Если не существует ни одного элемента с требуемым кодом, то будет возвращена пустая ссылка.
Если для справочника код не задан (длина = 0), то будет возвращено Неопределено.
Описание:

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

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

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Пример:

СтрокаКода = "840";
Валюты = Справочники.Валюты;
НайденнаяСсылка = Валюты.НайтиПоКоду(СтрокаКода);
Если НайденнаяСсылка = Валюты.ПустаяСсылка() Тогда
    Сообщить("Валюты """ + СтрокаКода + """ еще нет");
КонецЕсли;


--------------------------------------------------------------------------------

     Методическая информация
18 sands74
 
31.08.14
17:56
Гм, в том то и дело что запрещает, в канторе сидят тупые сапортеры, выйдет патч, они неглядя все накатят и все, сколько раз уже было, вымораживает мозг вспоминать что где у кого и где лежало (((
19 mikecool
 
31.08.14
17:56
+17 как в дельфях он у тебя цифирь возвращал - хз, наверное какое то приведение срабатывало под тип переменной
20 Escander
 
31.08.14
17:57
(17) это про справочник Валюты - ему нужно про справочник Контрагенты... писать на "скрипте 1С" запрещает религия...
21 mikecool
 
31.08.14
17:58
(18) как это относится к внешней обработке, написанной на 1с, лежащей где тебе надо? и вообще - кто тебя допустил импортить контров в базу, если ты даже синтаксиса не знаешь?
22 Escander
 
31.08.14
17:58
(19) Boolean, если не запамятовал, приводится к Int веде и всюду (значения 0 и 1)
23 sands74
 
31.08.14
17:59
ребяты, я на несколько серверов пишу сервис, который и знать не знает что там. он имеет строку подключения к 1с, и засасывает/обновляет контрагентов.
Именно сервис, он фоновый, ничего не вызывает, а 1с вызывает именно так.
24 Escander
 
31.08.14
17:59
(21) см (18) >в канторе сидят тупые сапортеры
25 mikecool
 
31.08.14
18:01
(23) напиши веб-сервис в 1с и обращайся к нему
26 sands74
 
31.08.14
18:02
Более того, сервис облачный, он высасывает свое тело откуда-то, запускается и лопатит.
Мне надо узнать есть ли гребанный Контрагент по заданному коду. Если в dynamics c# никто не может подсказать, не буду отвлекать больше ваше внимание.
27 shuhard
 
31.08.14
18:02
(25) у чела классовая вражда с 1С, какой нах веб-сервис
28 mikecool
 
31.08.14
18:03
(26) спасибо за понимание, не отвлекай, будь лаской
29 sands74
 
31.08.14
18:09
2 shuhard
отнюдь, много серверов, много баз, не хочется мышой шевелить и что то запускать, в винсервисе массы процессов делаются, обновляется все на головном сервере, сателлиты скачивают бинарники, когда пришло время и работают, итог = я не трогаю 1с, и меня не трогают филиалы.
30 Xapac
 
31.08.14
19:43
(0) а select-ом пробовал?
31 Garykom
 
гуру
31.08.14
20:04
(9) нее мне попкорна не хватит, пошел за пывом...
32 Garykom
 
гуру
31.08.14
20:09
Кстати и че мы так студентов нахватавшихся по верхам C#-па и лезущих потом в 1С не любим? ))
33 Dmitry1c
 
31.08.14
20:38
(-_\\
34 zulu_mix
 
31.08.14
20:45
if (найтиПоКоду != __c1.Неопределено)
35 zulu_mix
 
31.08.14
20:46
if (найтиПоКоду != Контрагенты.ПустаяСсылка())
36 sands74
 
01.09.14
15:41
2 zulu_mix
Спасибо!

работает еще и так
string Код = Контрагенты.НайтиПоКоду("123").Код;
if (!string.IsNullOrEmpty(Код .Trim()))
{
   ....
}
37 Garykom
 
гуру
01.09.14
16:02
(36) наверно будет откровением но код у контрагента может быть пустым...

притом что сам контрагент нормальный и заполнен или быть не пустым а из N числа пробелов ))
38 sands74
 
01.09.14
16:08
2 Garykom

большое спасибо! учту!
39 Ненавижу 1С
 
гуру
01.09.14
16:08
if (найтиПоКоду.IsEmpty()) {

}
40 Serginio1
 
01.09.14
16:24
if (__c1.ЗначениеЗаполнено(найтиПоКоду){

}
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший