Вход | Регистрация

  1  2   
1С:Предприятие :: 1С:Предприятие 8 общая

Как передавать по ОЛЕ только измененные объекты

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

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

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

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

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

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

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

то есть большинство моих клиентов которые обращаются ко мне за разработкой сайтов работают на 1с7 вот думал сделать свою промежуточную конфигу (
   Остап Сулейманович
 
15 - 10.04.18 - 09:25
(8) По флагу неправильно. Правильно - см (4).
   ugorchina
 
16 - 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 написать обработку по выгрузке в нужном формате.
   ugorchina
 
19 - 10.04.18 - 09:28
+(4) ++(15) спасибо буду подумать ( я еще собирался добавить в справочники реквизит уникальный идентификатор что бы после получения списка товаров из 1с7 выгрузить их уники в 1с7 что бы потом по ним поучать элементы

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

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

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

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

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

как вариант я бы сделал то что в (4) но в регистре?
   Остап Сулейманович
 
23 - 10.04.18 - 09:37
(22) Открою страшную военную тайну - в клюшках нет регистра сведений. Лепи на справочнике.
   МимохожийОднако
 
24 - 10.04.18 - 09:37
(20) В любом случае в промежуточную базу надо доставлять данные из 1с77. А это такие же обработки или настройки.
   ugorchina
 
25 - 10.04.18 - 09:37
и еще ) если работать как в (4) можно ли в 7-ке завести реквизит неопределенного типа и задавать ему тип в зависимости от того что я собираюсь туда поместить документ либо справочник?
   ugorchina
 
26 - 10.04.18 - 09:38
(24) по ОЛЕ? не надо дорабатывать 1с7!
я все прекрасно получаю по ОЛЕ не дорабатываю при этом 1с7
   МимохожийОднако
 
27 - 10.04.18 - 09:39
(26) Я не настаиваю. Дело вкуса.
   ugorchina
 
28 - 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-ке завести реквизит неопределенного типа".
А попробовать самому?
   ugorchina
 
30 - 10.04.18 - 09:41
+(29) ок спасибо!
+(27) или я чего то не знаю есть плохие отзывы о COM?
   ugorchina
 
31 - 10.04.18 - 09:43
и что касаемо (21) ?
   ugorchina
 
32 - 10.04.18 - 09:44
вот блин реально нет регистра сведений :-(
   ugorchina
 
33 - 10.04.18 - 09:45
а почему не правильно будет с флагом?
 
 
   ugorchina
 
34 - 10.04.18 - 09:47
к стати хорошо что бы не делать кучу доработок в каждом объекте (справочниках или в документах) можно ли в 7-ке добавлять в справочник данные из глобальника как например я бы тогда в необходимое место импортировал бы функцию в глобальник или так нельзя?
   ugorchina
 
35 - 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) О_О

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

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

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

это для нее не страшно?
   ugorchina
 
48 - 10.04.18 - 10:14
а куда вставлять в справочник в 
Процедура ПриЗаписи()
или в
Процедура ПриЗакрытии()
что лучше  моем случае?
   ugorchina
 
49 - 10.04.18 - 10:26
Процедура ЗарегистрироватьДляОбмена(Объект) Экспорт  //Никонов А Ю для промежуточной базы

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

        Спр.Новый();      
        НазначитьВид(Спр.Объект,Объект.Вид());
        Спр.Объект = Объект;
        Спр.Записать();   
//    КонецЕсли;

КонецПроцедуры
ругается программа на меня (
говорит 
НазначитьВид(Спр.Объект,Объект.Вид());
{Глобальный модуль(270)}: Неправильно задан вид значения!

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

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

    Спр.Новый();  
    Если ТипЗначения(Объект) = 11 Тогда
        //    НазначитьТип(Спр.Объект,Объект.Вид());  

    ИначеЕсли ТипЗначения(Объект) = 12 Тогда
        Спр.Объект = Объект; 
    КонецЕсли;
    Спр.Записать();

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

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

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

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

ошибок нет но и данных нет (
Процедура ЗарегистрироватьДляОбмена(Объект) Экспорт  //Никонов А Ю для промежуточной базы

    Перем Запрос, ТекстЗапроса;
    Спр = СоздатьОбъект("Справочник.ИзмененныеОбъекты"); 
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать)

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

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

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

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

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

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

Процедура ЗарегистрироватьДляОбмена(Объект) Экспорт  //Никонов А Ю для промежуточной базы    

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

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

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

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

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

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

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

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

а в условии прописать что то типа
Процедура ЗарегистрироватьДляОбмена(Объект) Экспорт  //Никонов А Ю для промежуточной базы    

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


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

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

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

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


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

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

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

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

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

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

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

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


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

это позволит мне отслеживать остатки товаров
   ugorchina
 
88 - 10.04.18 - 12:16
+(87) может кому пригодится!
спасибо все кто помогал! с меня бутылка )
   Остап Сулейманович
 
89 - 10.04.18 - 12:19
(87) "добален реквизит УИД неограниченной длины" - плохая идея.
Для хранения УИД имени 1с8 достаточно строки длиной 36 символов. Со строками неограниченной длины движок ДБФ работает медленно.
   ugorchina
 
90 - 10.04.18 - 13:51
(89) Спасибо буду знать!
   ugorchina
 
91 - 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 Цикл
                        Спр.Остаток = БИ.СКД("К");
                    КонецЦикла;    
                    Спр.Действие = "ОбновитьОстатки"; 
                    Спр.Записать();
                КонецЦикла;
                
            КонецЕсли;
        КонецЕсли; 
    КонецЕсли;     
КонецПроцедуры
   ugorchina
 
92 - 12.04.18 - 06:07
Всем сново привет 

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

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

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

выше я писал о том что хочу создать реквизит в 7-ке  а после того как перенесу все элементы в 8-ку думал отправлять уник из 8-ки в 7-ку и записыавать его в свой реквизит теперь можно обойтись без этого
   Вася Теркин
 
93 - 12.04.18 - 07:03
Не надо УРБД если есть оле. Просто создавай объект, заполняй его не записывая и пореквизитно сравнивай с Объект.ССылка.
Если есть расхождения, то делай Объект.записать().
   ugorchina
 
94 - 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
Самое простое,это в функцию ПриЗаписи добавить алгоритм,который сравнивает все реквизиты обьекта,кроме периодических,с данными в базе,которые можно получить через ТекущийЭлемент или ТекущийДокумент,ведь в при записи,обьект еще не записан,и писать все изменения в файл в определенной директории,причем,для каждого подключения сделать свой файл
потом,можно прочитать эти файлы и сделать в другой базе изменения по ним
   ugorchina
 
98 - 12.04.18 - 15:11
(97) всем спасибо я буду рассматривать пример обойтись без ОЛЕ но если обходиться без оле то я в принципе могу напрямую сделать обмен с сайтом из 1с 7 но мне очень не нравится работа 1с 7 с сайтом я уже делал такое и как то там все через одно место на 8-ке мне больше нравится работать с сайтами вот и решил написать простенькую конфигу учета с полноценными справочниками номенклатуры характеристик прирулил картинки и т д сделал обмен между этой конфигу с сайтом теперь осталось передавать этой конфиге необходимые данные и отправлять из нее заказы (Для работы с сайтом при первом обмене замет достаточно много времени но потом в транзитном справочнике будет очень мало объектов а соответственно обмен будет работать быстро (по крайней мере я надеюсь на это )
   tesseract
 
99 - 12.04.18 - 16:22
(95) Да отдельно продавалась. Гибкая штука была.  

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

(97) А просто сделать регистр и туда писать измененные объекты не проще?
   ugorchina
 
100 - 12.04.18 - 16:34
В регистр на 7-Ке? )
  1  2   

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует