|   |   | 
| 
 | Как передавать по ОЛЕ только измененные объекты | ☑ | ||
|---|---|---|---|---|
| 0
    
        ugorchina 10.04.18✎ 09:00 | 
        Подскажите пожалуйста 
 я создал справочник "Товары" в 1с8 из реквизитов ничего не добавлял по (ОЛЕ) заполняю данный справочник после при обмене я бы хотел получать из 1с7 по ОЛЕ в 1с8 только измененные данные например в 1с7 имеется два товара при первом обмене я получил оба товара как есть затем в 1с7 изменил например наименование в одном из товаре и при обмене я бы хотел получить только элементы которые 1. изменяли 2. создали (новые) как это реализовать? можно ли без доработок 1с7? можно конечно создать доп реквизит в справочниках и документах например изменен и при записи или проведении устанавливать признак изменения а в запросе по ОЛЕ 1. получать только с помеченным флагом но затем мне необходимо будет изменить данный флаг в исходное состояние а это затребует дополнительное время как сделать сие чудо средствами платформы? | |||
| 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 | 
 | |||
| 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) хз думал стебаетесь )     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |