Имя: Пароль:
1C
1С v8
Как передавать по ОЛЕ только измененные объекты
0 ugorchina
 
10.04.18
09:00
Подскажите пожалуйста
я создал справочник "Товары" в 1с8 из реквизитов ничего не добавлял
по (ОЛЕ) заполняю данный справочник

после при обмене я бы хотел получать из 1с7 по ОЛЕ в 1с8 только измененные данные например

в 1с7 имеется два товара

при первом обмене я получил оба товара как есть
затем в 1с7 изменил например наименование в одном из товаре и при обмене я бы хотел получить только элементы которые 1. изменяли 2. создали (новые)

как это реализовать? можно ли без доработок 1с7?

можно конечно создать доп реквизит в справочниках и документах например изменен и при записи или проведении устанавливать признак изменения а в запросе по ОЛЕ 1. получать только с помеченным флагом но затем мне необходимо будет изменить данный флаг в исходное состояние а это затребует дополнительное время как сделать сие чудо средствами платформы?
1 Cool_Profi
 
10.04.18
09:04
Настроить УРБД и читать из его таблиц
2 ugorchina
 
10.04.18
09:11
а без УРБД никак?
3 Cool_Profi
 
10.04.18
09:14
(2) Ну, ты можешь своими руками изобразить аналог 8шного плана обмена и регистрации изменений. Только зачем?
4 xxTANATORxx
 
10.04.18
09:15
(2) в (1) самый простой вариант
можно еще добавить справочник "Измененные объекты", и при записи справочника Товары, делать запись в этот справочник ну и так далее
5 Остап Сулейманович
 
10.04.18
09:15
(2) Запилить свою службу регистрации изменений. Например писать в справочник редактируемые объекты. После обмена удалять.
"можно ли без доработок 1с7?" - нет. никто не знает что именно изменялось с момента последнего обмена.
6 ugorchina
 
10.04.18
09:17
А можете дать ссыль как настроить УРБД между 1с7 и 1с8 при этом я хотел бы получить инфу только справочника и одного документа
7 Остап Сулейманович
 
10.04.18
09:18
(1) Читать оно конечно таки да. Но нужно еще механизм передачи в семерку квитанций о приеме пакетов УРБД. Ибо в идеале количество объектов в выгрузке будет стремиться к количеству объектов в базе.
8 ugorchina
 
10.04.18
09:20
(7) ок буду делать по флагу ( спасибо
9 ugorchina
 
10.04.18
09:20
просто спр товаров состоит из 20 000 наименований (
10 Остап Сулейманович
 
10.04.18
09:21
11 ugorchina
 
10.04.18
09:21
еще вопрос
в 1с 8 имеется уникальный идентификатор он не меняется у элемента  или же при перезаписи меняется?
12 Evgenchik
 
10.04.18
09:22
не меняется
13 Сияющий в темноте
 
10.04.18
09:24
и в 7 и в 8 есть уникальныц идентификатор,просто в семерке это число,а в восьмерке это гуид,они присваиваются при записи и не меняются
14 ugorchina
 
10.04.18
09:25
а можно ли в семерке непосредственно в глобальнике перехватить функцию при записи справочника или документа?

я просто делаю универсальную промежуточную конфигу на 8-ке для обмена с сайтами для битрикса и других популярных CMS хотел обойтись без доработок 1с 7 (

то есть большинство моих клиентов которые обращаются ко мне за разработкой сайтов работают на 1с7 вот думал сделать свою промежуточную конфигу (
15 Остап Сулейманович
 
10.04.18
09:25
(8) По флагу неправильно. Правильно - см (4).
16 ugorchina
 
10.04.18
09:26
(14) то есть думал сделать так что бы как можно меньше вносить изменений в главную конфигу 1с7 что бы поставил 8-ку промежуточную и настроил обмены и все работает
17 Остап Сулейманович
 
10.04.18
09:26
(14) Программная запись не перехватывается вообще. Интерактивная - из формы объекта.
18 Мимохожий Однако
 
10.04.18
09:27
(14) Лучше в 1с77 написать обработку по выгрузке в нужном формате.
19 ugorchina
 
10.04.18
09:28
+(4) ++(15) спасибо буду подумать ( я еще собирался добавить в справочники реквизит уникальный идентификатор что бы после получения списка товаров из 1с7 выгрузить их уники в 1с7 что бы потом по ним поучать элементы

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

этот реквизит сделать не видимым
20 ugorchina
 
10.04.18
09:31
(18) не проканает много клиентов и у всех разные конфиги каждую дорабатывать не очень охото

я уже написал промежуточную и теперь с сайтами на CMS Битрикс, ОКАЙ, Симпла и другими она дружит теперь осталось навести красату с обменом на ОЛЕ с 7-кой

в принципе я его уже сдеал но очень долго отрабатывает около 3-х часов вот хочу ускорить

сейчас вся эта кухня работает без доработок в 7-ке но видимо придется дорабатывать (
21 ugorchina
 
10.04.18
09:33
и еще вопрос )) может и смешной как и что и где надо зарегить что бы легально свою промежуточную продавать?
22 ugorchina
 
10.04.18
09:36
+(15) а можно ли работать в 7-ке одновременно с бух итогами и вести записи в регистрах сведений?

как вариант я бы сделал то что в (4) но в регистре?
23 Остап Сулейманович
 
10.04.18
09:37
(22) Открою страшную военную тайну - в клюшках нет регистра сведений. Лепи на справочнике.
24 Мимохожий Однако
 
10.04.18
09:37
(20) В любом случае в промежуточную базу надо доставлять данные из 1с77. А это такие же обработки или настройки.
25 ugorchina
 
10.04.18
09:37
и еще ) если работать как в (4) можно ли в 7-ке завести реквизит неопределенного типа и задавать ему тип в зависимости от того что я собираюсь туда поместить документ либо справочник?
26 ugorchina
 
10.04.18
09:38
(24) по ОЛЕ? не надо дорабатывать 1с7!
я все прекрасно получаю по ОЛЕ не дорабатываю при этом 1с7
27 Мимохожий Однако
 
10.04.18
09:39
(26) Я не настаиваю. Дело вкуса.
28 ugorchina
 
10.04.18
09:40
+(27) вот пример

НачатьЗамер();
    
    Попытка
        ОбъектV77 = Новый COMОбъект("v77.Application");
    Исключение
        Предупреждение(ОписаниеОшибки());
        
        Возврат;
    КонецПопытки;
    
    Состояние("1С 7.7 успешно запущена, соединяемся с базой",,,БиблиотекаКартинок.ДлительнаяОперация48);
    
    СтрокаПодключения    = "/D"""+СокрЛП(АдресБазыДанных)+""" /N"""+СокрЛП(ЛогинБазыДанных)+""" /P"""+СокрЛП(ПарольБазыДанных)+"""";
    РезультатПодключения = ОбъектV77.Initialize(ОбъектV77.RMTrade,СтрокаПодключения,"NO_SPLASH_SHOW");
    
    Если РезультатПодключения Тогда
        //    ОбменятьсяНоменклатурой(ОбъектV77);
    Иначе
        ОбщегоНазначения.СообщитьОбОшибке("Базу данных открыть не удалось!" + Символы.ПС +
        "- Проверьте параметры подключения." + Символы.ПС +  
        "- Проверьте открывается ли база 1С 7.7 (возможно требуется восстановление индексных файлов, либо она уже открыта монопольно).");
        //РазорватьСоединение();
        Возврат;
    КонецЕсли;

    // Вставить содержимое обработчика.
    АртикулТек  = Элемент.ТекущиеДанные.Артикул;
    ТоварССылка = Элемент.ТекущиеДанные.Товар;
    
    НоменклатураОЛЕ = ОбъектV77.CreateObject("Справочник.Номенклатура");
    НоменклатураОЛЕ.ВыбратьЭлементы();
    ТабличноеПоле2.Очистить();
    Пока НоменклатураОЛЕ.ПолучитьЭлемент() = 1 Цикл
        СтрокаСравнения = "";
        Если НоменклатураОЛЕ.ЭтоГруппа() = 0 Тогда
            СтрокаСравнения = СокрЛП(НоменклатураОЛЕ.Артикул);
            Если СокрЛП(АртикулТек) =  СтрокаСравнения Тогда
                Состояние("1С 7.7 Получаем данные "+НоменклатураОЛЕ.Наименование+" "+НоменклатураОЛЕ.Код,,,БиблиотекаКартинок.ДлительнаяОперация48);
                ДДД = ТабличноеПоле2.Добавить();
                ДДД.КодТовара = НоменклатураОЛЕ.Код;
                ДДД.Товар     = НоменклатураОЛЕ.Наименование;
                ДДД.Артикул   = НоменклатураОЛЕ.Артикул;
                ДДД.Остаток   = 0;
                НоменклатураОЛе1 = ОбъектV77.CreateObject("Справочник.Номенклатура");
                Субк1 = ОбъектV77.EvalExpr("ВидыСубконто.Номенклатура");
                Субк2 = ОбъектV77.EvalExpr("ВидыСубконто.МестаХранения");
                Субк3 = ОбъектV77.EvalExpr("ВидыСубконто.Партии");
                Если НоменклатураОЛе1.НайтиПоКоду(СокрЛП(НоменклатураОЛе.Код),0,1)=1 Тогда
                    
                    БИ = ОбъектV77.CreateObject("БухгалтерскиеИтоги");
                    БИ.ИспользоватьСубконто(Субк1,НоменклатураОЛе1.ТекущийЭлемент(),1,0);
                    БИ.ИспользоватьСубконто(Субк2,Неопределено,1,0);
                    БИ.ИспользоватьСубконто(Субк3,Неопределено,1,0);
                    БИ.ВыполнитьЗапрос(ТекущаяДата(),ТекущаяДата(),"41.1",Неопределено,Неопределено,1,Неопределено,Неопределено);                                         
                    БИ.ВыбратьСубконто(1);
                    Пока БИ.ПолучитьСубконто(1) = 1 Цикл
                        Состояние("1С 7.7 Получаем данные "+НоменклатураОЛЕ.Наименование+" "+НоменклатураОЛЕ.Код+" остаток "+БИ.СКД("К"),,,БиблиотекаКартинок.ДлительнаяОперация48);
                        ДДД.Остаток = БИ.СКД("К");
                        БИ.ВыбратьСубконто(2);
                        Пока БИ.ПолучитьСубконто(2) = 1 Цикл
                            БИ.ВыбратьСубконто(3);
                            Пока БИ.ПолучитьСубконто(3) = 1 Цикл
                                Состояние("1С 7.7 Получаем данные "+НоменклатураОЛЕ.Наименование+" "+НоменклатураОЛЕ.Код+" "+БИ.СКД("К")+" цена "+БИ.Субконто(3).Цена,,,БиблиотекаКартинок.ДлительнаяОперация48);
                                ДДД.Цена = БИ.Субконто(3).Цена;
                            КонецЦикла;
                        КонецЦикла;
                    КонецЦикла;    
                КонецЕсли;
            КонецЕсли
        КонецЕсли;
    КонецЦикла;
          Сообщить("Запрос занял по времения в сек "+ЗакончитьЗамер());
29 Остап Сулейманович
 
10.04.18
09:40
(25) "можно ли в 7-ке завести реквизит неопределенного типа".
А попробовать самому?
30 ugorchina
 
10.04.18
09:41
+(29) ок спасибо!
+(27) или я чего то не знаю есть плохие отзывы о COM?
31 ugorchina
 
10.04.18
09:43
и что касаемо (21) ?
32 ugorchina
 
10.04.18
09:44
вот блин реально нет регистра сведений :-(
33 ugorchina
 
10.04.18
09:45
а почему не правильно будет с флагом?
34 ugorchina
 
10.04.18
09:47
к стати хорошо что бы не делать кучу доработок в каждом объекте (справочниках или в документах) можно ли в 7-ке добавлять в справочник данные из глобальника как например я бы тогда в необходимое место импортировал бы функцию в глобальник или так нельзя?
35 ugorchina
 
10.04.18
09:50
+(34) так выйдет необходимость только добавления одного справочника, кусок кода в глобальник и Скажем вот такая запись в необходимое место в справочнике и документе напрмиер ЗафиксироватьИзменение(Ссылка())
?
36 Остап Сулейманович
 
10.04.18
09:52
(33) Придется флаг дергать при обменах. А значит записывать ПРИКЛАДНОЙ объект еще раз. Не элемент справочника службы регистрации а ПРИКЛАДНОЙ. А это не есть гуд.
(34) "добавлять в справочник данные из глобальника"?
Типа такого :
Процедура ЗарегистрироватьДляОбмена(Объект) Экспорт
   Спр = СоздатьОбъект("Справочник.ИзмененныеОбъекты");
   Спр.Новый();
   Спр.Объект = Объект;
   Спр.Записать();
КонецПроцедуры

Кто мешает?
37 Мимохожий Однако
 
10.04.18
09:53
(31) У клиента должна быть куплена типовая конфигурация проф. А ты продаёшь ему свою конфигурацию как услуги по настройке. Есть еще длинный вариант 1С-Совместимо.))ИМХО,не взлетит. (30) Ничего плохого нет кроме знания особенностей переноса различных типов.
38 Остап Сулейманович
 
10.04.18
09:53
(35) О_О

Ссылка() тоже нет в клюшках.
39 ugorchina
 
10.04.18
09:55
(38) :-))) а шо в ней есть? ))))))
+(36) спасибо!
40 ugorchina
 
10.04.18
09:55
+(38) а как передать объект?
41 Остап Сулейманович
 
10.04.18
09:56
(39) ТекущийЭлемент(), ТекущийДокумент()...

ЗЫ. Может для начала ознакомиться с предметом?
42 ugorchina
 
10.04.18
09:56
текущийОбьект() )))
43 ugorchina
 
10.04.18
09:59
ок спасибо буду ломать ))))
ломать не строить )

в восьмерке проще (
44 ugorchina
 
10.04.18
10:00
неудобно без регистра сведений (
45 Мимохожий Однако
 
10.04.18
10:01
(44) Ты еще в 6-ке не работал. ))
46 ugorchina
 
10.04.18
10:04
(45) там интереснее? ))))
47 ugorchina
 
10.04.18
10:07
+(36) выходит что я при перезаписи тех или инных данных в семерке пишу в справочник ссуль на этот обьект а после обмена чищу его? но вот вопрос а это есть гут что каждые скажем 15 -20 минут туда будут записываться обьекты а после удаляться семерка то на файлах (

это для нее не страшно?
48 ugorchina
 
10.04.18
10:14
а куда вставлять в справочник в
Процедура ПриЗаписи()
или в
Процедура ПриЗакрытии()
что лучше  моем случае?
49 ugorchina
 
10.04.18
10:26
Процедура ЗарегистрироватьДляОбмена(Объект) Экспорт  //Никонов А Ю для промежуточной базы
    Спр = СоздатьОбъект("Справочник.ИзмененныеОбъекты");  
//    Если Спр.НайтиПоРеквизиту("Объект",Объект,0) = 0 Тогда
        Спр.Новый();      
        НазначитьВид(Спр.Объект,Объект.Вид());
        Спр.Объект = Объект;
        Спр.Записать();  
//    КонецЕсли;
КонецПроцедуры
ругается программа на меня (
говорит
НазначитьВид(Спр.Объект,Объект.Вид());
{Глобальный модуль(270)}: Неправильно задан вид значения!

шо не так то?
50 ugorchina
 
10.04.18
10:31
а еще ругается на поиск по реквизиту (
51 Остап Сулейманович
 
10.04.18
10:34
(49)
Спр.НазначитьТип("Объект", ТипЗначенияСтр(Объект)+"."+Объект.Вид());
52 ugorchina
 
10.04.18
10:42
уже почти
сделал по своему ))))

    Спр = СоздатьОбъект("Справочник.ИзмененныеОбъекты");  
    //    Если Спр.НайтиПоРеквизиту("Объект",Объект,0) = 0 Тогда
    Спр.Новый();  
    Если ТипЗначения(Объект) = 11 Тогда
        //    НазначитьТип(Спр.Объект,Объект.Вид());  
    ИначеЕсли ТипЗначения(Объект) = 12 Тогда
        Спр.Объект = Объект;
    КонецЕсли;
    Спр.Записать();

)))
но спасибо
53 ugorchina
 
10.04.18
10:45
(51) есть еще проблема с поиском (

Если Спр.НайтиПоРеквизиту("Объект",Объект,0) = 0 Тогда
{Глобальный модуль(268)}: Неверное имя реквизита!
54 Ц_У
 
10.04.18
10:46
(53) занавес
55 ugorchina
 
10.04.18
10:47
поиск нужен что бы не лепить дубли они нам не нужны

НО есть еще вопросы касательно этого справочника такие как например что будет если в момен когда 8-ка начала удаление объекта из 7-ки из этого справочника и в этот же момент юзер записывает новый обьект?
56 Остап Сулейманович
 
10.04.18
10:48
(53)
1. У реквизита должна стоять фишка "Сортировка"
2. Реквизиту неопределенного типа фишку выставить нельзя.

Либо делать суррогатное поле. Чисто для поиска.
Либо искать перебором/запросом...
57 ugorchina
 
10.04.18
10:52
печаль (
Метод можно использовать только для реквизитов с установленным признаком ''Сортировка''.
Метод можно использовать только для объектов, созданных функцией СоздатьОбъект.
но я не могу установить для этого реквизита этот флаг (

искать запросом?
58 ugorchina
 
10.04.18
10:53
(53) спасибо не успел прочесть спасибо!
59 Вафель
 
10.04.18
10:57
(56) можно для справочников и документов сделать разные "планы обмена"
60 ugorchina
 
10.04.18
10:57
чудо запросы в 1с7 ( ох
61 ugorchina
 
10.04.18
10:59
а здесь тчо не так?

ошибок нет но и данных нет (

Процедура ЗарегистрироватьДляОбмена(Объект) Экспорт  //Никонов А Ю для промежуточной базы
    Перем Запрос, ТекстЗапроса;
    Спр = СоздатьОбъект("Справочник.ИзмененныеОбъекты");
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |ОбрабатыватьДокументы все;
    |Объект = Справочник.ИзмененныеОбъекты.Объект;
    |Условие(Объект = Объект);
    |"
    ;
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        
        Спр.Новый();    
        Спр.НазначитьТип("Объект", ТипЗначенияСтр(Объект)+"."+Объект.Вид());
        Спр.Объект = Объект;
        Спр.Записать();
    КонецЕсли;
КонецПроцедуры
62 Вафель
 
10.04.18
10:59

Объект1 = Справочник.ИзмененныеОбъекты.Объект;
Условие(Объект1 = Объект);
63 ugorchina
 
10.04.18
11:02
не а не работает
Объект1 = Справочник.ИзмененныеОбъекты.Объект;
Условие(Объект1 = Объект);
только у меня скорее всего не так а вот так

Объект1 = Объект;
Условие(Объект1 = Объект);
64 ugorchina
 
10.04.18
11:02
но не отрабатывает (
65 ugorchina
 
10.04.18
11:03
Выборкой?
66 ugorchina
 
10.04.18
11:05
просто не хотелось бы выборкой запрос то быстрее отработает или нет?
67 ugorchina
 
10.04.18
11:07
может проблема в том что у меня Объект1  равно текущийЭлемент?
68 ugorchina
 
10.04.18
11:08
странно но Запрос.Выполнить(ТекстЗапроса) = 0 а условие
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
чето я не понял (
69 ugorchina
 
10.04.18
11:12
почему не входит по условию когда оно равно 0?
70 Остап Сулейманович
 
10.04.18
11:14
(69) Патамучта когда "0" тогда запрос НЕ выполнился.
71 los_hooliganos
 
10.04.18
11:14
Вот схема УРБД - http://oksla.narod.ru/urib.htm
Делаешь дбф или скл прямой запрос, через ADOBD.
Читаешь нужные объекты.
Формируешь пакет обмена для 77, чтобы она сама удалила прочитанные объекты.
72 ugorchina
 
10.04.18
11:15
(70) так мне так и надо если не нашли то запишем

условие то на 0 стоит (

в отладчике показывает что запрос не выполнен соответвенно мы должны были войти по условию нет?
73 ugorchina
 
10.04.18
11:16
(71) ))) надоел я Вам ))) но спасибо! буду иметь в виду!
74 Остап Сулейманович
 
10.04.18
11:17
(72) "0/1" от Запрос.Выполнить() говорит только об одном - удалось или нет выполнить запрос. А есть ли в выборке чего или нету - нужно перебирать строки результата.
75 Остап Сулейманович
 
10.04.18
11:18
+ (74) Грубо говоря - корректный или нет синтаксис текста запроса. И все.
76 ugorchina
 
10.04.18
11:19
(75) а как узнать что он вернул?

количествозначений нету такго вроде (
77 ugorchina
 
10.04.18
11:19
в общем выборка (
78 ugorchina
 
10.04.18
11:22
так работает но мне кажется что замедлит работу (

Процедура ЗарегистрироватьДляОбмена(Объект) Экспорт  //Никонов А Ю для промежуточной базы    
    НашлиНет = 0;
    Спр = СоздатьОбъект("Справочник.ИзмененныеОбъекты");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент() = 1 Цикл
        Если Спр.Объект = Объект Тогда
            НашлиНет = 1;
        КонецЕсли;
    КОнецЦикла;
    
    Если НашлиНет = 0 Тогда
        Спр.Новый();    
        Спр.НазначитьТип("Объект", ТипЗначенияСтр(Объект)+"."+Объект.Вид());
        Спр.Объект = Объект;
        Спр.Записать();
    КонецЕсли;
КонецПроцедуры
79 Остап Сулейманович
 
10.04.18
11:22
(77) Кстати - для файловой семерки может быть быстрее запроса.
80 ugorchina
 
10.04.18
11:23
(79) прикольно )
81 Остап Сулейманович
 
10.04.18
11:24
(78) Где бляхамуха Прервать или Возврат после НашлиНет = 1;? Зачем искать дальше если уже установлен факт наличия?
82 ugorchina
 
10.04.18
11:33
(81) )) упс спасибо!
83 ugorchina
 
10.04.18
11:35
Процедура ЗарегистрироватьДляОбмена(Объект) Экспорт  //Никонов А Ю для промежуточной базы    
    НашлиНет = 0;
    Спр = СоздатьОбъект("Справочник.ИзмененныеОбъекты");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент() = 1 Цикл
        Если Спр.Объект = Объект Тогда
            НашлиНет = 1;
            Прервать;
        КонецЕсли;
    КОнецЦикла;
    
    Если НашлиНет = 0 Тогда
        Спр.Новый();    
        Спр.НазначитьТип("Объект", ТипЗначенияСтр(Объект)+"."+Объект.Вид());
        Спр.Объект = Объект;
        Спр.Записать();
    КонецЕсли;
КонецПроцедуры
84 ugorchina
 
10.04.18
11:40
Дополнил
Процедура ЗарегистрироватьДляОбмена(Объект) Экспорт  //Никонов А Ю для промежуточной базы    
    НашлиНет = 0;
    Спр = СоздатьОбъект("Справочник.ИзмененныеОбъекты");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент() = 1 Цикл
        Если Спр.Объект = Объект Тогда
            НашлиНет = 1;
            Прервать;
        КонецЕсли;
    КОнецЦикла;
    
    Если НашлиНет = 0 Тогда
        Спр.Новый();    
        Спр.НазначитьТип("Объект", ТипЗначенияСтр(Объект)+"."+Объект.Вид());
        Спр.ТипОбъекта = ТипЗначенияСтр(Объект);
        Спр.Объект = Объект;
        Спр.Записать();
    КонецЕсли;
КонецПроцедуры

добавил типОбъекта что бы не заморачиваться с определением при запросе из 8-ки
85 ugorchina
 
10.04.18
11:50
с ново вернусь к вопросу что будет когда

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

а условие то стоит что если есть уже в списке то не трогаем (

шо делать шо делать?

может добавить (опять флаг ) но уже в этот справочник и при начале обмена пробежаться по этому спр и пометить его что уже начат обмен с этими текущими элементами

а в условии прописать что то типа

Процедура ЗарегистрироватьДляОбмена(Объект) Экспорт  //Никонов А Ю для промежуточной базы    
    НашлиНет = 0;
    Спр = СоздатьОбъект("Справочник.ИзмененныеОбъекты");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент() = 1 Цикл
        Если Спр.Объект = Объект Тогда
            Если  Спр.НачатОбмен = 0 Тогда
            НашлиНет = 1;
            Прервать;
            КонецЕсли;
        КонецЕсли;
    КОнецЦикла;
    
    Если НашлиНет = 0 Тогда
        Спр.Новый();    
        Спр.НазначитьТип("Объект", ТипЗначенияСтр(Объект)+"."+Объект.Вид());
        Спр.ТипОбъекта = ТипЗначенияСтр(Объект);
        Спр.Объект = Объект;
        Спр.Записать();
    КонецЕсли;
КонецПроцедуры


    Если Спр.Объект = Объект Тогда
            Если  Спр.НачатОбмен = 0 Тогда

если обмен начат то флаг будет равен 1 соответвенно система запишет новые данные в этот спр?

или так не правильно?
86 ugorchina
 
10.04.18
12:03
сегодня включил комп с панеле появилась новая кнопочка жмякнул не нее и мой комп начал разговаривать со мной )))

оказалось яндекс бр поставил своего голосового помощника мне (
87 ugorchina
 
10.04.18
12:15
в итоге из доработок в 7-ке
В глобальник вставлена процедура
Процедура ЗарегистрироватьДляОбмена(Объект) Экспорт  //Никонов А Ю для промежуточной базы    

    НашлиНет = 0;
    Спр = СоздатьОбъект("Справочник.ИзмененныеОбъекты");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент() = 1 Цикл
        Если Спр.Объект = Объект Тогда
            Если  Спр.НачатОбмен = 0 Тогда
            НашлиНет = 1;
            Прервать;
            КонецЕсли;
        КонецЕсли;
    КОнецЦикла;
    
    Если НашлиНет = 0 Тогда
        Спр.Новый();    
        Спр.НазначитьТип("Объект", ТипЗначенияСтр(Объект)+"."+Объект.Вид());
        Спр.ТипОбъекта = ТипЗначенияСтр(Объект);
        Спр.Объект = Объект;
        Спр.Записать();
    КонецЕсли;
КонецПроцедуры

добавлен новый справочник ИзмененныеОбъекты

в справочник номенклатура в функцию при записи ставлена вот такая вот строчка

ЗарегистрироватьДляОбмена(ТекущийЭлемент());

так же в справочник номенклатура добален реквизит УИД неограниченной длины в него 8-ка возвращает уникальный идентификатор что бы не дублировать обьекты (Так как в семерке есть много дублей)

да и ссылки в ней нет (

так же этот реквизит УИД добавлен в документ заказ

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

ЗарегистрироватьДляОбмена(ТекущийДокумент());


в документа прихода, перемещания, реализация, возврат товаров будет добавлено обращение в глобальнубю процедуру где я чуть позже доработаю и выложу будет дописоны условие если вид документа = выше перечисленным тогда произвести запись в объект нашего справочника ссылку товара из строк документа

это позволит мне отслеживать остатки товаров
88 ugorchina
 
10.04.18
12:16
+(87) может кому пригодится!

спасибо все кто помогал! с меня бутылка )
89 Остап Сулейманович
 
10.04.18
12:19
(87) "добален реквизит УИД неограниченной длины" - плохая идея.
Для хранения УИД имени 1с8 достаточно строки длиной 36 символов. Со строками неограниченной длины движок ДБФ работает медленно.
90 ugorchina
 
10.04.18
13:51
(89) Спасибо буду знать!
91 ugorchina
 
10.04.18
15:46
В общем вот последний вариант (надеюсь что последний)
Продолжение будет завтра )))

//Никонов А Ю для промежуточной базы
Процедура ЗарегистрироватьДляОбмена(Объект) Экспорт      
    НашлиНет = 0;
    Спр = СоздатьОбъект("Справочник.ИзмененныеОбъекты");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент() = 1 Цикл
        Если Спр.ОбъектЗначение = Объект Тогда
            Если  Спр.НачатОбмен = 0 Тогда
                НашлиНет = 1;
                Прервать;
            КонецЕсли;
        КонецЕсли;
        Если Спр.ОбъектТовароДвижение = Объект Тогда
            Если  Спр.НачатОбмен = 0 Тогда
                НашлиНет = 1;
                Прервать;
            КонецЕсли;
        КонецЕсли;
    КОнецЦикла;
    
    Если НашлиНет = 0 Тогда
        Если СокрЛП(ТипЗначенияСтр(Объект)) = "Справочник" Тогда  
            Спр.Новый();    
            Спр.ТипОбъекта = ТипЗначенияСтр(Объект);
            Спр.ВидОбъекта = Объект.Вид();
            Спр.НазначитьТип("ОбъектЗначение", ТипЗначенияСтр(Объект)+"."+Объект.Вид());
            Спр.ОбъектЗначение = Объект;
            Спр.Действие = "ТоварыИзменение";  
            Спр.Записать();
        ИначеЕсли СокрЛП(ТипЗначенияСтр(Объект)) = "Документ" Тогда              
            //в данной конфиге в место заказа учавствует документ (Счет)
            Если СокрЛП(Объект.Вид()) = "Счет" Тогда
                //обновить статус заказа в документ добавить данные перечисление
                Спр.Новый();    
                Спр.ТипОбъекта = ТипЗначенияСтр(Объект);
                Спр.ВидОбъекта = Объект.Вид();
                Спр.НазначитьТип("ОбъектЗначение", ТипЗначенияСтр(Объект)+"."+Объект.Вид());
                Спр.ОбъектЗначение = Объект;
                Спр.Действие = "ОбновитьСтатус";
                Спр.Записать();
            Иначе //все остальные документы которые двигают остатки товаров       ОбъектТовароДвижение
                
                Объект.ВыбратьСтроки();
                Пока Объект.ПолучитьСтроку() = 1 Цикл
                    Спр.Новый();  
                    Спр.НазначитьТип("ОбъектТовароДвижение", ТипЗначенияСтр(Объект)+"."+Объект.Вид());
                    Спр.ОбъектТовароДвижение = Объект;
                    Спр.ТипОбъекта = ТипЗначенияСтр(Объект);
                    Спр.ВидОбъекта = Объект.Вид();
                    Спр.НазначитьТип("ОбъектЗначение", "Справочник.номенклатура");
                    Спр.ОбъектЗначение = Объект.Товар;
                    БИ = СоздатьОбъект("БухгалтерскиеИтоги");
                    БИ.ИспользоватьСубконто(ВидыСубконто.Номенклатура,Объект.Товар.ТекущийЭлемент(),1,0);
                    БИ.ИспользоватьСубконто(ВидыСубконто.МестаХранения,,1,0);
                    БИ.ИспользоватьСубконто(ВидыСубконто.Партии,,1,0);
                    БИ.ВыполнитьЗапрос(ТекущаяДата(),ТекущаяДата(),"41.1",,,1,,);                                         
                    БИ.ВыбратьСубконто(1);
                    Пока БИ.ПолучитьСубконто(1) = 1 Цикл
                        Спр.Остаток = БИ.СКД("К");
                    КонецЦикла;    
                    Спр.Действие = "ОбновитьОстатки";
                    Спр.Записать();
                КонецЦикла;
                
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;     
КонецПроцедуры
92 ugorchina
 
12.04.18
06:07
Всем сново привет

доплнил немножко свой код добавив

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

этим я получаю уникальный идентификатор

выше я писал о том что хочу создать реквизит в 7-ке  а после того как перенесу все элементы в 8-ку думал отправлять уник из 8-ки в 7-ку и записыавать его в свой реквизит теперь можно обойтись без этого
93 Вася Теркин
 
12.04.18
07:03
Не надо УРБД если есть оле. Просто создавай объект, заполняй его не записывая и пореквизитно сравнивай с Объект.ССылка.
Если есть расхождения, то делай Объект.записать().
94 ugorchina
 
12.04.18
09:33
(93) ок спасибо!
95 Сияющий в темноте
 
12.04.18
10:29
Все строки неограниченной длины хранятся в одном файле блоками,поэтому,тормоза при работе с ними словами не описать

для урбд у семерки отдельная компонента была,и,насколько я помню,ее покупать надо
96 Сияющий в темноте
 
12.04.18
10:30
оле использовать нельзя,это вам не восьмерка,все данные оле кочуют через границу процессов через сообщения Windows,тормознее ничего нет
97 Сияющий в темноте
 
12.04.18
10:36
Самое простое,это в функцию ПриЗаписи добавить алгоритм,который сравнивает все реквизиты обьекта,кроме периодических,с данными в базе,которые можно получить через ТекущийЭлемент или ТекущийДокумент,ведь в при записи,обьект еще не записан,и писать все изменения в файл в определенной директории,причем,для каждого подключения сделать свой файл
потом,можно прочитать эти файлы и сделать в другой базе изменения по ним
98 ugorchina
 
12.04.18
15:11
(97) всем спасибо я буду рассматривать пример обойтись без ОЛЕ но если обходиться без оле то я в принципе могу напрямую сделать обмен с сайтом из 1с 7 но мне очень не нравится работа 1с 7 с сайтом я уже делал такое и как то там все через одно место на 8-ке мне больше нравится работать с сайтами вот и решил написать простенькую конфигу учета с полноценными справочниками номенклатуры характеристик прирулил картинки и т д сделал обмен между этой конфигу с сайтом теперь осталось передавать этой конфиге необходимые данные и отправлять из нее заказы (Для работы с сайтом при первом обмене замет достаточно много времени но потом в транзитном справочнике будет очень мало объектов а соответственно обмен будет работать быстро (по крайней мере я надеюсь на это )
99 tesseract
 
12.04.18
16:22
(95) Да отдельно продавалась. Гибкая штука была.  

(96) Чего? Почитайте хоть, что такое COM/OLE и как работает RPC и не порите чушь.

(97) А просто сделать регистр и туда писать измененные объекты не проще?
100 ugorchina
 
12.04.18
16:34
В регистр на 7-Ке? )
101 ugorchina
 
12.04.18
16:34
я пишу в справочник )
102 Сияющий в темноте
 
12.04.18
19:51
(99) как раз 1с7 это отдельное приложение,когда мы с ним общаемся через оле,то в нашем процессе создается прокси длл,которая передает данные процессу 1с через wm copydata,в отличие от 1с8,где в память процесса грузится длл,выполняющая подключение к базе,и работа идет в рамках одного процесса
103 tesseract
 
12.04.18
20:54
(102) Опять чушь. Или вы про Inproc сервер?
104 ugorchina
 
13.04.18
09:59
В общем можете мне толком объсянить выходит что у меня в одном справочнике не более сотни данных будет за день на каждый цикл обмена не оболее 10 элементов Вы уверяете меня что эта кухня будет день отрабатывать по ОЛЕ?
105 Сияющий в темноте
 
13.04.18
10:05
(103)Inproc сервер,это длл подгружаемая в память процесса,и,если размещение совпало по типу(apartment),то вызовы функций интерфейса идут напрямую,а если не совпало или сервер в отдельном процессе(localserver)или на другой машине,то для передачи всех данных используется интерфейс IMarshal,который реализоыан через rpc,но последняя в windows стандартно работает через SendMessage,приче  сообщение обычно WM_CopyData,а если в помнить,что у нас 1с работает через интерфейс IDispatch,то есть для каждого вызова сначала передается имя поля/метода чтобы получить его номер,а только вторым вызовом выполняется само действие,то скорость выполнения оказывается медленнее черепахи
106 Сияющий в темноте
 
13.04.18
10:07
но в семерке не все так плохо,можно просто открыть ее по оле,командой открыть внешнюю обработку,в процедуре приоткрытии ко орой размещен нужный код,и последний выпролнится достаточно быстро
107 tesseract
 
13.04.18
10:21
(105) Причем тут dll-то вообще? Dll от exe отличается только количеством точек входа. И с какого перепугу WM_Copydata и iMarshall который на 486 проце с 8 Мб оперативы работали вдруг стали медленными?

>> IDispatch

И что медленного в этом интерфейсе? Я на p133 с ним работал нормально.
108 ugorchina
 
13.04.18
11:05
(104) по существу кто то скажет?
109 tesseract
 
13.04.18
11:10
(108) Будет, в чем проблема?  Все будет упираться в производительность конкретно 1С.
110 ugorchina
 
13.04.18
11:24
я заполнил данный справочник 2 тыс элементами и проверил как отрабатывает 1с 8 все выполняетс яв приделах 3 секунд
в месте с подключением

это долго?
111 ugorchina
 
13.04.18
11:25
+(109) Все будет упираться в производительность конкретно 1С 7 или 8?
конкретно какой
112 tesseract
 
13.04.18
12:43
(111) В оба конца. Самый медленной будет базу в какую записывают.

(110) Чего-то слишком быстро, в режиме обмена данными делал?
113 ugorchina
 
13.04.18
13:32
я написал обработку она каждые 15 минут логинится к 1с 7 забирает данные при этом успользуя кучу условий, затем удаляет эти данные из 7-ки и отрывается от 7-ки
114 tesseract
 
13.04.18
13:33
(113) Молодец, так держать.
115 ugorchina
 
13.04.18
13:33
может это от того что у меня SSD? )
116 ugorchina
 
13.04.18
13:34
+(114) а что не так?
117 tesseract
 
13.04.18
13:35
(116) Все правильно, почему ты решил, что что-то не так?
118 ugorchina
 
13.04.18
15:35
(117) хз думал стебаетесь )
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс