Работа с периодическими реквизитами 1С версии 7.7 при помощи прямых запросов.

23.12.09

Разработка - Запросы

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

             Пытливые умы экономистов как-то раз разродились идеей, построить отчет, в котором по каждой номенклатурной позиции вычислялись бы три последние цены одного типа цен и последнее значение другого типа цен. Все это приводилось бы к единой валюте (по курсам на дату установки цены) и неким образом далее анализировалось. Для реализации этого алгоритм средствами 1С требовалась бы активная работа с объектом «Периодический» и время формирования такого отчета по тысяче-двум номенклатурных позиции затянулось бы на неопределенное время. Как хорошо, что база на SQL сервере, да еще и 2005-ом. Реализация этого отчета на прямых запросах и побудила меня поделиться знаниями.

            При описании буду рассчитывать на то, что читателю знакомы основы языка SQL. Большинство примеров, приведенных здесь, работают на 2000-ом сервере. Для некоторых примеров будет приведено два решения с пояснениями: для 2000-ого сервера и для 2005-ого. Для работы с прямыми запросами я предпочитаю внешнюю компоненту 1С++ и все примеры будут приведены для нее. Думаю, что переписать код для работы с другими компонентами особого труда составить не должно. Все примеры буду приводить для стандартной конфигурации «Торговля и склад 9.2», т.к. она большинству должна быть хорошо знакома.

            Хочу заметить, что язык SQL позволяет одни и те же задачи решать многими способами. Поэтому приведенные здесь запросы не претендуют на то, чтобы считаться единственно верными и оптимальными. Кто-то может предложить другие варианты решения каких-то задач, предлагайте, обсудим.

            Для начала давайте рассмотрим то, как 1С хранит периодические реквизиты. Все значения всех реквизитов хранятся в одной таблице _1SCONST. Если заглянуть в 1Cv7.dds, то там можно найти описание полей таблицы и ее индексов. Рассмотрим интересующие нас и самые важные.

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

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

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

См. также

Инструментарий разработчика Запросы Программист 1С:Предприятие 7.7 1C77 Абонемент ($m)

Обработка, позволяющая выполнять запросы к базе, лежащей в MySQL, для 1С:Предприятие 7.7.

10.08.2022    4329    5    crocolo    0    

3

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

Очень часто нужно при работе с HTTP сервисами или сайтами использовать Асинхронные HTTP запросы, отправку на сервер нескольких файлов, использование сжатия трафика. Эта статья про то, как этого легко добиться.

09.03.2016    42336    Serginio    22    

44

Универсальные функции Запросы Программист 1С:Предприятие 7.7 1С:Предприятие 8 Бесплатно (free)

На эту тему уже есть статьи, но этот способ нигде не описан. Хотя я его использую с тех пор, как занимаюсь программированием. Его преимущество в простоте и универсальности: можно применять на 1С, SQL, а также в любом другом языке программирования.

05.07.2015    24594    json    3    

22

Запросы Программист 1С:Предприятие 7.7 1C77 Абонемент ($m)

Пример получения остатков по складу по запросу по почте из программы 1С 7.7. Для получения остатков необходимо пользователю с любого почтовика (с любого "мыла") отправить текст сообщения GiveMyStockBalance_ForAnalize на почтовый адрес определенный в Константа.СерверПолучения. Программа выдаст остатки (можно переписать функцию для выдачи любых данных) в формате xls на почту указанную в константе Константа.СерверОтправки. Программа может быть полезна в тех организациях где трудно или невозможно осуществить прямой доступ к 1С сотрудников для просмотра необходимых данных. Также можно организовать некий почтамт - запрос для клиентов - при посылке определенного логина клиентом на его почту будет автоматически выслана информация, например, акт сверки с клиентов, или процент выполнения его заказа и т.д.

3 стартмани

25.03.2014    26965    5    protexprotex    3    

5

Зарплата Запросы Программист Расчет 7.7 1С:Зарплата и кадры 7.7 Абонемент ($m)

Обзор методов реализации условий и функций с условиями в обращениях к журналу расчетов при помощи прямого запроса.

1 стартмани

06.12.2012    15828    nicotin    5    

9

Запросы Программист 1С:Предприятие 7.7 1C77 Россия Абонемент ($m)

Собственно, надоело одно и тоже делать для каждого отчета.

1 стартмани

24.04.2012    16297    22    newbas    3    

5

Запросы 1С:Предприятие 7.7 Оперативный учет 7.7 Бухгалтерский учет 7.7 Расчет 7.7 1C77 Абонемент ($m)

Универсальный отчет для конфигураций на платформе 1С 7.7. Умеет обращатся к справочникам, документам, регистрам и журналам расчетов. Удобен для быстрого получения каких либо данных, которые можно получить посредствам запроса. Предусмотренна возможность сохранения настроек.

1 стартмани

14.04.2012    36536    317    set2333    16    

11
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Арчибальд 2710 23.12.09 14:34 Сейчас в теме
Пинок для мозгов :)
2. highlander 24.12.09 10:30 Сейчас в теме
Почерпнул для себя много нового и интересного - плюс однозначно
3. flo 30.12.09 09:59 Сейчас в теме
(3)согласна тут ооочень много нового...и такооого интересного!еле оторвалась) мозгами не поделитесь?))))
4. waol 322 30.12.09 14:00 Сейчас в теме
есть ли смысле переписать
текст="
|select * from _1sconst (nolock)
|where objid=:ТекЦена
| and id=:ИДЦена";

в таком виде:
текст="
|select * from _1sconst (nolock)
|where id+objid+... остальн.части индекса IDD like :ИДЦена+:ТекЦена+"__________" (кол.прочерков д.быть таким, чтобы привести правую часть к длине индекса)?

нет достаточного опыта работы с sql;
вообще говоря, интересуют запросы к 1sconst в dbf с использованием индекса idd - не могу добиться оптимизации
7. glassman 212 30.12.09 23:43 Сейчас в теме
(4) Так делать не стоит. Запутывание оптимизатора получится. Он не поймет, что отбор по первым полям индекса идет и пойдет его весь сканить. Плюс дополнительные вычисления на формирование строки, плюс оператор like - не быстрая штука. Во-вторых, если юзать like, то подчеркивания не нужны. Достаточно просто поставить %. Что-то типа такого: like :ИДЦена+:ТекЦена+"%"
8. glassman 212 30.12.09 23:55 Сейчас в теме
(4) Хотя для дбф не могу точно сказать. Не делал прямых запросов к дбфной базе.
По поводу индексов еще. Жаль, что IDD не кластерный... Если планы запросов посмотреть, то там постоянно идет дополнительное обращение к РК по row_id. То же самое и для справочников.
5. Gluk_1C 30.12.09 14:20 Сейчас в теме
Гдеж ты раньше то был :) :D, однозначно + автору
6. Gluk_1C 30.12.09 14:21 Сейчас в теме
+ отдельное спасибо за варианты для 2000 и 2005 сервера.
9. waol 322 31.12.09 00:09 Сейчас в теме
да, вы правы, между подчеркиваниями и % действительно нет разницы по скорости, только второе - легче в написании, учту.
вот по поводу поведения дбф такой вариант фильтра

Константы.id+Константы.objid+dtos(Константы.date)+Константы.time+Константы.docid+str(Константы.partno,3) like $ИсторияРеквизита.Цены.Цена+:ВыбФильтр+'%'

выполняется порядка 2-3 мс,
а такой:
Константы.id=$ИсторияРеквизита.Цены.Цена and Константы.objid=:ВыбФильтр

порядка 280 мс.
видимо у Fox Pro своя специфика работы с индексами в сравнении с sql


правда мне никак не добиться, чтобы индекс начал работать, когда есть соединение 1sconst с какой нибудь другой таблицей, с тем же справочником Цены.

но это несколько не по теме, извиняюсь. Буду поднимать тему на 1cpp.ru


10. Myti 86 14.01.10 17:03 Сейчас в теме
Для отправки сообщения требуется регистрация/авторизация

ROW_ID

Автоинкрементное поле типа INT. Служит для поддержки уникальности

OBJID