|
|
|
Прямой доступ к данным 1С:Предприятие через LinqToSql
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Предлагаю вашему вниманию статью " Использование технологии LinqToSql для прямого доступа к данным 1С:Предприятие " ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2009, 11:21 |
|
||
|
Прямой доступ к данным 1С:Предприятие через LinqToSql
|
|||
|---|---|---|---|
|
#18+
авторПри рассмотрении способа доступа LinqToSql проблема остается – меняющиеся названия объектов БД, но ее значимость можно уменьшить, сгенерировав dbml-файл из 1С, присвоив названия классам из метаданных конфигурации 1С. Если при обновлении конфигурации изменятся имена таблиц или полей БД, то необходимо будет только заново сгенерить dbml-файл и поместить его в App_Code-каталог без изменения кода классов программы. гламурно, ничего не скажешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2009, 13:00 |
|
||
|
Прямой доступ к данным 1С:Предприятие через LinqToSql
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. Киньте ещё примерчиков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2009, 13:09 |
|
||
|
Прямой доступ к данным 1С:Предприятие через LinqToSql
|
|||
|---|---|---|---|
|
#18+
bured, Пожалуйста, не жалко :) var видыТоваров = from видТовара in dc.GetTable<РегистрСведенийЗначенияСвойствОбъектов>() join видТовараСвойство in dc.GetTable<ПланВидовХарактеристикСвойстваОбъектов>() on видТовара.Свойство equals видТовараСвойство.Ссылка join значениеСвойства in dc.GetTable<СправочникЗначенияСвойствОбъектов>() on видТовара.Значение equals значениеСвойства.Ссылка where видТовараСвойство.Наименование == "Вид товара" select new { НоменклатураСсылка = видТовара.Объект, ВидТовараСсылка = видТовара.Значение, ВидТовара = значениеСвойства.Наименование }; var производители = from производитель in dc.GetTable<РегистрСведенийЗначенияСвойствОбъектов>() join производительСвойство in dc.GetTable<ПланВидовХарактеристикСвойстваОбъектов>() on производитель.Свойство equals производительСвойство.Ссылка join значениеСвойства in dc.GetTable<СправочникЗначенияСвойствОбъектов>() on производитель.Значение equals значениеСвойства.Ссылка where производительСвойство.Наименование == "Производитель" select new { НоменклатураСсылка = производитель.Объект, ПроизводительСсылка = производитель.Значение, Производитель = значениеСвойства.Наименование }; var коллекции = from коллекция in dc.GetTable<РегистрСведенийЗначенияСвойствОбъектов>() join коллекцияСвойство in dc.GetTable<ПланВидовХарактеристикСвойстваОбъектов>() on коллекция.Свойство equals коллекцияСвойство.Ссылка join значениеСвойства in dc.GetTable<СправочникЗначенияСвойствОбъектов>() on коллекция.Значение equals значениеСвойства.Ссылка where коллекцияСвойство.Наименование == "Коллекция" select new { НоменклатураСсылка = коллекция.Объект, КоллекцияСсылка = коллекция.Значение, Коллекция = значениеСвойства.Наименование }; DateTime текущаяДата = DateTime.Now; DateTime началоМесяца = new DateTime(текущаяДата.Year, текущаяДата.Month, 1); var товарыНаСкладахИтоги = from товарНаСкладе in dc.GetTable<РегистрНакопленияТоварыНаСкладахИтоги>() where (товарНаСкладе._Period == началоМесяца) select new { Склад = товарНаСкладе.Склад, Номенклатура = товарНаСкладе.Номенклатура, Количество = товарНаСкладе.Количество }; var товарыНаСкладахДетали = from товарНаСкладе in dc.GetTable<РегистрНакопленияТоварыНаСкладах>() let активность = 1 //товарНаСкладе.Активность.ToArray()[0] where (началоМесяца <= товарНаСкладе.Период) && (товарНаСкладе.Период <= текущаяДата) && (активность == 1) select new { Склад = товарНаСкладе.Склад, Номенклатура = товарНаСкладе.Номенклатура, Количество = товарНаСкладе._RecordKind == 0 ? товарНаСкладе.Количество : -1 * товарНаСкладе.Количество }; var товарыНаСкладах = from товарНаСкладе in товарыНаСкладахИтоги.Concat(товарыНаСкладахДетали) group товарНаСкладе by new { товарНаСкладе.Номенклатура, товарНаСкладе.Склад } into группа let количествоСумма = группа.Sum(элемент => элемент.Количество) select new { Склад = группа.Key.Склад, Номенклатура = группа.Key.Номенклатура, Количество = количествоСумма }; var доступныеТовары = from товарНаСкладе in товарыНаСкладах join номенклатура in dc.GetTable<СправочникНоменклатура>() on товарНаСкладе.Номенклатура equals номенклатура.Ссылка join видТовара in видыТоваров on номенклатура.Ссылка equals видТовара.НоменклатураСсылка join производитель in производители on номенклатура.Ссылка equals производитель.НоменклатураСсылка join коллекция in коллекции on номенклатура.Ссылка equals коллекция.НоменклатураСсылка join еи in dc.GetTable<СправочникЕдиницыИзмерения>() on номенклатура.ЕдиницаХраненияОстатков equals еи.Ссылка where товарНаСкладе.Количество > 0 select new Товар { Ссылка = товарНаСкладе.Номенклатура, Наименование = номенклатура.Наименование, Остаток = (double)товарНаСкладе.Количество, ВидТовара = видТовара.ВидТовара, Производитель = производитель.Производитель, Коллекция = коллекция.Коллекция, ЕИ = еи.Наименование }; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2009, 13:22 |
|
||
|
Прямой доступ к данным 1С:Предприятие через LinqToSql
|
|||
|---|---|---|---|
|
#18+
раскладку переключать не задалбывает? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2009, 16:21 |
|
||
|
Прямой доступ к данным 1С:Предприятие через LinqToSql
|
|||
|---|---|---|---|
|
#18+
зыраскладку переключать не задалбывает? :) Сначала непривычно было, но код красивее становится, особенно, когда смотришь со стороны. Многие почему-то не знают, что C# поддерживает русские названия переменных и классов, удивляются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2009, 06:52 |
|
||
|
Прямой доступ к данным 1С:Предприятие через LinqToSql
|
|||
|---|---|---|---|
|
#18+
предлагаю потратить пол часа драгоценного времени и написать pre-build preprocessor, который будет реплейсить кейворды на альтернативные, например: for=>для if=>если void=>пустота var=>какието ну и т.д... будет ещё красивее: Код: plaintext 1. 2. 3. 4. 5. эээх, красота... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2009, 19:11 |
|
||
|
Прямой доступ к данным 1С:Предприятие через LinqToSql
|
|||
|---|---|---|---|
|
#18+
зы, я бы так не радовался. Все на самом деле очень грустно. Все просто катастрофически беспросветно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2009, 22:28 |
|
||
|
Прямой доступ к данным 1С:Предприятие через LinqToSql
|
|||
|---|---|---|---|
|
#18+
ты просто ничего не понимаешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2009, 23:25 |
|
||
|
Прямой доступ к данным 1С:Предприятие через LinqToSql
|
|||
|---|---|---|---|
|
#18+
зыпредлагаю потратить пол часа драгоценного времени и написать pre-build preprocessor, который будет реплейсить кейворды на альтернативные, например: for=>для if=>если void=>пустота var=>какието Если новая версия C# будет поддерживать переопределение keywords, обязательно так и сделаю, чтобы как можно больше 1С-овцев приобщилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2009, 06:51 |
|
||
|
|

start [/forum/topic.php?fid=17&msg=36261771&tid=1351628]: |
0ms |
get settings: |
11ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
91ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 251ms |
| total: | 444ms |

| 0 / 0 |
