|
Как передавать по ОЛЕ только измененные объекты | ☑ | ||
---|---|---|---|---|
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
|
|
|||
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) хз думал стебаетесь )
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |