Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
_this.Вставить("__type", "ПИ2.Б")
_это.Вставить("__тип", "ПИ2.Б")


Разрабатывать свои интерфейсы — это очень интересно, конечно, но даже если мы возьмем тот же .NET, все базовые интерфейсы уже реализованы, достаточно их выучить и научиться имплементировать правильно, так же и в 1С, уже есть все базывые интерфейсы, необходимости разработки чего-то своего нет. Множественность наследования — по сути, так же не нужна. (Приведите пример, когда в 1С она нужна?) События есть, как события объектов, так и события форм, события статических метаданных, так же как и гобальные подписки на события. Проверка типов есть ТипЗнч(Источник) говорит какой именно тим имеет объект Источник, сравнить его можно с типом полученным по конструктору Тип(«ПеречислениеСсылка.ВидыШтрихкодов») или Тип(«ДокументОбъект.РасходнаяНакладная») используется всегда в глобальных подписках на события в не типовых доработках, не снимающих с поддержки типовую конфигурацию.
Компилирование в C# аналогично компилированию в 1С, так же как C# производит конвертацию в MSIL 1С производит компиляцию в свой промежуточный язык исполнения, который далее исполняется либо в CLR для C# либо в Платформе для 1С.
Nop = 0,
LineNo = 1,
PushStatic = 2,
PushLocal = 3,
PushConst = 4,
PushReturn = 5,
PushFalse = 6,
PushTrue = 7,
PushUndefined = 8,
PushNull = 9,
PushEmpty = 10,//???
Pop = 11,
GetObjectProperty = 12,
GetIndexed = 13,
SelEnum = 14,
NextEnum = 15,
Assign = 16, //Pop = Pop
AssignReturnValue = 17, //Pop = Pop
SetParamsCount = 18, //Parameter number
Call = 19,
CallObjectProcedure = 20,
CallObjectFunction = 21,
Ret = 22,
Neg = 23,
Add = 24,
Sub = 25,
Mul = 26,
Div = 27,
Mod = 28,
Not = 29,
AndJmp = 30,
OrJmp = 31,
LogVal = 32, //???
EQ = 33,
NE = 34,
GT = 35,
LT = 36,
GE = 37,
LE = 38,
Jmp = 39,
JZ = 40, //Else go to op1
JNZ = 41,
JmpLbl = 42,
Inc = 43,
PushTry = 44,
PopTry = 45,
EndTry = 46,
Raise = 47,
PushFor = 48,
PushForVar = 49,
PopFor = 50,
New = 51, //Constants[op1]
Execute = 52,
StrLen = 53,
TrimL = 54,
TrimR = 55,
TrimAll = 56,
Left = 57,
Right = 58,
Mid = 59,
Find = 60,
Upper = 61,
Lower = 62,
Char = 63,
CharCode = 64,
IsBlankStr = 65,
Int = 66,
RoundDefault = 67,
Round = 68,
Boolean = 69,
Numeric = 70,
String = 71,
Date = 72,
Date3 = 73,
Date6 = 74,
AddMonth = 75,
BegOfMonth = 76,
EndOfMonth = 77,
BegOfQuart = 78,
EndOfQuart = 79,
BegOfYear = 80,
EndOfYear = 81,
Year = 82,
Month = 83,
Day = 84,
Hour = 85,
Minute = 86,
Second = 87,
DayOfYear = 88,
WeekOfYear = 89,
WeekDay = 90,
BegOfWeek = 91,
EndOfWeek = 92,
BegOfDay = 93,
EndOfDay = 94,
BegOfHour = 95,
EndOfHour = 96,
BegOfMinute = 97,
EndOfMinute = 98,
CurDate = 99,
StrReplace = 100,
LinesCount = 101,
LineGet = 102,
Min = 103,
Max = 104,
StrCountOccur = 105,
ErrorDescr = 106,
TypeOf = 107,
Type = 108,
Eval = 109,
Format = 110,
NewObject = 111,
ACos = 112,
ASin = 113,
ATan = 114,
Cos = 115,
Exp = 116,
Log = 117,
Log10 = 118,
Pow = 119,
Sin = 120,
Sqrt = 121,
Tan = 122,
AddHndlr = 123,
AddObjHndlr = 124,
RmvHndlr = 125,
RmvObjHndlr = 126,
Title = 127,
ErrorInfo = 128
Intellisense в 1С 8.3 есть, подсказки глобальных функций, подсказки реквизитов определенных типов, подсказки по объектам метаданных, так же все функции имеющие стандарт комментировая так же подсказываются с пояснениями что за аргумент и какого он типа при наборе. Надо просто научиться всем этим пользоваться =)
Для контроля версий есть Хранилище конфигурации, афигенно удобный инстурмент, в котором можно захватывать и помещать объекты общей конфигурации, чтобы не было коллизий между группой разработчиков.
Но можно так же и обычный Git использовать, достаточно выгрузить конфигурацию в промежуточные файды (txt, xml, mxl, epf, ert), но именно для 1С это менее удобно, чем использовать хранилище.
В 8.3 есть unit тестирование, ровно как и нагрузочное тестирование, как и оценка производительности в «особых» условиях.
Наверное, снова разочарую вас, но практически использовать в GIT выгрузку конфигурации XML у вас вряд ли получится. Попробуйте поработать с миллионом скинутых в один каталог файлов, где не работает функция сравнения для mxl, epf, erf форматов. Почему компании 1С нельзя было их разложить сразу по папкам Объект/Назвние/<Файлы объекта>? Кстати, внешние отчеты/обработки до сих пор не выгружаются в XML.
var Model = Compilation.GetSemanticModel(tree);var compilation = CSharpCompilation.Create("1ccode").WithOptions(new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)).AddReferences(new MetadataFileReference(typeof(object).Assembly.Location)).AddSyntaxTrees(tree);
var Model = compilation.GetSemanticModel(tree);
Как оказалось, у подхода компилирования C# в код 1С могут быть еще достоинства. Разработка 1С из конфигуратора в теории может быть перемещена в Visual Studio со всеми преимуществами: intellisense, быстрый рефакторинг, контроль типов, встроенный контроль ошибок при компилировнии. Плюс контроль версий сторонними средствами (проект C# в виде файлов в папке). Возможно, юнит-тестирование. Еще код на C# более выразительный. Сложный проект можно разделить на модули-сборки проектов C#.
[Uuid("e25d7fed-761e-4247-923e-01b2a1df479b")]
[GeneratedType(GeneratedTypeCategory.Ref, "39091fcf-4739-4c06-ad24-085f96fff7f2", "4ebf46c2-ce91-44f8-96d5-ac7dc143095f")]
[GeneratedType(GeneratedTypeCategory.Manager, "7fb5c2f6-6579-4734-9dce-4e3db33c0100", "26e51616-0d45-4ee1-b90a-4a9aa2682ec7")]
[GeneratedType(GeneratedTypeCategory.List, "32f4ed6d-cd34-4a19-8cf1-ad290cbad5f2", "e2039c40-5bdd-4a07-9a94-4693575d8c08")]
public class СтатусыИзвлеченияТекстаФайлов : Enumeration
{
[Synonym("ru", "Не извлечен")]
public static readonly EnumRef<СтатусыИзвлеченияТекстаФайлов> НеИзвлечен = new EnumRef<СтатусыИзвлеченияТекстаФайлов>(new Guid("e9bab7c9-2560-41bb-a4e2-d3c05bc622ef"));
[Synonym("ru", "Извлечен")]
public static readonly EnumRef<СтатусыИзвлеченияТекстаФайлов> Извлечен = new EnumRef<СтатусыИзвлеченияТекстаФайлов>(new Guid("bf28a953-23ae-4308-891f-c51f47f95e6c"));
[Synonym("ru", "Извлечь не удалось")]
public static readonly EnumRef<СтатусыИзвлеченияТекстаФайлов> ИзвлечьНеУдалось = new EnumRef<СтатусыИзвлеченияТекстаФайлов>(new Guid("543b7113-448a-4e17-bb7c-8fef149aa8ed"));
public override void ChoiceDataGetProcessing(object ChoiceData, object Parameters, ref bool StandardProcessing)
{
//код для ОбработкаПолученияДанныхВыбора
}
}
Roslyn для автоматического перевода кода C# в 1С-код