Как система 1с предприятие выполняет обращение к ссылочным данным
Перейти к содержимому

Как система 1с предприятие выполняет обращение к ссылочным данным

  • автор:

Вирус скуки

Вощем, я люблю фантастику, да. И, думая, чтобы мне почитать — мне в мозг пришла мысль о творениях Глуховского «Метро-2033». Почему то на слуху было это название. Загуглив, я увидел хвалебные отзывы: «Иксклюзив! Бистселлер! Уруруру! Как охуенно!». Хм, надо почитать.
Так вот. Лютое, дикое, беспросветное говнище, написано школьником для школьников, нелогичное, неинтересное, не страшное, неточное, не смешное, какая-то блять пурга из мутантов оружия хуеружия «глубинного смысла». Но главный минус — это язык. Аффтар не владеет литературным языком. Вообще. Как это блять напечатали в книгу? Это фанфик, не более.
Все, блять, отдает лубочностью. Главный герой — школьник (ну надо же целевую аудиторию привлечь), не такой как все, зато с автоматом. Место действия — Загадочное И Таинственное постьядерное Метро. В качестве врагов — другие люди (хоспаде, они с таким энтузиазмом убивают друг друга, что удивительно, как они не выкосили друг друга то за столько лет), мутанты (пиздец, мутанты от радиации. Ага, бомба ебнула, всех людей убила, а на следующий день по поверхности уже мутанты ползали. Бывает, чо уж там), галлюцинации, а в кремле тусят демоны. Ох ты ж блять, мистика.
Аватар не забыл добавить в свой высер глобальный и «внезапный» сюжетный поворот — черные мутанты, которые типа плохие, на самом деле хорошие, а прохие — это люди, которые загандошили их нахуй искандерами.
Более мелкие «внезапные» повороты — да на каждом, блять, шагу, одни сплошные рояли из кустов. Кароч, что купил эту книгу — тот долбоеб. В своем рейтинге я ставлю 5/10. Кто-то скажет, что это много? Нет, это уровень порно-фанфиков про Гарипотера (нравятся мне они). Гааааавно.

Метро 2034 — те же яйца, только в профиль. Сюжет по прежнему остался рояльным. Стилистика языка выправилась. Стало больше паранормальщины (зачеееем?), и глубинных размышлений автора (я уже говорил, что жизненная позиция автора кажется мне школьной?). Читать это не надо.
Из интересного — у одного из героев, музыканта, есть флейта. Хуй с ней, что она ЧЕРНАЯ с медными клавишами — ну мало ли извращенцев бывает, вон ставят на запорожец движок от волги, и ничо. Но от фразы «Когда затихли последние аккорды. » Для самых маленьких читателей, аккорд — это одновременное звучание 3 и более нот. Как это сыграть на одной флейте? Ну да похуй.

Вощем, сегодня я вам рассказал, что «Метро-2033» и «Метро-2034» от Глуховский Дмитрий Алексеевич — гавнище. Экономьте своё время, и читайте годные книжки, и все будет хоккей. Чао!

1С-ное.(Заметки быдло-ученика-погромиста), 15 занятие.

Для чего предназначен объект конфигурации План Видов Характеристик?

Объект конфигурации План Видов Характеристик предназначен для описания структуры хранения информации о характеристиках, создаваемых пользователем. На его основе платформа создает в базе данных набор таблиц, в которых будет храниться информация о существующих видах характеристик и типе значения характеристики каждого вида.

В чем принципиальное отличие плана вида характеристик от справочника?

Основное отличие плана видов характеристик заключается в том, что для каждой характеристики хранится тип значения, который она может принимать;

Что такое тип значения характеристик?

Тип значения характеристик – определяет составной тип данных, куда входят все типы, которые могут понадобиться при указании типа значения характеристики; Служит для задания возможных типов значений.

Зачем нужны дополнительные значения характеристик?
Для добавления новых типов данных, которые не существуют в конкретной конфигурации.
Как, используя план видов характеристик, организовать учет по переменному количеству характеристик?

Это можно сделать, используя следующую логическую схему: план видов характеристик, который хранит виды характеристик, которыми в принципе можно описывать материалы;

Специальный справочник, подчиненный справочнику с объектами, к которым будет приписываться характеристика, данный спецсправочник будет идентифицировать объекты с некоторым фиксированным набором значений характеристик;

Регистр сведений, в котором хранится соответствие конкретных значений характеристик к некоторому варианту объекта.

Как создать план видов характеристик?
Как и все объекты, в дереве конфигурации, по правому клику.
Что такое связь по параметрам выбора?

Связь по параметрам выбора обеспечивает то, что при выборе значений для выбора будут предлагаться только те, которые относятся к выбранной характеристике, а не все, что есть в справочнике;

Как задать синоним стандартного реквизита?

Для этого переходим в справочник, на закладке «Данные» находим кнопку «стандартные реквизиты», выбираем нужный реквизит и в палитре свойств можем вписать синоним.

Как изменить заголовок формы?

Переходим в форму, кликаем (очень аккуратно) таким образом, чтобы выделить именно всю форму, правый клик и в панели свойств появится окошко «заголовок».

Как скрывать элементы формы с подчиненной информацией при её создании?

Удалить эти элементы в окошке создания и редактирования формы. Они будут в окошке «Элементы», это правое верхнее окошко.

Как описать характеристики в схеме компоновки данных?

Сделать ссылку на набор свойств с помощью свойства элемента «ПутьКДанным» — установка связи элемента формы с реквизитом формы.

Вирус скуки

При поиске элемента сначала идет обращение в оперативную память, если там ничего нет, идет обращение в кэш объектов, если нет в кэше, то идет обращение в базу данных.

Как использовать кэш объектов?
Через кэш происходит только чтение; кэш бывает двух видов: обычный и транзакционный;
Почему для доступа к БДшным массивам данных предпочтительнее использовать запросы?
Выборка таскает все поля, а запрос – только нужные, согласно условию.
Что такое момент времени?

Момент времени – совокупность даты, времени и ссылки на объект базы данных, позволяющий однозначно идентифицировать любой объект ссылочного типа Базы Данных;

Чем отличается оперативное проведение от неоперативного?
Оперативное – проведение документа текущим временем.

Неоперативное – проведение документа ранее текущего времени. При оперативном проведении – контроль остатков; При неоперативном – контроля остатков нет;

Что такое оперативная отметка времени?

Создается каждый раз при оперативном проведении документа. Формируется из текущей даты сеанса и последней созданной отметки.

Как запросом получить остатки регистра накопления?
Выбрать виртуальную таблицу регистра накопления «Остатки» : ИмяРегистраНакопления.Остатки;
На что следует обращать внимание при задании параметров виртуальных таблиц запросов?

Часто выгоднее использовать условие для отбора непосредственно в параметрах, это позволит повысить производительность запроса;

Почему при неоперативном проведении не нужно контролировать остатки?

Так как неоперативное проведение служит не для того, чтобы в реальном времени определить возможность/невозможность выполнения операции, а для отражения в базе данных операций, которые УЖЕ были выполнены;

Что такое временные таблицы и зачем их использовать?

Временные таблицы – программные объекты, которые разработчик может создавать и наполнять данными. Нужны для задания сложных условий, промежуточного хранилища данных;

Что такое менеджер временных таблиц?

Менеджер временных таблиц служит для хранения (внезапно) временных таблиц. При уничтожении или закрытии объекта виртуальная таблица, хранящаяся в нем, удаляется. Если временная таблица создается, используется и уничтожается в рамках одного пакета запросов, то менеджер временных таблиц не нужен;

Как и зачем можно использовать временную таблицу в параметрах виртуальных таблиц?

Для постановки условий отбора данных; Так же только таким способом, через параметр, можно запихнуть внешнюю временную таблицу в запрос;

МетодичкаПрактикум

Перейдем на закладку Настройки и создадим стандартные настройки, определяющие, как будет выводиться информация в отчет. Иерархическая структура отчета может содержать в различных сочетаниях три основных элемента: 1. Группировка — для вывода информации в виде обычного линейного отчета. 2. Таблица — для вывода информации в виде таблицы. 3. Диаграмма — для вывода информации в виде диаграммы. Для добавления нового элемента, в нашем случае группировки, выделим в дереве структуры отчета корневой элемент Отчет и вызовем его контекстное меню. В окне выбора поля группировки просто нажмем OK (тем самым мы указываем, что в группировке будут выводиться детальные записи из информационной базы). В структуре отчета появится группировка Детальные записи . На закладке Выбранные поля перенесем мышью из списка доступных полей те поля, которые будут выводиться в отчет: Документ, Склад, Мастер, Клиент .. Определим, в каких подсистемах будет отображаться наш отчет. Закроем конструктор и в окне редактирования объекта конфигурации Отчет РеестрДокументовОказаниеУспуги перейдем на закладку Подсистемы. Отметим в списке подсистему Оказание услуг . Таким образом, ссылка на наш отчет автоматически попадет в панель действий этой подсистемы. Запустим режим»«1С:Предприятие»« В открывшемся окне 1С:Предприятия мы видим, что в панели действий раздела Оказание услуг в группе команд для выполнения отчетов появилась команда для формирования отчета Реестр документов оказание услуги. Причем если подвести к ней мышь, то появится всплывающая подсказка Список оказанных услуг , которая определяется свойством Расширенное представление , заданное нами для отчета. Выполним эту команду. Перед нами откроется форма отчета, автоматически сформированная системой. Мы видим, что отчет содержит реестр документов Оказание услуги (см. рис. 5.1). Рис. 5.1.Вид реестра документов Оказание услуги 80

PDF created with pdfFactory Pro trial version www.pdffactory.com

Причем двойным щелчком мыши на поле Документ мы можем открыть исходный документ, а также выполнить другие действия «расшифровки», которые предоставляет нам система компоновки данных. Таким образом, на примере этого отчета мы продемонстрировали, как использовать конструктор схемы компоновки данных, и познакомились с некоторыми основными конструкциями языка запросов. 5.2. Лабораторная работа №10. Выбор данных из двух таблиц. Создание отчета Рейтинг услуг. Создадим отчет Рейтинг услуг , который будет содержать информацию о том, выполнение каких услуг принесло нашему предприятию наибольшую прибыль в указанном периоде времени. Добавим новый объект конфигурации Отчет. Назовем его РейтингУслуготкроем схему компоновки данных и запустим конструктор схемы компоновки данных. Добавим новый Набор данных — запрос и вызовем конструктор запроса. Запрос для набора данных. Левое соединение двух таблиц. В качестве источника данных для запроса выберем объектную (ссылочную) таблицу Номенклатура и виртуальную таблицу регистра Накопления Продажи.Обороты . Чтобы исключить неоднозначность имен в запросе, переименуем таблицу Номенклатура в СпрНоменклатура . Для этого выделим ее в списке Таблицы , вызовем ее контекстное меню и переименуем. В список полей перенесем поля СпрНоменклатура.Ссылка и ПродажиОбороты.ВыручкаОборот из этих таблиц. Перейдем на закладку Связи . Так как в запросе теперь участвуют несколько таблиц , требуется определить связь между ними . По умолчанию платформой уже будет создана связь по полю Номенклатура . То есть значение измерения Номенклатура регистра Продажи должно быть равно ссылке на элемент справочника Номенклатура. Но нам нужно снять флажок Все у таблицы ПродажиОбороты и установить его у таблицы СпрНоменклатура. Тем самым мы задаем тип связи как Левое соединение , то есть в результат запроса будут включены все записи справочника Номенклатура и те записи регистра Продажи, которые удовлетворяют условию связи по полю Номенклатура. Таким образом, в результате запроса будут присутствовать все услуги, и для некоторых из них будут указаны обороты выручки. Для тех услуг, которые не производились в выбранном периоде, не будет указано ничего. Условие отбора записей Перейдем на закладку Условия и установим отбор, чтобы группы справочника Номенклатура не попадали в отчет. 81 PDF created with pdfFactory Pro trial version www.pdffactory.com

Для этого раскроем таблицу спрНоменклатура, перетащим мышью поле ЭтоГруппа в список условий, установим флажок Произвольное и напишем в поле Условие следующий текст спрНоменклатураЭтоГруппа = ЛОЖЬ Тем самым мы указали, что из базы данных нужно выбрать только те записи справочника Номенклатура, которые не являются группами. Вторым условием должно быть то, что выбранный элемент является услугой. Это — Простое условие. Чтобы его создать, перетащим мышью поле ВидНоменклатуры в список условий. Платформа автоматически сформирует условие, согласно которому вид номенклатуры должен быть равен значению параметра ВидНоменклатуры. В дальнейшем перед выполнением запроса мы передадим в параметр ВидНоменклатуры значение перечисления — Услуга . Перейдем на закладку Объединения/Псевдонимы и укажем, что представление элемента справочника (поле Ссылка ) будет иметь псевдоним Услуга , а поле регистра будет иметь псевдоним Выручка. Перейдем на закладку Порядок и укажем, что результат запроса должен быть отсортирован по убыванию значения поля Выручка. В нашем отчете мы хотим видеть итоговые значения выручки для каждой услуги. Для этого нам нужно определить поля ресурсов отчета. Под ресурсами в системе компоновки данных подразумеваются поля, значения которых рассчитываются на основании детальных записей, входящих в группировку. По сути, ресурсы являются групповыми или общими итогами отчета. Итоговые данные формируются на закладке Ресурсы . Перейдем на эту закладку и нажмем кнопку, чтобы конструктор выбрал все доступные ресурсы, по которым можно вычислять итоги. В нашем случае это единственный ресурс Выручка. Платформа автоматически предложить рассчитывать сумму значений этого поля, что нам и нужно. 5.3. Параметры Пользователя, как правило, интересуют данные о хозяйственной деятельности за определенный период. Поэтому практически в любом отчете используются параметры, задающие начало и конец отчетного периода. Параметры отчета задают условия отбора записей в отчет. В схеме компоновки данных параметры отчета задаются на закладке Параметры На этой закладке мы увидим три параметра: НачалоПериода, КонецПериода и ВидНоменклатуры . Вы можете спросить: почему параметра три, хотя в запросе мы задавали всего один — ВидНоменклатуры? Все дело в том, что система компоновки данных самостоятельно анализирует текст запроса и помимо тех параметров, которые указаны в нем в явном виде ( ВидНоменклатуры ), предоставляет возможность настроить также и параметры виртуальных таблиц, которые участвуют в запросе. Такими параметрами являются НачалоПериода и КонецПериода. Это первые два параметра виртуальной таблицы РегистрНакопления.Продажи. Обороты , которую мы использовали в запросе, в левом соединении. 82

PDF created with pdfFactory Pro trial version www.pdffactory.com

Если в конструкторе запроса выделить в списке таблиц эту таблицу и нажать кнопку Параметры виртуальной таблицы , то появится диалог, где мы увидим параметры НачалоПериода и КонецПериода. Первым параметром передается начало периода расчета итогов, вторым — конец периода. В результате исходная таблица будет содержать только обороты, рассчитанные в переданном периоде. Если мы передаем в качестве этих параметров дату (а в нашем случае так и будет), то дата содержит и время с точностью до секунды. Допустим, заранее известно, что пользователя не будут интересовать результаты работы отчета в периодах, указанных с точностью до секунды. В этом случае следует учесть две особенности. Во-первых, пользователя нужно избавить от необходимости указывать время при вводе даты периода, за который формируется отчет. Для этого мы изменим существующее описание типа для параметра НачалоПериода. Вернемся на закладку Параметры схемы компоновки данных и дважды щелкнем в ячейке Тип , соответствующей параметру НачалоПериода. Затем нажмем кнопку выбора и в нижней части окна редактирования типа данных установим Состав даты в значение Дат а. Нажмем ОК . Вторая особенность заключается в том, что по умолчанию время в дате установлено 00:00:00. Поэтому если пользователь задаст период отчета с 01.07.2012 по 14.07.2129, итоги регистра будут рассчитаны с начала дня 01.07.2012 00:00:00 по начало дня 14.07.2012 00:00:00. Таким образом, данные за 14-е число, отличные от начала дня, в расчет не войдут, что сильно удивит пользователя. Для того чтобы исключить эту ситуацию, мы добавим еще один параметр, в который пользователь будет вводить дату окончания. А значение параметра КонецПериода будем рассчитывать автоматически таким образом, чтобы оно указывало на конец дня даты, введенной пользователем. Поэтому для параметра КонецПериода установим флажок Ограничение доступности. Если этот флажок не установлен, то параметр будет доступен для настройки пользователем. Если же установить этот флажок, то пользователь не увидит этот параметр. Затем с помощью кнопки Добавить в командной панели добавим новый параметр с именем ДатаОкончания. Для этого параметра платформа автоматически сформирует заголовок — Дата окончания. Оставим его без изменений. Зададим тип значения параметра — Дата. При этом, как и для параметра Начало Периода, укажем состав даты — Дата . А также для параметра НачалоПериода зададим заголовок, который будет отображаться пользователю, — Дата начала . Добавленный нами параметр доступен для пользователя (ограничение доступности в колонке снято). Перейдем к параметру КонецПериода. Для него мы установили флажок Ограничение доступности, поскольку значение этого параметра мы собираемся вычислять на основании значения, установленного пользователем для параметра ДатаОкончания. 83

PDF created with pdfFactory Pro trial version www.pdffactory.com

Чтобы задать формулу, по которой будет вычисляться значение параметра КонецПериода , воспользуемся языком выражений системы компоновки данных. В нем есть функция КонецПериода(), которая позволяет получить дату, соответствующую концу какого-либо периода, например, указанного дня. В ячейке Выражение зададим для параметра КонецПериода следующее выражение (листинг 5.1). Листинг 5.1. Выражение для расчета значения параметра «КонецПериода». КонецПериода(&ДатаОкончания,”День”) В результате перечисленных действий параметры компоновки будут иметь следующий вид (рис. 5.2). Рис. 5.2. Параметры системы компоновки. И в заключение настроим параметр ВидНоменклатуры. Поскольку отчет должен отображать выручку, полученную только от реализации услуг, значение параметра ВидНоменклатуры пользователь изменять не должен. Оно должно быть задано непосредственно в схеме компоновки как Перечисление.ВидыНоменклатуры.Услуга. Флажок ограничения использования у параметра ВидНоменклатуры платформа установила по умолчанию, поэтому нам остается только указать нужное значение перечисления ВидыНоменклатуры в ячейке Значение, соответствующей параметру ВидНоменклатуры. Воспользуемся кнопкой выбора и выберем это значение из списка перечисления видов номенклатуры – Услуга. Настройки Перейдем к формированию структуры отчета. На закладке Настройки основной схемы компоновки данных добавим группировку и снова не укажем поле группировки. На закладке Выбранные поля укажем поля Услуга и Выручка. Затем перейдем на закладку Другие настройки и зададим заголовок отчета — Рейтинг услуг. 84

PDF created with pdfFactory Pro trial version www.pdffactory.com

5.4. Быстрые пользовательские настройки Мы должны предоставить пользователю возможность задавать отчетный период перед формированием отчета . То есть параметры Дата начала и Дата окончания должны быть включены в состав пользовательских настроек. Поскольку задавать отчетный период требуется практически всегда, эти настройки должны находиться непосредственно в форме отчета. На закладке Параметры мы видим параметры, для которых мы сняли флажок Ограничение доступности . Выделим по очереди каждый из параметров и нажмем кнопку Свойства элемента пользовательских настроек, расположенную в правом нижнем углу окна настроек. Установим флажок Включать в пользовательские настройки и оставим предложенное по умолчанию для свойства Режим редактирования значение Быстрый доступ. Поясним , что флажок Включать в пользовательские настройки означает , что эта настройка будет доступна пользователю в отдельном окне при нажатии кнопки Настройка ( то есть такая настройка , которой он может пользоваться , но не очень часто , а режим редактирования , установленный в значение Быстрый доступ , означает , что эта настройка также будет автоматически отображаться непосредственно в отчетной форме . Это быстрая пользовательская настройка — такая настройка, которая нужна пользователю постоянно, чуть ли не при каждом запуске отчета. Поэтому она всегда на виду. Кроме того, чтобы улучшить интерфейс пользователя, зададим для параметров Дата начала и Дата окончания в качестве начальных значений соответственно Начало этого месяца и Начало этого дня. В заключение определим, в каких подсистемах будет отображаться наш отчет. Закроем конструктор схемы компоновки данных и в окне редактирования объекта конфигурации Отчет РейтингУслуг перейдем на закладку Подсистемы. Отметим в списке подсистем конфигурации подсистемы Оказание услуг и Бухгалтерия. Таким образом, ссылка на наш отчет автоматически попадет в панель действий этих подсистем Запустим режим 1С:Предприятие. В открывшемся окне 1С:Предприятия мы видим, что в панели действий разделов Оказание услуг и Бухгалтерия в группе команд для выполнения отчетов появилась команда для формирования отчета Рейтинг услуг Выполним эту команду. Перед нами откроется форма отчета, автоматически сформированная системой. Нажмем кнопку Сформировать. Заметьте , что вверху окна результата отчета выводится заданный нами заголовок и параметры , определяющие отчетный период . Причем поскольку в запросе данных для отчета таблица номенклатуры связана левым соединением с таблицей регистра продаж, то услуги, для которых нет данных о продажах, все равно показаны в отчете. 85

PDF created with pdfFactory Pro trial version www.pdffactory.com

Контрольные вопросы 1. Как система «1С:Предприятие» выполняет обращение к ссылочным данным. 2. Почему для доступа к массивам данных информационной базы предпочтительнее использовать запросы. 3. Что такое момент времени. 4. Чем отличается оперативное проведение документов от неоперативного. 5. Что такое оперативная отметка времени. 6. Как запросом получить остатки регистра накопления. 7. На что следует обращать внимание при задании параметров виртуальных таблиц запросов. 8. Почему при неоперативном проведении документов не нужно контролировать остатки. 9. Что такое временные таблицы и зачем их использовать. 10.Что такое менеджер запросов. 11.Как и зачем можно использовать временные таблицы в параметрах виртуальных таблиц. 12.Как программно блокировать данные. 13.Как посмотреть в отладчике результат запроса. 86

PDF created with pdfFactory Pro trial version www.pdffactory.com

6. ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ Для выбранного практического задания самостоятельной работы необходимо сначала разработать модель бизнес процессов выбранной предметной области, бизнес логику их функционирования и затем создать необходимую конфигурацию. ПРАКТИЧЕСКИЕ ЗАДАНИЯ 1. Требуется разработать автоматизированную систему по кадровому учету на предприятии. Функции отдела кадров: Прием на работу новых сотрудников, Увольнение сотрудников, Кадровое перемещение, Воинский учет, Оформление отпусков, Оформление больничных листов, Ведение штатного расписания, Отчетность. 2. Требуется создать простую учетную систему для магазина с доставкой на дом. Система должна учитывать остатки товаров, оформлять заказы от клиентов и формировать путевые листы для курьеров. 3. Требуется создать простейшую систему учета семейных доходов и расходов. Система должна показывать текущий остаток в кошельке у каждого члена семьи и общие семейные накопления. Система должна давать возможность узнать доходы и расходы семьи за заданный период с группировкой по участникам или по статьям доходов и расходов. 4. Создать систему кадрового учета сотрудников предприятия. Она позволит принимать и увольнять сотрудников, а также работать с кадровыми документами. 5. Требуется создать простейшую информационно-справочную систему для трудоустройства. Система должна хранить список работодателей и соискателей. У каждого работодателя может быть несколько вакансий. У каждого соискателя может быть несколько резюме. Система должна позволять работодателям подбирать сотрудников, а соискателям помогать находить место работы 6. Требуется создать простейшую почтовую систему для локальной сети предприятия. Система должна позволять отправлять письма и должен быть общий чат. У каждого пользователя может быть черный список его недругов, от которых он не желает получать письма. Нужно иметь возможность прицеплять к письму различные объекты базы 1С:Предприятие, например, накладные и пр. 7. Требуется создать простейшую систему учета для библиотеки, которая позволит выдавать книги читателям, отслеживать задолженности читателя и формировать отчеты по совершенным операциям за заданный период. 8. Требуется разработать автоматизированную систему начисление заработной платы на предприятии. 9. Требуется разработать автоматизированную систему по продаже билетов на железнодорожный транспорт. 10. Требуется разработать автоматизированную систему для кассы кинотеатра. 11. Требуется разработать автоматизированную систему Работа склада предприятия. 87

PDF created with pdfFactory Pro trial version www.pdffactory.com

12.Разработать программный модуль «Учет успеваемости студентов». Программный модуль предназначен для получения сведений о студентах, оперативного учета успеваемости студентов в сессию сотрудниками деканата. Сведения об успеваемости студентов должны использоваться при составлении справок о прослушанных курсах и приложений к диплому. 13.Разработать программный модуль «Автосервис». При записи на обслуживание заполняется заявка, в которой указываются ФИО владельца, марка автомобиля, вид работы, дата приема заказа и стоимость ремонта. После выполнения работ распечатывается квитанция. 14.Разработать программный модуль «Кафедра», содержащий сведения о сотрудниках кафедры (ФИО, должность, ученая степень, дисциплины, нагрузка, общественная работа, совместительство и др.). Модуль предназначен для использования сотрудниками отдела кадров и деканата. 15.Разработать программный модуль «Картотека агентства недвижимости», предназначенный для использования работниками агентства. В базе содержатся сведения о квартирах (количество комнат, этаж, метраж и др.). При поступлении заявки на обмен (куплю, продажу) производится поиск подходящего варианта. Если такого нет, клиент заносится в клиентскую базу и оповещается, когда вариант появляется. 16.Разработать программный модуль «Учет нарушений правил дорожного движения». Для каждой автомашины (и ее владельца) в базе хранится список нарушений. Для каждого нарушения фиксируется дата, время, вид нарушения и размер штрафа. При оплате всех штрафов машина удаляется из базы. 17.Разработать программный модуль «Картотека абонентов АТС». Картотека содержит сведения о телефонах и их владельцах. Фиксирует задолженности по оплате (абонентской и повременной). Считается, что повременная оплата местных телефонных разговоров уже введена. 18.Разработать программный модуль «Авиакасса», содержащий сведения о наличии свободных мест на авиамаршруты. В базе должны содержаться сведения о номере рейса, экипаже, типе самолета, дате и времени вылета, а также стоимости авиабилетов (разного класса). При поступлении заявки на билеты программа производит поиск подходящего рейса. 19.Разработать программный модуль «Кадровое агентство», содержащий сведения о вакансиях и резюме. Программный модуль предназначен как для поиска сотрудника, отвечающего требованиям руководителей фирмы, так и для поиска подходящей работы. 20.Разработать программный модуль «Автостоянка». В программе содержится информация о марке автомобиля, его владельце, дате и времени въезда, стоимости стоянки, скидках, задолженности по оплате и др. 88

PDF created with pdfFactory Pro trial version www.pdffactory.com

Список литературы. Основная 1. Габец А. П. Реализация прикладных задач в системе «1С:Предприятие» 8.2» / А. П. Габец, Д. В. Козырев, Д. С. Кухлевский, Е. Ю. Хрусталева – М. : 1С-Паблишинг 2010. — 720 c. 2. Радченко М. Г. 1С.Предприятие 8.2. Практическое пособие разработчика. Примеры и типовые приемы / М. Г. Радченко, Е. Ю. Хрусталева. -М. : 1С-Паблишинг, 2009. – 874 с. 3. Габец А.П. «1С:Предприятие» 8.1. Простые примеры разработки / Габец А.П., Гончаров Д.И. ; под редакцией М.Г. Радченко. М : Совместное издание 1С-Паблишинг и ИД «Питер», 2008. – 383с. 4. Кашаев С. Программирование в «1С:Предприятие» 8.2 /Кашаев С. ; Спб. : Питер, 2011. — 272 с. 5. Радченко, Е.Ю. Архитектура и работа с данными «1С:Предприятия 8.2» / Радченко, Е.Ю., Хрусталева Е. Ю. ; М : 1С-Паблишин, 2011. – 268с. Дополнительная 6. Брукс Ф. Мифический человеко-месяц или как создаются программные системы : «Символ-Плюс», 2001. -304 с. 7. Котин М. 1C: Предприятие 8.2. Управление небольшой фирмой / Котин М.; Спб. : Питер, 2011. – 320с. 8. Кашаев С. «1С:Предприятие»8.2. Программирование и визуальная разработка на примерах / Кашаев С. ; Спб. : BHV, 2011. — 320 с. 89

DaJet QL — расширяемый язык запросов

DaJet QL поддерживает практический полный синтаксис SQL Server 2005-2016. Кроме этого это расширяемый язык запросов. Обращение к объектам СУБД выполняется в терминах метаданных 1С. Доступ к возможностям этого языка запросов реализован в виде web api сервиса. Результаты запросов возвращаются в виде JSON.

Скачать файлы

.zip 19,73Mb
.zip 13,43Mb
Обновление от 16.09.2022
Выпущена новая версия языка запросов 1QL. Скачать дистрибутив и документацию можно здесь.

Обновление от 11.11.2020 Данная статья является продолжением моего выступления на Infostart 2019 Inception. В этой статье я расскажу о развитии проекта и его новых возможностях. Для того, чтобы не нарушать права фирмы 1С на её торговый знак, проект переименован на DaJet.

Название DaJet (даджет) образовано от слов data (данные) и jet (реактивный).
Кроме этого является модификацией слова gadget (гаджет) и может быть интерпретировано как «приспособление для работы с данными».

Новые возможности. 1. Добавлена возможность обращаться в одном запросе не только к разным базам данным, расположенным на одном экземпляре SQL Server, но и к связанным (linked) серверам. 2. Реализован сервер web api, позволяющий переводить запросы в терминах 1С в запросы на T-SQL, а также выполнять эти запросы при помощи любого web api клиента. 3. Используется новый парсер языка запросов, поддерживающий практически полный синтаксис SQL Server 2005-2016. Это означает, что поддерживаются как DDL, так и DML инструкции. Также в озможно использование DMV, табличных переменных, оконных функций, табличных указа ний (хинтов) и т.д. и т.п. 4. Использование нового парсера в перспективе позволяет добавлять в синтаксис языка запросов собственные функции, собственную логику выполнения запроса, а также выполнять программный анализ запроса по заданным критериям. Как это работает. 1. Выгружаем метаданные 1С при помощи специальной обработки в XML. 2. Настраиваем web сервер DaJet QL, который реализован на базе web сервера Kestrel (в основном описываем структуру каталогов сервера СУБД и указываем URL). 3. Выполняем запросы к web серверу DaJet QL при помощи web api. В целях ознакомления с функционалом DaJet QL web api в качестве клиента можно использовать Postman. Коллекция вызовов web api для импорта в Postman прилагается. Кроме этого, к данной статье прилагается демонстрационный web api клиент в виде обработки 1С. Продолжение: «JSON в запросах DaJet QL». Описание web api сервера DaJet QL. GET metadata/use Пример: http://localhost:5000/metadata/use Показывает текущий сервер и базу данных, которые используются web сервером DaJet QL в данный момент. POST metadata/use// Пример: http://localhost:5000/metadata/use/ mys rv /myd b Устанавливает текущий сервер и базу данных для web сервера DaJet QL, в контексте которых выполняются последующие запросы к СУБД. Аналог команды USE [database] SQL Server. Вызов этого метода обязателен до того, как выполнять запросы. POST script/translate Пример: http://localhost:5000/ script / translate Тело запроса: < "script": "SELECT Ссылка FROM Документ.ПоступлениеТоваровУслуг" >Тело ответа: < "script" : "SELECT _IDRRef FROM _Document123" >Этот метод позволяет посмотреть какой запрос SQL форми рует web сервис DaJet QL перед его выполнением. POST script/execute Пример: http://localhost:5000/ script / execute Тело запроса: < "script": "SELECT Ссылка FROM Документ.ПоступлениеТоваровУслуг" >Тело ответа: [ < "_IDRRef" : "" >, < "_IDRRef" : "" > ] Метод выполняет запрос и возвращает результат его выполнения в формате JSON (массив структур записей). Ограничения языка запросов. 1. Работа с составными типами данных 1С, содержащими простые типы данных, не поддерживается. Поддерживается только работа с составными ссылочными типами данных. 2. Обращение к реквизитам объектов через точку (операция разыменования) с автоматической генерацией LEFT JOIN в запросах SQL не поддерживается. Подробнее о работе с реквизитами ссылочного типа будет рассказано ниже. Обращение к объектам в запросах. 1. Обращение к объекту в контексте текущей базы данных: Документ.ПоступлениеТоваровУслуг 2. Обращение к табличной части объекта в контексте текущей базы данных: Документ.ПоступлениеТоваровУслуг.Товары 3. Обращение к объекту из другой базы данных: [torg_db]. Документ.ПоступлениеТоваровУслуг 4. Обращение к табличной части объекта из другой базы данных: [torg_db]. Документ.ПоступлениеТоваровУслуг.Товары 5. Обращение к объекту связанного сервера : [bi_server]. [torg_db]. Документ.ПоступлениеТоваровУслуг 6. Обращение к табличной части объекта связанного сервера : [bi_server]. [torg_db].Документ. [ ПоступлениеТоваровУслуг + Товары ] В последнем случае использование шаблона вида [ + < ТЧ >] обязательно, так как парсер языка запросов умеет работать только с идентификаторами таблиц, имеющими 4 составных части. Использование квадратных скобок и символа «+» также обязательно. При этом можно также обращаться к таблицам СУБД по их настоящим именам, заданным на уровне СУБД, например, так: SELECT _IDRRef FROM _ Document123. Это даёт возможность обращения в одном запросе к таблицам других СУБД, выгрузки данных во внешние источники или их загрузки из них. Например, это может выглядеть так: SELECT РТУ. С уммаДокумента AS СуммаРеализации, CO.OrderSum AS СуммаЗаказа FROM Документ.РеализацияТоваровУслуг AS РТУ LEFT JOIN [orders_db].CustomerOrders AS CO ON РТУ.Номер = CO.DocNumber Обращение к ссылочным реквизитам в запросах. Язык запросов DaJet QL работает с ссылочными типами данных не так как 1С. Для работы с такими внутренними значениями ссылки как код типа данных объекта ( TRef ) и уникальным идентификатором объекта ( R R ef ) в языке запросов DaJet QL на уровне парсера реализована работа с такими специализированными свойствами ссылки как uuid, type и TYPE. Например выполним следующий запрос: SELECT TOP 1 Ссылка, Ссылка. uuid, Ссылка. type FROM Документ.ПоступлениеТоваровУслуг В результате мы получим следующий SQL запрос, используя web метод script/translate: SELECT TOP 1 (0x0000007B + _IDRRef) , /* binary(20) */ _IDRRef, /* binary(16) */ 0x0000007B /* binary(4) */ FROM _ Document123 Таким образом мы видим, что свойство uuid возвращает уникальный идентификатор ссылки, что соответствует полю таблицы СУБД, которое хранит это значение. С войство type возвращает код типа объекта, который, в том числе, можно найти в названии таблицы объекта. В данном случае это число 123. Для однозначных реквизитов парсер подставит константу, а для составных ссылочных типов наименование поля таблицы СУБД, в котором хранится это значение. С пециальное свойство TYPE ссылки всегда содержит константу 0x08, что соответствует значению ссылочного типа данных в структуре хранения значений составных типов в таблицах СУБД. Это свойство необходимо исключительно для выполнения соединений между таблицами, так как поле, имеющее суффикс _ TYPE, на уровне СУБД может входить в индекс. Более подробно об этом рассказано ниже. Функция TYPEOF. Язык запросов DaJet QL реализует специальную функцию TYPEOF для получения кода типа объекта аналогично функции ССЫЛКА в языке запросов 1С. Выполним следующий запрос: SELECT TOP 1 Ссылка. type, TYPEOF( Документ.ПоступлениеТоваровУслуг ) FROM Документ.ПоступлениеТоваровУслуг Получим следующий код SQL: SELECT TOP 1 0x0000007B, 0x0000007B FROM _ Document123 Эта функция нужна также, как и специальное свойство TYPE (см. выше) , для получения кода типа объекта при соединении с полями составного типа или таблицами других баз данных. Чтобы понять зачем это нужно, предлагаю р ассмотр еть два практических примера ниже . Соединение по реквизиту составного типа . Вариант № 1 (используем специальное свойство type ) .

-- Запрос на языке DaJet QL SELECT TOP 1 ФЛ.Наименование AS ФИО, БСК.НомерСчета AS НомерСчета FROM Справочник.ФизическиеЛица AS ФЛ INNER JOIN Справочник.БанковскиеСчетаКонтрагентов AS БСК ON ФЛ.Ссылка.uuid = БСК.Владелец.uuid AND ФЛ.Ссылка.type = БСК.Владелец.type AND ФЛ.Ссылка.TYPE = БСК.Владелец.TYPE -- Запрос на T_SQL SELECT TOP 1 ФЛ._Description AS ФИО, БСК._Fld2205 AS НомерСчета FROM _Reference477 AS ФЛ INNER JOIN _Reference41 AS БСК ON ФЛ._IDRRef = БСК._OwnerID_RRRef AND 0x000001DD = БСК._OwnerID_RTRef AND 0x08 = БСК._OwnerID_TYPE;

Вариант № 2 (используем функцию TYPEOF ).

-- Запрос на DaJet QL SELECT TOP 1 ФЛ.Наименование AS ФИО, БСК.НомерСчета AS НомерСчета FROM Справочник.ФизическиеЛица AS ФЛ INNER JOIN Справочник.БанковскиеСчетаКонтрагентов AS БСК ON ФЛ.Ссылка.uuid = БСК.Владелец.uuid AND TYPEOF(Справочник.ФизическиеЛица) = БСК.Владелец.type AND 0x08 = БСК.Владелец.TYPE -- Запрос на T_SQL SELECT TOP 1 ФЛ._Description AS ФИО, БСК._Fld2205 AS НомерСчета FROM _Reference477 AS ФЛ INNER JOIN _Reference41 AS БСК ON ФЛ._IDRRef = БСК._OwnerID_RRRef AND 0x000001DD = БСК._OwnerID_RTRef AND 0x08 = БСК._OwnerID_TYPE;

В данном случае справочник «БанковскиеСчетаКонтрагентов» имеет два справочника владельца: «Контрагенты» и «ФизическиеЛица». На уровне СУБД реквизит «Владелец» состоит из трёх полей. Чтобы использовать индекс по всем этим полям, необходимо соединяться вышеуказанным способом. В таких случаях можно использовать оба варианта: с использованием специального свойства type и функции TYPEOF. Сверка движений документов из разных баз данных. Предположим, что у нас есть две базы данных: торговля и бухгалтерия. Торговля периодически выгружает в бухгалтерию документы установки цен. Нам необходимо выполнить сверку наличия выгруженных из торговли в бухгалтерию документов, а также соответствие цен в об е их базах. Предположим, что документы синхронизируются по ссылкам. Б азы данных называются trade и accounting. З апрос может выглядеть так:

SELECT УТДок.Дата AS ТоргДата, УТДок.Номер AS ТоргНомер, УТЦН.Цена AS ТоргЦена, БПДок.Дата AS БухДата, БПДок.Номер AS БухНомер, БПЦН.Цена AS БухЦена FROM trade.РегистрСведений.ЦеныНоменклатуры AS УТЦН LEFT JOIN accounting.РегистрСведений.ЦеныНоменклатуры AS БПЦН ON УТЦН.Регистратор.uuid = БПЦН.Регистратор.uuid AND УТЦН.Регистратор.type = TYPEOF(trade.Документ.УстановкаЦенНоменклатуры) AND БПЦН.Регистратор.type = TYPEOF(accounting.Документ.УстановкаЦенНоменклатуры) LEFT JOIN trade.Документ.УстановкаЦенНоменклатуры AS УТДок ON УТЦН.Регистратор.uuid = УТДок.Ссылка.uuid AND УТЦН.Регистратор.type = УТДок.Ссылка.type LEFT JOIN accounting.Документ.УстановкаЦенНоменклатуры AS БПДок ON БПЦН.Регистратор.uuid = БПДок.Ссылка.uuid AND БПЦН.Регистратор.type = БПДок.Ссылка.type

В данном запросе предикат первого JOIN’ а выглядит следующим образом:

ON УТЦН.Регистратор.uuid = БПЦН.Регистратор.uuid AND УТЦН.Регистратор.type = TYPEOF(trade.Документ.УстановкаЦенНоменклатуры) AND БПЦН.Регистратор.type = TYPEOF(accounting.Документ.УстановкаЦенНоменклатуры)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *