Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Составить запрос. 3 страниц V   1 2 3 >          
DartRomanius Подменю пользователя
сообщение 25.01.12, 16:56
Сообщение #1

Ветеран
Иконка группы
Группа: Местный
Сообщений: 824
Из: Запорожье
Спасибо сказали: 145 раз
Рейтинг: 0

Доброго времени суток коллеги.

Имеем документ "Заказ".
У документа есть признак статус. Статус у документа меняется со временем.
Собственно статусы:
- открытый;
- подготовка;
- в работе;
- закрыт.

Смена статуса хранится в регистре сведений в записи типа:
Заказ
СтатусБыл
СтатусСтал

Вот теперь задача:
Как отследить заказы у которых в заданный период 1-й раз сменился статус скажем с открытый на подготовка.

Хотелось бы сделать все одним запросом, но что-то потерялась я.... smile.gif

Заранее спасибо.


Signature
-----------------------------------------------------------------------------------
Единственный, интуитивно понятный интерфейс - мамкина сиська!
Всему остальному надо учиться! (с) Не знаю кто....

Vofka Подменю пользователя
сообщение 25.01.12, 17:31
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Выбираем по этому регистру все записи у которых период между начальной датой и конечной датой - это полностью всё за определенный период. И говорим, чтобы выбирал только те записи, у которых СтатусБыл такой-то, а СтатусСтал такой-то. И делаем группировку по Заказу, СтатусБыл и СтатусСтал и накладываем на период МИНИМУМ. Как-то так:

Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
|   МИНИМУМ(МойРегистр.Период),
|  МойРегистр.Заказ
|ИЗ
|   МойРегистр КАК МойРегистр
|ГДЕ
|   СтатусБыл = &СтатусБыл
|   И СтатусСтал = &СтатусСтал
|СГРУППИРОВАТЬ ПО
|   МойРегистр.Заказ,
|   МойРегистр.СтатусБыл,
|   МойРегистр.СтатусСтал
|";


Навскидочку. smile.gif

Домовик Подменю пользователя
сообщение 25.01.12, 17:53
Сообщение #3

Ветеран
Иконка группы
Группа: Местный
Сообщений: 975
Из: Киев
Спасибо сказали: 168 раз
Рейтинг: 0

регистр сведений уже хранит информацию или только предполагается такая структура? Просто Статус в регистре недостаточно?

Сообщение отредактировал Домовик - 25.01.12, 19:57

Домовик Подменю пользователя
сообщение 26.01.12, 8:42
Сообщение #4

Ветеран
Иконка группы
Группа: Местный
Сообщений: 975
Из: Киев
Спасибо сказали: 168 раз
Рейтинг: 0

я почему спрашиваю, , что могут быть ошибки, кот нужно предусматривать

01.01.2012 открытый подготовка
02.01.2012 открытый подготовка
03.01.2012 открытый подготовка
04.01.2012 в работе закрыт.

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

к тому же тут определенные правила: после "в работе" не ставится "открыт", "подготовка"..... бизнес-процессы, что ли?

Сообщение отредактировал Домовик - 26.01.12, 8:45

DartRomanius Подменю пользователя
сообщение 26.01.12, 11:55
Сообщение #5

Ветеран
Иконка группы
Группа: Местный
Сообщений: 824
Из: Запорожье
Спасибо сказали: 145 раз
Рейтинг: 0

Цитата(Vofka @ 25.01.12, 18:31) *
Выбираем по этому регистру все записи у которых период между начальной датой и конечной датой - это полностью всё за определенный период. И говорим, чтобы выбирал только те записи, у которых СтатусБыл такой-то, а СтатусСтал такой-то. И делаем группировку по Заказу, СтатусБыл и СтатусСтал и накладываем на период МИНИМУМ. Как-то так:

Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
|   МИНИМУМ(МойРегистр.Период),
|  МойРегистр.Заказ
|ИЗ
|   МойРегистр КАК МойРегистр
|ГДЕ
|   СтатусБыл = &СтатусБыл
|   И СтатусСтал = &СтатусСтал
|СГРУППИРОВАТЬ ПО
|   МойРегистр.Заказ,
|   МойРегистр.СтатусБыл,
|   МойРегистр.СтатусСтал
|";


Навскидочку. smile.gif


Уточню, не совсем правильно объяснил.

Берем период: с [Дата] по [Дата]
Статус менялся может быть и до этого периода, но надо выбрать заказ если статус сменился по заданной схеме именно в этот период.
То есть:

01.01.2012 открытый подготовка (первый раз).
02.01.2012 подготовка открытый
03.01.2012 открытый подготовка (второй раз).

Надо отобрать если период скажем с 01.01.2012 по 02.01.2012
а если период с 02.01.2012 по 03.01.2012, тогда не отбирать


Signature
-----------------------------------------------------------------------------------
Единственный, интуитивно понятный интерфейс - мамкина сиська!
Всему остальному надо учиться! (с) Не знаю кто....

pablo Подменю пользователя
сообщение 26.01.12, 11:55
Сообщение #6

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0

я бы сделал так. в 1 подзапрос поместил бы различные заказы из регистра за период. Во втором подзапросе подсчитал бы по эти заказам количество записей за период и отобрал бы записи с нужным количеством... Если нужны дополнительные условия - накладывал бы их в следующем запросе пакета.


Signature
Правильно поставленный вопрос содержит до 90% ответа.

DartRomanius Подменю пользователя
сообщение 26.01.12, 11:59
Сообщение #7

Ветеран
Иконка группы
Группа: Местный
Сообщений: 824
Из: Запорожье
Спасибо сказали: 145 раз
Рейтинг: 0

Цитата(Домовик @ 26.01.12, 9:42) *
я почему спрашиваю, , что могут быть ошибки, кот нужно предусматривать

01.01.2012 открытый подготовка
02.01.2012 открытый подготовка
03.01.2012 открытый подготовка
04.01.2012 в работе закрыт.

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

к тому же тут определенные правила: после "в работе" не ставится "открыт", "подготовка"..... бизнес-процессы, что ли?


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

Цитата(pablo @ 26.01.12, 12:55) *
я бы сделал так. в 1 подзапрос поместил бы различные заказы из регистра за период. Во втором подзапросе подсчитал бы по эти заказам количество записей за период и отобрал бы записи с нужным количеством... Если нужны дополнительные условия - накладывал бы их в следующем запросе пакета.


вложенными запросами?


Signature
-----------------------------------------------------------------------------------
Единственный, интуитивно понятный интерфейс - мамкина сиська!
Всему остальному надо учиться! (с) Не знаю кто....

Vofka Подменю пользователя
сообщение 26.01.12, 12:05
Сообщение #8

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Изменения структуры регистра возможно?

Домовик Подменю пользователя
сообщение 26.01.12, 12:12
Сообщение #9

Ветеран
Иконка группы
Группа: Местный
Сообщений: 975
Из: Киев
Спасибо сказали: 168 раз
Рейтинг: 0

в запросе сформировать по СтатусПосле

сформировать строки "1Открыт1Подготовка1закрыт1Подготовка1Открыт1В работе1" , отбирать по числу вхожедений например подстрокистроки "Открыт1Подготовка" равно 1.
1- разделитель в примере.

Но я как в том анекдоте, про стать зайчикам ёжиками - стратег)) . пока не владею знаниями , как в запросе преобразить данные в строку за период в разрезе заказа.

Сообщение отредактировал Домовик - 26.01.12, 12:50

DartRomanius Подменю пользователя
сообщение 26.01.12, 12:13
Сообщение #10

Ветеран
Иконка группы
Группа: Местный
Сообщений: 824
Из: Запорожье
Спасибо сказали: 145 раз
Рейтинг: 0

Цитата(Vofka @ 26.01.12, 13:05) *
Изменения структуры регистра возможно?


Да там простейшая структура:
Заказ
СтатусБыл
СтатусСтал

ну и плюс период как стандартный реквизит.

То есть по регистру мы можем смотреть полную историю смены статусов.


Signature
-----------------------------------------------------------------------------------
Единственный, интуитивно понятный интерфейс - мамкина сиська!
Всему остальному надо учиться! (с) Не знаю кто....

Домовик Подменю пользователя
сообщение 26.01.12, 12:16
Сообщение #11

Ветеран
Иконка группы
Группа: Местный
Сообщений: 975
Из: Киев
Спасибо сказали: 168 раз
Рейтинг: 0

Цитата(DartRomanius @ 26.01.12, 8:13) *
Да там простейшая структура:
Заказ
СтатусБыл
СтатусСтал

ну и плюс период как стандартный реквизит.

То есть по регистру мы можем смотреть полную историю смены статусов.


а возможные ошибки при этом - пример же приведен

DartRomanius Подменю пользователя
сообщение 26.01.12, 12:19
Сообщение #12

Ветеран
Иконка группы
Группа: Местный
Сообщений: 824
Из: Запорожье
Спасибо сказали: 145 раз
Рейтинг: 0

Цитата(Домовик @ 26.01.12, 13:16) *
а возможные ошибки при этом - пример же приведен


Не понял.


Signature
-----------------------------------------------------------------------------------
Единственный, интуитивно понятный интерфейс - мамкина сиська!
Всему остальному надо учиться! (с) Не знаю кто....

Домовик Подменю пользователя
сообщение 26.01.12, 12:27
Сообщение #13

Ветеран
Иконка группы
Группа: Местный
Сообщений: 975
Из: Киев
Спасибо сказали: 168 раз
Рейтинг: 0

Цитата(DartRomanius @ 26.01.12, 8:19) *
Не понял.


Статусбыл всегда можно прочитать из предыдущих строк в регистре. достаточно только статусПосле в регистре.

Это исключает ошибки. Когда вы перепроводите документ другим числом, который устанавливает статусы в регистр. Это нужны проверки тогда при проведении. А так устанавливаете новый статус на новое число и все.

Сообщение отредактировал Домовик - 26.01.12, 12:29

DartRomanius Подменю пользователя
сообщение 26.01.12, 13:00
Сообщение #14

Ветеран
Иконка группы
Группа: Местный
Сообщений: 824
Из: Запорожье
Спасибо сказали: 145 раз
Рейтинг: 0

Цитата(Домовик @ 26.01.12, 13:27) *
Статусбыл всегда можно прочитать из предыдущих строк в регистре. достаточно только статусПосле в регистре.

Это исключает ошибки. Когда вы перепроводите документ другим числом, который устанавливает статусы в регистр. Это нужны проверки тогда при проведении. А так устанавливаете новый статус на новое число и все.


Та ну в этом проблемы нету, документ смены статуса недоступен для прямого редактирования.
Все решается административными и немного программными методами.
и мне не особо важен размер записей если мне придется анализировать какая запись предыдущая, какая следующая.

В догонку:
сложность в том, что как-то не въезжаю как запросом выделить 1-ю запись отвечающую требованиям.

Точнее, так:
1-я проверка, выделить 1-ю запись в регистре отвечающую требованиям перехода между статусами.
в моем случае это, (к примеру) открытый - подготовка.
2-я проверка, уже после выделения этой самой записи, на вхождение в заданный интервал.


Signature
-----------------------------------------------------------------------------------
Единственный, интуитивно понятный интерфейс - мамкина сиська!
Всему остальному надо учиться! (с) Не знаю кто....

Vofka Подменю пользователя
сообщение 26.01.12, 13:28
Сообщение #15

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Цитата
Да там простейшая структура:
Заказ
СтатусБыл
СтатусСтал

ну и плюс период как стандартный реквизит.

То есть по регистру мы можем смотреть полную историю смены статусов.

Я имел ввиду, возможно ли давать советы по модификации структуры регистра?

DartRomanius Подменю пользователя
сообщение 26.01.12, 13:48
Сообщение #16

Ветеран
Иконка группы
Группа: Местный
Сообщений: 824
Из: Запорожье
Спасибо сказали: 145 раз
Рейтинг: 0

Цитата(Vofka @ 26.01.12, 14:28) *
Я имел ввиду, возможно ли давать советы по модификации структуры регистра?


Та не вопрос.


Signature
-----------------------------------------------------------------------------------
Единственный, интуитивно понятный интерфейс - мамкина сиська!
Всему остальному надо учиться! (с) Не знаю кто....

Vofka Подменю пользователя
сообщение 26.01.12, 14:06
Сообщение #17

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Цитата
Та не вопрос.

Ну тогда если добавить в регистр реквизит булевого типа и устанавливать его при первом изменении?

DartRomanius Подменю пользователя
сообщение 26.01.12, 14:36
Сообщение #18

Ветеран
Иконка группы
Группа: Местный
Сообщений: 824
Из: Запорожье
Спасибо сказали: 145 раз
Рейтинг: 0

Цитата(Vofka @ 26.01.12, 16:06) *
Ну тогда если добавить в регистр реквизит булевого типа и устанавливать его при первом изменении?


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


Signature
-----------------------------------------------------------------------------------
Единственный, интуитивно понятный интерфейс - мамкина сиська!
Всему остальному надо учиться! (с) Не знаю кто....

Домовик Подменю пользователя
сообщение 26.01.12, 14:50
Сообщение #19

Ветеран
Иконка группы
Группа: Местный
Сообщений: 975
Из: Киев
Спасибо сказали: 168 раз
Рейтинг: 0

единичка меня сбила. значит первое изменение статуса, а не заказы с одним-единственным изменением статуса.

А сначала сделать отбор строк по условию СтатусДо= и статусПосле= , а потом упорядочить по Период. группировки Заказ, за ним группировка период. И снимать только первые записи при обходе выборки...

Сообщение отредактировал Домовик - 26.01.12, 15:07

DartRomanius Подменю пользователя
сообщение 26.01.12, 15:06
Сообщение #20

Ветеран
Иконка группы
Группа: Местный
Сообщений: 824
Из: Запорожье
Спасибо сказали: 145 раз
Рейтинг: 0

Цитата(Домовик @ 26.01.12, 16:50) *
единичка меня сбила. значит первое изменение статуса, а не заказы с одним-единственным изменением статуса.

А сначала сделать отбор строк по условию СтатусДо= и статусПосле= , а потом упорядочить по Период. группировки Заказ, группировка период. И снимать только первые записи при обходе выборки... не заходить внутрь группировки Период


Как я делал:
                       ВЫБРАТЬ
                   |    Заказы.Ссылка КАК СсылкаНаЗаказ
                   |ИЗ
                   |    Документ.Заказ КАК Заказы
                   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗаказРолиСотрудников КАК Роли
                   |        ПО (Роли.Заказ = Заказы.Ссылка)
                   |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ПЕРВЫЕ 1
                   |            Заказы.Ссылка КАК СсылкаНаЗаказ,
                   |            ЗаказыИсторияСтатусов.СтатусБыл КАК СтатусБыл,
                   |            ЗаказыИсторияСтатусов.СтатусСтал КАК СтатусСтал,
                   |            ЗаказыИсторияСтатусов.Период КАК Период
                   |        ИЗ
                   |            Документ.Заказ КАК Заказы
                   |                ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗаказыИсторияСтатусов КАК ЗаказыИсторияСтатусов
                   |                ПО (ЗаказыИсторияСтатусов.Заказ = Заказы.Ссылка)
                   |        ГДЕ
                   |            НЕ Заказы.ПометкаУдаления
                   |            И Заказы.Проведен
                   |            И ((ЗаказыИсторияСтатусов.СтатусБыл.ТипСтатуса = &ПарамОткрытый
                   |                        ИЛИ ЗаказыИсторияСтатусов.СтатусБыл.ТипСтатуса = &ПарамДоПроизводства)
                   |                        И ЗаказыИсторияСтатусов.СтатусСтал.ТипСтатуса = &ПарамПроизводство
                   |                    ИЛИ ЗаказыИсторияСтатусов.СтатусБыл.ТипСтатуса = &ПарамДоПроизводства
                   |                        И ЗаказыИсторияСтатусов.СтатусСтал.ТипСтатуса = &ПарамПроизводство)
                   |            И ЗаказыИсторияСтатусов.Период МЕЖДУ &НачДатаВремя И &КонДатаВремя) КАК Отбор23
                   |        ПО Заказы.Ссылка = Отбор23.СсылкаНаЗаказ
                   |ГДЕ
                   |    НЕ Отбор23.СсылкаНаЗаказ ЕСТЬ NULL


Правда не работает как надо... smile.gif


Signature
-----------------------------------------------------------------------------------
Единственный, интуитивно понятный интерфейс - мамкина сиська!
Всему остальному надо учиться! (с) Не знаю кто....

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


3 страниц V   1 2 3 >
Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 25.04.24, 13:29
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!