Имя: Пароль:
1C
1C 7.7
v7: переход с Rainbow на 1c++
,
0 perkos
 
03.12.12
10:48
есть база с внедренной подсистемой обмена на кассы через компаненту рейнбоу.
так же в этой базе загружается старый 1с++ версияя 1.8, который глючит.

хочу обновить 1с++, с рейнбоу 1с++ не рекомендуют загружать.

сейчас ошибки вида создания объекта СоздатьОбъект("RainbowService");
вопрос насколько реально переделать под 1спп? какой объект из 1спп может подменить РейнбоуСервис?
1 Mikeware
 
03.12.12
10:58
2 perkos
 
03.12.12
11:19
хмм, нашел только Обработка.Defcls
как я понимаю мне в ней надо добавить пару классов призраков и  создать одноименные обработки с кодом из форума?
3 Ёпрст
 
03.12.12
11:25
(2) да.
Или переписать обработки, которые используют радугу
4 perkos
 
04.12.12
13:34
отключил рэйнбоу ошибку RainbowService починил, вроде работает...

теперь вот что

Обработка.Defcls

class СкидкиОбъектов=OxyObjectsPoffs@MD:Справочник.СкидкиКлиентов,Справочник.СкидкиТорговыхТочек
{

};

Обработка.OxyObjectsPoffs

Процедура РаботатьСТоргТочками() Экспорт
   
   БК=Сам(Контекст).ПолучитьБазовыйКласс("Справочник."+СпрСкТоргТочек);
   Сам(Контекст).НазначитьБазовыйКласс("Справочник."+СпрСкТоргТочек);
   
КонецПроцедуры // РаботатьСТоргТочками()

ошибка
СкидкиОбъектов::РаботатьСТоргТочками() : Поле агрегатного объекта не обнаружено
Сам(Контекст).НазначитьБазовыйКласс("Справочник."+СпрСкТоргТочек);
{OxyObjectsPoffs@MD(64) }

а как тогда рейнбоу работало? хелпните, в какую сторону делать?
5 Ёпрст
 
04.12.12
13:36
(4) ну воткни в класс функцию

Функция Сам(Конт)
 Возврат Конт;
КонецФункции
6 perkos
 
04.12.12
13:39
в Обработка.OxyObjectsPoffs есть

Функция Сам(Конт)
   
   Возврат Конт;
   
КонецФункции // Конт()

в описание класса я так понимаю надо втыкать? а как же радуга то работала без этого?
7 Ёпрст
 
04.12.12
13:41
не надо в описании ничего пихать
8 Ёпрст
 
04.12.12
13:44
И это, радуга тут не при чем
9 perkos
 
04.12.12
13:44
тогда не понимаю чего не хватает
10 Ёпрст
 
04.12.12
13:46
НазначитьБазовыйКласс просто вырезали в новых версиях 1cpp
11 Ёпрст
 
04.12.12
13:46
pfhtvm 'ne cnhjre? lkz yfxfkf
12 Ёпрст
 
04.12.12
13:46
заремь эту строку , для начала
13 Ёпрст
 
04.12.12
13:50
и.. вроде как он теперь стал
ЗаменитьБазовыйОбъект
14 perkos
 
04.12.12
13:54
заремил ошибка пропала,
дальше подменил как (13)

СкПарс=СоздатьОбъект("ПарсерСкидок");
{Справочник.Склады.Форма.Модуль(226)}: ПарсерСкидок::НайтиСкидкуГоловнойФирмы() : СкидкиОбъектов::РаботатьСТоргТочками() : Недостаточное число параметров передано при вызове функции/процедуры объекта
Сам(Контекст).ЗаменитьБазовыйОбъект("Справочник."+СпрСкТоргТочек);
{OxyObjectsPoffs@MD(66) }

Если Ск.НайтиПоОбъекту(Ф.ТекущийЭлемент())=1 Тогда
{discounts_parser@MD(64) }
15 Ёпрст
 
04.12.12
13:58
да уж.. метод НазначитьБазовыйКласс похерили еще в 2007 году..
страшно подумать, что эту конфу с того года никто не обновлял
16 Ёпрст
 
04.12.12
13:58
ЗЫ: пробуй (13) использовать
17 ADirks
 
04.12.12
14:00
(4) какой-то сумрачный гений...

попробуй так сделать
объявление:
class СкидкиОбъектов=OxyObjectsPoffs@MD:Справочник
{
};

создание объекта

оСкидки = СоздатьОбъект("СкидкиОбъектов");
оСкидки.ЗаменитьБазовыйОбъект("Справочник", СоздатьОбъект("Справочник."+СпрСкТоргТочек));
18 perkos
 
04.12.12
14:06
(15) никто и не обновлял.
заменяя тупо название метода как в (13) не пашет
19 Fynjy
 
04.12.12
14:07
Может сразу на 8?
20 perkos
 
04.12.12
14:11
(17) это везде где используется класс добавить строку

оСкидки.ЗаменитьБазовыйОбъект("Справочник", СоздатьОбъект("Справочник."+СпрСкТоргТочек));

?
21 ADirks
 
04.12.12
14:15
(20) везде, где создаётся объект этого класса
ЗаменитьБазовыйОбъект() можно использовать только один раз, и желательно сразу после создания объекта
22 perkos
 
05.12.12
06:04
поискал создание объектов и вот что меня смущает в не
   СпрСкидки=МенеджерВерсий.СоздатьОбъектКласса("СкидкиОбъектов");
как оно сказатся может?

где мне брать СпрСкТоргТочек? смотрю класс

Обработка.OxyObjectsPoffs

Процедура Конструктор()
   
   МенеджерВерсий=СоздатьОбъект("МенеджерВерсий");
   
   Настройки=МенеджерВерсий.СоздатьОбъектКласса("НастройкиКомпонентыУРП");
   СпрСкКлиентов=Настройки.ПолучитьВидСправочника("СкидкиКлиентов");
   СпрСкТоргТочек=Настройки.ПолучитьВидСправочника("СкидкиТоргТочек");
   СпрКлиентов=Настройки.ПолучитьВидСправочника("Клиенты");
   СпрТоргТочек=Настройки.ПолучитьВидСправочника("ТорговыеТочки");
   БК=Сам(Контекст).ПолучитьБазовыйКласс("Справочник."+СпрСкКлиентов);
       
КонецПроцедуры // Конструктор()  

пробую сделать также при созданииОбъекта
   Скидки=СоздатьОбъект("СкидкиОбъектов");
   МенеджерВерсий=СоздатьОбъект("МенеджерВерсий");
   Настройки=МенеджерВерсий.СоздатьОбъектКласса("НастройкиКомпонентыУРП");
   СпрСкТоргТочек=Настройки.ПолучитьВидСправочника("СкидкиТоргТочек");
   Скидки.ЗаменитьБазовыйОбъект("Справочник", СоздатьОбъект("Справочник."+СпрСкТоргТочек));

правильно это?

далее если я определяю класс как в (17) то у меня вылетает ошибка

СкПарс=СоздатьОбъект("ПарсерСкидок");
{Справочник.Склады.Форма.Модуль(226)}: ПарсерСкидок::НайтиСкидкуГоловнойФирмы() : СкидкиОбъектов::НайтиПоРеквизиту(Строка Имя=Объект, Справочник Значение=         5   , Число Флаг=1) : Значение не представляет агрегатный объект
Возврат БК.НайтиПоРеквизиту(Имя,Значение,Флаг);
{OxyObjectsPoffs@MD(96) }

Если Ск.НайтиПоОбъекту(Ф.ТекущийЭлемент())=1 Тогда
{discounts_parser@MD(64) }
23 ADirks
 
05.12.12
06:46
(22) Похоже, что просто не получится. Надо детально разбираться, как там чего происходит в этом классе.

Унаследоваться от двух видов справочников это был крутой тактический ход.
24 Ёпрст
 
05.12.12
09:49
(23)скорее всего лень..
прописывать одни и теже куски кода в обеих классах.
25 perkos
 
05.12.12
10:05
(24) мне не лень прописать а разобратся лень, надеюсь не понадобится в будущем это.
по инфе что я показал трудно сказать в каких классах и чего делать?
26 Ёпрст
 
05.12.12
10:06
(25) скорее всего, часть классов вообще можно выкинуть, достаточно посмотреть в коде для чего они и что делают.
27 ADirks
 
05.12.12
10:17
(24) ну кагбе для этого наследование существует, но видимо дизайнер решил сделать финт ушами.

А теперь в результате гениального дизайна проблемы у товарища. Попробуй их щас, растащи, скидки эти.
28 perkos
 
13.12.12
13:56
//БК=Сам(Контекст).ПолучитьБазовыйКласс("Справочник."+СпрСкТоргТочек);
   //Сам(Контекст).НазначитьБазовыйКласс("Справочник."+СпрСкТоргТочек);
   
   БК=вирт().ПолучитьБазовыйКласс("Справочник."+СпрСкТоргТочек);
   вирт().ЗаменитьБазовыйОбъект("Справочник."+СпрСкТоргТочек,БК);


как вам такой финт?
29 ADirks
 
13.12.12
14:15
а зачем себя на себя менять?
30 perkos
 
14.12.12
07:57
это разраб предложил, я его нашел и попросил посмотреть(=
31 perkos
 
17.12.12
08:21
Ёпрст4 зачем ты мне поставил 1спп версии 3.2... я не понял как в ней отладку разрешить... пробую сам на 2.5 сейчас поотлаживать разобратся
32 ADirks
 
17.12.12
08:31
Верни всё взад! В 3.2.х.х отладку включать не надо. Ставишь брейкпойнт, и вперёд. Только есть нюанс: если у тебя реализация отлаживаемого класса хранится в МД, то брейкпойнт надо поставить на первом вызове метода, зайти в модуль класса по F8, и вот здесь уже ставить брейкпойнт где нужно. А лучше в процессе отладки реализации в .ert держать.
33 Ёпрст
 
17.12.12
09:09
Не , взад не надо, а вот пару классов переписать или выкинуть их совсем, не помешало бы.
34 Ёпрст
 
17.12.12
09:09
:)
35 perkos
 
17.12.12
09:19
выкинуть не получится... а как переписывать пока не ясно... разраб сам похоже не шарит уже
36 perkos
 
17.12.12
09:22
на 2.5 нет этого метода Вирт()... видимо лучше сделать два класса скидок для складов и клиентов... вместо одного универсального
37 Ёпрст
 
17.12.12
09:22
зачем тебе 2.5 ?!
38 Mikeware
 
17.12.12
09:24
(37) некрофил.
ну, или некроман...
39 Ёпрст
 
17.12.12
09:27
(38) изначально у него 1.8 стояла + радуга..
40 Ёпрст
 
17.12.12
09:27
так что, 2.5 - явный рост
:)
41 perkos
 
17.12.12
09:29
(37) отладку хочу...

Информация о настройках:

EnableHookEventsGroupContext: 0
EnableCheckType: 0
EnableDebugging: 0
EnableOptimization: 1
EnableTableSourceTable: 1
EnableTurboBL: 1

как это включить? EnableDebugging: 0

(32) не получается
42 Ёпрст
 
17.12.12
09:49
ЗагрузитьВнешнююКомпоненту("1cpp.dll");    
Настройки=СоздатьОбъект("УправлениеНастройками");
Настройки.Включить("Отладка");