Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Прямой доступ к данным 1С:Предприятие через LinqToSql / 11 сообщений из 11, страница 1 из 1
20.10.2009, 11:21
    #36261427
Elisy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прямой доступ к данным 1С:Предприятие через LinqToSql
Здравствуйте!
Предлагаю вашему вниманию статью " Использование технологии LinqToSql для прямого доступа к данным 1С:Предприятие "
...
Рейтинг: 0 / 0
20.10.2009, 13:00
    #36261771
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прямой доступ к данным 1С:Предприятие через LinqToSql
авторПри рассмотрении способа доступа LinqToSql проблема остается – меняющиеся названия объектов БД, но ее значимость можно уменьшить, сгенерировав dbml-файл из 1С, присвоив названия классам из метаданных конфигурации 1С. Если при обновлении конфигурации изменятся имена таблиц или полей БД, то необходимо будет только заново сгенерить dbml-файл и поместить его в App_Code-каталог без изменения кода классов программы.
гламурно, ничего не скажешь
...
Рейтинг: 0 / 0
20.10.2009, 13:09
    #36261805
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прямой доступ к данным 1С:Предприятие через LinqToSql
Код: plaintext
1.
УправлениеТорговлейДляКазахстана dc = new УправлениеТорговлейДляКазахстана(ConfigurationManager.ConnectionStrings["GalTUS2ConnectionString"].ConnectionString);
Table<СправочникНоменклатура> table = dc.GetTable<СправочникНоменклатура>();
Взбодрило.
Киньте ещё примерчиков.
...
Рейтинг: 0 / 0
20.10.2009, 13:22
    #36261845
Elisy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прямой доступ к данным 1С:Предприятие через LinqToSql
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)товарНаСкладе.Количество,
ВидТовара = видТовара.ВидТовара,
Производитель = производитель.Производитель,
Коллекция = коллекция.Коллекция,
ЕИ = еи.Наименование
};
...
Рейтинг: 0 / 0
20.10.2009, 16:21
    #36262396
зы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прямой доступ к данным 1С:Предприятие через LinqToSql
раскладку переключать не задалбывает? :)
...
Рейтинг: 0 / 0
21.10.2009, 06:52
    #36263266
Elisy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прямой доступ к данным 1С:Предприятие через LinqToSql
зыраскладку переключать не задалбывает? :)
Сначала непривычно было, но код красивее становится, особенно, когда смотришь со стороны. Многие почему-то не знают, что C# поддерживает русские названия переменных и классов, удивляются.
...
Рейтинг: 0 / 0
21.10.2009, 19:11
    #36265336
зы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прямой доступ к данным 1С:Предприятие через LinqToSql
предлагаю потратить пол часа драгоценного времени и написать pre-build preprocessor, который будет реплейсить кейворды на альтернативные, например:

for=>для
if=>если
void=>пустота
var=>какието

ну и т.д... будет ещё красивее:

Код: plaintext
1.
2.
3.
4.
5.
какието видыТоваров = из видТовара в dc.GetTable<РегистрСведенийЗначенияСвойствОбъектов>()
объединить видТовараСвойство в dc.GetTable<ПланВидовХарактеристикСвойстваОбъектов>() на видТовара.Свойство равняется видТовараСвойство.Ссылка
объединить значениеСвойства в dc.GetTable<СправочникЗначенияСвойствОбъектов>() на видТовара.Значение равняется значениеСвойства.Ссылка
где видТовараСвойство.Наименование == "Вид товара"
выбрать новый{ НоменклатураСсылка = видТовара.Объект, ВидТовараСсылка = видТовара.Значение, ВидТовара = значениеСвойства.Наименование };

эээх, красота...
...
Рейтинг: 0 / 0
21.10.2009, 22:28
    #36265564
слоненок
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прямой доступ к данным 1С:Предприятие через LinqToSql
зы,
я бы так не радовался. Все на самом деле очень грустно. Все просто катастрофически беспросветно.
...
Рейтинг: 0 / 0
21.10.2009, 23:25
    #36265633
зы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прямой доступ к данным 1С:Предприятие через LinqToSql
ты просто ничего не понимаешь
...
Рейтинг: 0 / 0
22.10.2009, 06:51
    #36265757
Elisy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прямой доступ к данным 1С:Предприятие через LinqToSql
зыпредлагаю потратить пол часа драгоценного времени и написать pre-build preprocessor, который будет реплейсить кейворды на альтернативные, например:

for=>для
if=>если
void=>пустота
var=>какието

Если новая версия C# будет поддерживать переопределение keywords, обязательно так и сделаю, чтобы как можно больше 1С-овцев приобщилось.
...
Рейтинг: 0 / 0
22.10.2009, 19:56
    #36267845
слоненок
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прямой доступ к данным 1С:Предприятие через LinqToSql
зыты просто ничего не понимаешь .. :7
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Прямой доступ к данным 1С:Предприятие через LinqToSql / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]