Сообщение linq2db и Убивец 1С от 24.06.2020 20:03
Изменено 02.07.2020 7:54 Serginio1
Подумал, а почему бы не сделать учетную систему на основе linq2db и Убивец 1С
То есть нужна своя иерархия классов и по неё можно создавать свои вьюшки, определенный набор запросов.
В свое время делал свою систему классов на основе 1С
https://infostart.ru/public/393228/
https://infostart.ru/public/402038/
https://infostart.ru/public/402433/
Обработки можно скачать здесь
http://files.rsdn.org/19608/CodeFirstTo1C.zip
http://files.rsdn.org/19608/CodeFirstTo83.zip
Так в 1С есть поля неопределенных типов, справочников.
Для неопределенного спаравочника Хотелось бы что типа такого
switch TableNumber
{
1=> null,
2=> бд.Спр_Поставщики.Where(поставщик=> поставщик.Id==SprId).DefaultIfEmpty()
select new
{
Наименование
},
3=> бд.Спр_Покупатели.Where(покупатель=> поставщик.Id==SprId).DefaultIfEmpty()
select new
{
Наименование
},
_=>null
}
То есть такое генерилось, но вызывалось как
ПолеНеопределенногоСправочника.Наименование
Можно так
let spr= switch TableNumber
{
1=> null,
2=> бд.Спр_Поставщики.Where(поставщик=> поставщик.Id==SprId).DefaultIfEmpty(),
3=> бд.Спр_Покупатели.Where(покупатель=> поставщик.Id==SprId).DefaultIfEmpty(),
_=>null
}
spr?.Наименование
Кроме того можно применять утиную типизацию для классов с одинаковыми именами полей
Интерес больше представляют остатки и обороты
Да вот еще в 1С ввели понятие виртуальная таблица остаткт и обороты
http://e-1c.ru/node/76
Эффективность обращения к виртуальным таблицам во многом зависит от того, как построено обращение к этой таблице. Стандарт Обращения к виртуальным таблицам описывает общие требования и рекомендации по работе с виртуальными таблицами. В этом стандарте изложены дополнительные рекомендации по повышению эффективности обращения к виртуальной таблице Остатки регистров накопления и бухгалтерии.
При обращении к любой виртуальной таблице платформа 1С:Предприятие генерирует запрос к СУБД, содержащий вложенный запрос. Самым эффективным вложенным запросом для чтения остатков будет чтение хранимой таблицы текущих остатков без применения группировки по измерениям. Платформа 1С:Предприятие сгенерирует такой запрос, если будут соблюдены все перечисленные ниже условия:
получение остатков ведется без указания даты;
не используется разделение итогов (необходимо учитывать при использовании такого режима может снижаться параллельность записи в регистр. См. также Режим разделения итогов для регистров накопления, Режим разделения итогов для регистров бухгалтерии);
внешний по отношению к виртуальной таблице запрос использует все измерения (в предложении ВЫБРАТЬ или в условиях соединения).
Пример.
Регистр накопления ОстаткиТовара содержит два измерения: Склад и Номенклатура, а также ресурс Количество. Необходимо запросом получить список всей номенклатуры, с указанием количества товаров на конкретном складе.
НЕПРАВИЛЬНО
ВЫБРАТЬ
СпрНоменклатура.Ссылка КАК Товар,
ЕСТЬNULL(ОстаткиТоваров.Остаток, 0 ) КАК Остаток
ИЗ
Справочник.Номенклатура КАК СпрНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(&СегодняшняяДата, Склад = &Склад) КАК ОстаткиТоваров
ПО ОстаткиТоваров.Номенклатура = СпрНоменклатура.Ссылка
В этом запросе:
в условия виртуальной таблицы передана дата, поэтому будет использована не только хранимые таблицы остатков, но и таблица движений. Т.к. необходимо получить текущие остатки, то дату в запрос передавать не нужно;
измерение Склад не используется во внешнем по отношению к виртуальной таблице запросе, поэтому вложенный запрос остатков будет содержать группировку этому измерению.
ПРАВИЛЬНО
ВЫБРАТЬ
СпрНоменклатура.Ссылка КАК Товар,
ЕСТЬNULL(ОстаткиТоваров.Остаток, 0 ) КАК Остаток
ИЗ
Справочник.Номенклатура КАК СпрНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(, Склад = &Склад) КАК ОстаткиТоваров
ПО ОстаткиТоваров.Номенклатура = СпрНоменклатура.Ссылка
И ОстаткиТоваров.Склад = &Склад
Указав в выбрать определеннные поля измерений они же являются и группировкой.
Можно рассчитать остатки на любой момент времени
Если будет такая система классов и примитивный пример для ведения учета на складе, то интерес к linq2db возрастет.
http://rsdn.org/forum/dotnet/6164030.flat
Дата: 31.08.15
Так для определенных запросов было выгоднее использовать WITH TIES.
Давно не брал я в руки EF и начал вспоминать, что раньше было и что сейчас
Накопал
https://stackoverflow.com/questions/54657849/problem-mapping-scalar-function-in-ef-core-2-1
https://docs.microsoft.com/ru-ru/ef/core/querying/raw-sql
https://weblogs.asp.net/Dixin/EntityFramework.Functions#Stored_procedure,_with_multiple_result_types
https://github.com/Dixin/EntityFramework.Functions
https://stackoverflow.com/questions/52994531/reference-to-an-itvf-raises-a-second-operation-started-on-this-context-before-a/52996678#52996678
Как с этим в Linq2DB?