Code First и Linq to EF на примере 1С версии 7.7 и 8.3 часть I

05.10.16

Разработка - Языки и среды

Данный проект является чисто исследовательским примером использования Code First и Linq to EF на примере 1С версии 7.7. Так как сам я программист 1С, то мне всегда было интересно, как можно перенести модель объектов 1С на компилируемые языки, и использовать мощь Linq to EF. С появлением Code First давно хотел прикрутить, но все как-то руки не доходили, и вот, наконец ..

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Обработки формирующая тексты модулей для Code First для баз 7.7 и 8.3
.zip 119,53Kb
3 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Продолжение здесь //infostart.ru/public/402038/ 

Здесь лежит практика использования //infostart.ru/public/402433/

И примеры использования классов .Net в 1С

//infostart.ru/public/448668/

//infostart.ru/public/238584/

Для начала создадим базовый класс

public class СправочникПредок

Вступайте в нашу телеграмм-группу Инфостарт

Linq Code First

См. также

Языки и среды Программист 1С 8.3 Абонемент ($m)

Рассматривается методология реализации принципов ООП в 1С.

1 стартмани

29.06.2026    1513    szv    6    

1

Языки и среды Программист 1С:Предприятие 8 Абонемент ($m)

Подсистема для использования принципов объектно-ориентированного программирования на платформе 1С:Предприятие 8

1 стартмани

02.12.2025    2736    vadim1980    11    

3

Языки и среды Программист ИТ-компания Бесплатно (free)

В статье рассматриваются принципы работы с асинхронным программированием в Python с использованием async/await. На практических примерах показано, как создавать и управлять асинхронными задачами, использовать ключевые методы модуля asyncio, такие как create_task, gather, wait_for, и избегать распространённых ошибок. Материал будет полезен разработчикам, которые хотят улучшить производительность своих приложений за счёт асинхронного выполнения операций.

03.03.2025    5610    war41k    2    

4

Языки и среды Программист 1С:Предприятие 8 Бесплатно (free)

Будем писать свои скрипты на питоне и запускать их на 1С.

15.04.2024    12488    YA_418728146    14    

68

Языки и среды Программист Стажер 1С:Предприятие 8 Бесплатно (free)

Существует множество языков программирования, и каждый имеет свои особенности по работе с типами данных. Слабые, явные, динамические и другие... Но кто же здесь 1С и почему с приходом "строгой" типизации EDT 1С-программистам стоит задуматься над изменением своих привычек.

16.01.2024    17284    SeiOkami    25    

66

Языки и среды Программист Бесплатно (free)

Пример небольшого приложения, с которого можно начать изучать язык программирования Dart.

08.08.2023    7923    acvatoris    6    

14

Языки и среды Программист 1С:Предприятие 8 Россия Бесплатно (free)

Написание статического анализатора для 1С традиционным способом на Си.

30.06.2023    6505    prohorp    15    

12

Языки и среды Программист Абонемент ($m)

Поставили нам задачу - вынести на отдельный сервер функционал получения заказов от клиентов по электронной почте, парсинг полученных XLS в приемлемый вид и трансформация заказов в красивый JSON, понятный нашей учетной системе на 1С. Всю эту красоту желательно запустить в отдельном докер - контейнере, по возможности не тратя лицензии, поэтому отдельно стоящую конфигурацию на БСП отвергаем сразу. Можно было бы собрать всё на Apache Airflow или Apache NiFi, но решили попробовать реализовать всю логику без Open Source, будем делать свой ETL, с Исполнителем, который в версии 3.0 научился взаимодействовать с электронной почтой по IMAP. Начнем с середины - сначала напишем скрипты, а потом соберем их в рабочую конструкцию

1 стартмани

01.06.2023    4832    0    1cembreg    2    

11
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Serginio 946 31.08.15 14:31 Сейчас в теме

Вот какие левые запросы с условием на неравенство получились

var бд = Константы1С.ГлобальныйКонтекст.БД;

            var qr = from Номенклатура in бд.Спр_Номенклатура 
                     from единицы in бд.Спр_Единицы.Where(единица => единица.ВладелецId == Номенклатура.ID && единица.ШтрихКод.CompareTo("4") > 0).DefaultIfEmpty() 
                     select new { Номенклатура.Наименование,
                         Номенклатура.ПолнНаименование,
                         единицы.ШтрихКод,
                         ОКЕИ=единицы.ОКЕИ.Наименование
                     };



            foreach (var элем in qr.Take(1000)) 
            { 

                if (элем.ШтрихКод == null)
                    continue;

                Console.WriteLine("{0}.{1} - {2}", элем.Наименование.TrimEnd(), элем.ШтрихКод == null ? "null" : элем.ШтрихКод, элем.ПолнНаименование.TrimEnd(), элем.ОКЕИ == null ? "null" : элем.ОКЕИ);


            }

Показать


Выдает такой запрос
SELECT 
    [Limit1].[C1] AS [C1], 
    [Limit1].[DESCR] AS [DESCR], 
    [Limit1].[SP101] AS [SP101], 
    [Limit1].[SP80] AS [SP80], 
    [Limit1].[DESCR1] AS [DESCR1]
    FROM ( SELECT TOP (1000) 
        [Extent1].[DESCR] AS [DESCR], 
        [Extent1].[SP101] AS [SP101], 
        [Extent2].[SP80] AS [SP80], 
        [Extent3].[DESCR] AS [DESCR1], 
        1 AS [C1]
        FROM   [dbo].[SC84] AS [Extent1]

        LEFT OUTER JOIN [dbo].[SC75] AS [Extent2] ON ([Extent2].[PARENTEXT] = [Extent1].[ID]) AND ([Extent2].[SP80] > N'4') 
        LEFT OUTER JOIN [dbo].[SC41] AS [Extent3] ON [Extent2].[SP79] = [Extent3].[ID] 
    )  AS [Limit1]


Показать
Или больше мне нравится таой запрос

var бд = Константы1С.ГлобальныйКонтекст.БД;
            var qr = from Номенклатура in бд.Спр_Номенклатура

                     select new
                     {
                         Номенклатура.Наименование,
                         Номенклатура.ПолнНаименование,
                         Единицы = (Номенклатура.ПодчиненныеЕдиницы.Where(единица => единица.ШтрихКод.CompareTo("4") > 0)
                         .Select(единица =>

                         new
                         {
                             единица.ШтрихКод,
                             ОКЕИ = единица.ОКЕИ.Наименование
                         }
            )
                         )
                     };


            foreach (var элем in qr.Take(1000))
            {


                foreach (var единица in элем.Единицы)
                    Console.WriteLine("{0}.{1} - {2}", элем.Наименование.TrimEnd(), единица.ШтрихКод, элем.ПолнНаименование.TrimEnd(), единица.ОКЕИ);


            }

Показать

Генерирут SQL запрос


SELECT 



    [Project2].[ID] AS [ID], 
    [Project2].[C1] AS [C1], 
    [Project2].[DESCR] AS [DESCR], 
    [Project2].[SP101] AS [SP101], 
    [Project2].[C2] AS [C2], 
    [Project2].[SP80] AS [SP80], 
    [Project2].[DESCR1] AS [DESCR1]
    FROM ( SELECT 
        [Limit1].[ID] AS [ID], 
        [Limit1].[DESCR] AS [DESCR], 
        [Limit1].[SP101] AS [SP101], 
        [Limit1].[C1] AS [C1], 
        [Join1].[SP80] AS [SP80], 
        [Join1].[DESCR] AS [DESCR1], 
        CASE WHEN ([Join1].[PARENTEXT] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C2]
        FROM   (SELECT TOP (1000) 
            [Extent1].[ID] AS [ID], 
            [Extent1].[DESCR] AS [DESCR], 
            [Extent1].[SP101] AS [SP101], 
            1 AS [C1]
            FROM [dbo].[SC84] AS [Extent1] ) AS [Limit1]
        LEFT OUTER JOIN  (SELECT [Extent2].[PARENTEXT] AS [PARENTEXT], [Extent2].[SP80] AS [SP80], [Extent3].[DESCR] AS [DESCR]
            FROM  [dbo].[SC75] AS [Extent2]
            INNER JOIN [dbo].[SC41] AS [Extent3] ON [Extent2].[SP79] = [Extent3].[ID] ) AS [Join1] ON ([Limit1].[ID] = [Join1].[PARENTEXT]) AND ([Join1].[SP80] > N'4')
    )  AS [Project2]
    ORDER BY [Project2].[ID] ASC, [Project2].[C2] ASC
Показать

Для отправки сообщения требуется регистрация/авторизация