Имя: Пароль:
1C
1С v8
Уникальный идентификатор в 1с 7 или что то типа того
0 ugorchina
 
12.04.18
05:41
Всем привет!

Нужна помощь толкните мою сидую голову в нужное направление

Пишу обмен между 1с 8 и 1с 7 по ОЛЕ

но ылазит ряд проблем следующего рода

7-ка без партий а соответвенно бухалтера дублирую номенклатуру

этих дублей куча одинаковое все Наименование, артикул и даже бывает код (

зацепиться при обмене не за что отсюда вывод надо что то придумывать

1. решение создать в 7-ке реквизит и делать его уникальным затем цепляться по нему но мне бы не хотелось дорабатывать 7-ку

2. решение получить уникальный идентификатор посредством Значениевстроку или на оборот из строки Но мне что то не понятно как это замутить не храня этот значение в 7-ке а получив его в 8-ке запрашивать его в обще мне понятно как это все замутить то?
1 los_hooliganos
 
12.04.18
05:47
Откуда и куда идет обмен?
Исходя из этого решать где заводить ключ для обмена.
2 ugorchina
 
12.04.18
05:47
+(0) если я буду получать примерно так

Объект = БазаОле.ЗначениеВстрокуВнутр(Док_Источник.ТекущийДокумент());
ИдентификаторДокумента = СокрЛП(ПолучитьИД(Объект));

затем производить запись в 8-ку полученное значение а после сново поизведу его запрос в там же виде он останется неизменным?

или на каждый Объект = БазаОле.ЗначениеВстрокуВнутр(Док_Источник.ТекущийДокумент());
ИдентификаторДокумента = СокрЛП(ПолучитьИД(Объект));
значение будет другим?
3 los_hooliganos
 
12.04.18
05:47
В Бухгалтерии необходимо сделать зачистку дублей.
4 ugorchina
 
12.04.18
05:48
обмен идет из 8-ки
5 ugorchina
 
12.04.18
05:48
+(3) нельзя они числятся в остатках это решение у многих бухалтеров она таким обр обходятся без партий посредством тупого дублирования
6 los_hooliganos
 
12.04.18
05:58
(2) Да ИД неизменный.
Он уникальный для каждого документа.
В справочнике идет своя нумерация. Уникальность только в пределах справочника.
ИД "расширяется" если используется УРБД.
В конце ИД добавляется ИБ базы-родителя элемента
7 ugorchina
 
12.04.18
06:00
итак вопрос касательно того меняется ли значение

посредством его получения таким образом

Объект = ОбъектV77.ЗначениеВстрокуВнутр(НоменклатураОЛЕ.ТекущийЭлемент());
                  ИдентификаторОбъекта = СокрЛП(Объект);
                  ДДД.ИД = ИдентификаторОбъекта;


Нет не меняется получил первый раз затем еще раз и еще и после вошел в 7-ку изменил этот объект и сново попробовал его получить значение осталось тем же

{"B","0","0","156","0","0","     17141   "}
{"B","0","0","156","0","0","     17141   "}
{"B","0","0","156","0","0","     17141   "}

в общем тепреь вопрос стоит в том как составить запрос сразу по данному ИДентификатору ил же придется делать условие если ид в 8-ке равно ид полученный?
8 ugorchina
 
12.04.18
06:01
+(7) хотя чего это я я уже сам придумал спасибо!
9 ugorchina
 
12.04.18
06:03
+(8) хотя нет! ) еще вопрос как из {"B","0","0","156","0","0","     17141   "} получить только

17141

или это значение может изменится или оно будет не всегда уникальным (в пределах одного спр или документа?
10 ugorchina
 
12.04.18
06:17
(9) если не возможноо (9) то может необходимо убрать пробелы? не получится ли так что к примеру получу дв аразных ида вот таких?

{"B","0","0","156","0","0","     17141   "}
{"B","0","0","156","0","0","  17141   "}

или они всегда будут вида

{"B","0","0","156","0","0","     17141   "}
{"B","0","0","156","0","0","     17141   "}
{"B","0","0","156","0","0","     17141   "}
{"B","0","0","156","0","0","     17141   "}
11 VladZ
 
12.04.18
06:30
(10) В значениии {"B","0","0","156","0","0","     17141   "} зашит тип объекта, его вид и идентификатор. Если у тебя реквизит определенного вида - тебе для работы хватит и идентификатора. Это цифра 17141.
12 VladZ
 
12.04.18
06:33
+11 Если не нужно производить "обратную идентификацию" - используй последнюю цифру.

Обратная идентификация - это понятно что такое?

В 7.7 по  {"B","0","0","156","0","0","     17141   "} ты сможешь получить сразу получить ссылку на объект. А чтобы получить ссылку по одно цифре (17141) - тебе понадобится лампа и Алладин.
13 ugorchina
 
12.04.18
06:48
(12) я пишу запрос по оле разве можно как то получить значение по этой ссылке?

и еще вопрос как получить только 17141    из {"B","0","0","156","0","0","     17141   "} что то я не догоняю
14 ugorchina
 
12.04.18
06:49
но мне честно говоря это значение необходимо что бы сравнивать элементы в 8-ке с элементами в 7-ке

в обмене будут участвовать только номенклатура и документ один и все

на 8-ке самописная конфига для обмена с сайтом хочу использовать ее как промежуточную
15 VladZ
 
12.04.18
06:54
(13) "запрос по оле" - оле убогая хрень.

Из {"B","0","0","156","0","0","     17141   "} убираешь скобки, кавычки. Заменяешь запятую на перевод строки и получаешь седьмую строку и убираешь пробелы.
16 ugorchina
 
12.04.18
08:44
(15) спасибо! а чем ОЛЕ Убогая?
17 HK_Mers
 
12.04.18
08:49
(16) не легче с конца первую запятую найти и от этой запятой уже взять только хвост, чем заменять запятые на перевод строки и потом ещё и седьмую строку брать?
18 ugorchina
 
12.04.18
09:21
Вот в общем код получения только идентификатора

(Не знаю может не верно сделал но надеюсь что правильно)

Функция ПолучитьИД(Объект)
БезКавычекФигурных = СтрЗаменить(Объект,"{","");    
БезКавычекФигурных = СтрЗаменить(БезКавычекФигурных,"}","");
БезПробелов        = СокрЛП(БезКавычекФигурных);
КоличествоЗнаков   = СтрНайти(БезПробелов,",",НаправлениеПоиска.СКонца)+3;
Возврат СокрЛП(Сред(Лев(БезПробелов,СтрДлина(БезПробелов)-1),КоличествоЗнаков,СтрДлина(БезПробелов)));
КОнецФункции
19 big
 
12.04.18
09:30
(18) Не слушай (17). В этой строке присутствует и тип объекта, и его вид, и его ИД. Из примера в (15) Надо как минимум взять 156 и 17141. Это будет вид и ИД объекта.
20 igorPetrov
 
12.04.18
09:31
(18) Ппц.
21 ugorchina
 
12.04.18
09:32
+(19) +(20) спасибо! Но скажите чем же убогая вещь ОЛЕ?
22 hhhh
 
12.04.18
09:42
(21) переходите на вэб-сервисы уже.
23 hhhh
 
12.04.18
09:44
(21) приделайте для семерки обмен по универсальному формату Enterprise Data. Вот это бы было классно.
24 big
 
12.04.18
09:58
(21) Весьма и весьма медленно всё.
По мне лучше по ОЛЕ вызвать какую-нить функцию из глобального модуля, которая всё выгрузит в файл, а уже из файла это всё подхватить в 8-ку
25 los_hooliganos
 
12.04.18
10:01
(24) Согласен, это намного быстрее.
26 Builder
 
12.04.18
10:17
Есть решение проще.
1. Перенумеровать коды в уникальные.
2. Включить у кодов уникальность.
3. Наслаждаться.
27 user-ok
 
12.04.18
10:31
а чем КД не угодила? зачем OLE?
28 VladZ
 
12.04.18
10:48
(18) "убираешь скобки, кавычки. Заменяешь запятую на перевод строки и получаешь седьмую строку и убираешь пробелы." - как написал, так и нужно делать

ВремСтрока = ИсходныйКод;

ВремСтрока = СтрЗаменить(ВремСтрока,"{","");  // убрали скобки  
ВремСтрока = СтрЗаменить(ВремСтрока,"}","");
ВремСтрока = СтрЗаменить(ВремСтрока,"""",""); // убрали кавычки
ВремСтрока = СтрЗаменить(ВремСтрока,",",РазделительСтрок); // заменили запятую

Идентификатор = СокрЛП(СтрПолучитьСТроку(ВремСтрока,7)); // получили нужный параметр
29 VladZ
 
12.04.18
10:49
+28 Код работает как в 7.7, так и в 8.x.
30 VladZ
 
12.04.18
11:03
(21) Во-первых, код громоздкий. Писать ложнее и читать сложнее. Скорость разработки никакая. Но это ерунда. Допустим, ты нагородил этот код. Все у тебя волшебным образом подключается, выгружается и т.д. И тут ты думаешь, а поставлю на ночь выполняться, чтобы не мешать никому. А заодно, для повышения скорости, зафигачу сюда транзакции!

И тут вторая проблема: с транзакциями облом!  И в итоге может получится так, что выгрузить из одной программы в файлик и загрузить этот файли в другую программу, не используя оле, будет быстрее на порядок.  При больших объема данных параметр "скорость" важнее, чем "грузить напрямую".
31 ugorchina
 
12.04.18
14:28
в обмене будет учавствовать всего один справочник и один документ и те регистрируются при создании или изменении как изменнный что позволяет не запрашивать обьемных данных

запрос отрабатывает за три секунды это минимум и макс двадцать сек
32 ugorchina
 
12.04.18
14:53
(30) не соглашусь это уже третяя моя промежуточная программа и все летает ОЛЕ нормлаьно работает а с файлами мне не нравится работать )

так как файлы надо положить куда то и т д а  если по ОЛЕ то нужен  правильный подход что бы быстро отрабатывало НА 7-ке я подготавливаю данные собираю их в одном месте и после произвожу запрос по ЛЕ и все летает!
33 ugorchina
 
12.04.18
14:59
+(32) к тамуже эта база как промежуточная в ней не будет никто работать она будет оплучать данные из 7 и отправлять их на сайт а так же принимать данные с сайта и отправлять их в 7
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.