Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Accses учет даты как это делать

доброго времени суток, такой вопрос появился
создал базу в accses 2016 и столкнулся с проблемой что нужно учитывать выходные и праздники в вычисляемом столбце.
вычисляемый столбец считается как сумма столбца "дата начала командировки" + "количество дней командировки". нужно чтобы после сложения первых двух слагаемых проверялся день недели и если это четверг прибавлялось 5 дней если пятница 5 дней если суббота 4 дня а если остальные дни то 3 дня и после этого число вводилось в созданный под это столбец таблице. незнаю реально это или нет но всю голову уже сломал, если кто знает решение подскажите пожалуйста.
Ответ: mobile, вы правы! Format(Expression, "w", 2) - я виноват...
Вопрос: Снова построение запроса с учетом дат

Добрый день всем.
Совсем недавно я здесь создавал тему, в которой нужно было запросом определить статус заказа по состоянию на конкретную дату.
В этот раз у меня возникла в чем-то похожая задача, и сначала мне показалось, что ее можно решить подобным образом, но потом как-то запутался я в рассуждениях и пришел к выводу, что здесь всё хитрее.

Итак, есть таблица Заказы (КодЗаказа, ДатаЗаказа, Сумма), таблица Бюджеты (КодБюджета, Бюджет). таблица Бюджеты - это справочник, в нем будут значения типа "Реклама", "Ремонт" и т.д.
Подразумевается, что мы должны учитывать, что определенный процент от стоимости заказа у нас будет идти на нужды соответствующего бюджета.
Только эти проценты - меняются со временем, в один месяц может быть одна ставка, на следующий - другая и т.д.

Поэтому есть третья таблица - ИсторияСтавокБюджетов (поля Код, КодБюджета, ДатаНачала, Процент) - в ней мы и заносим историю изменения процентных ставок каждого бюджета.

Все эти таблицы я создал в прилагаемом примере.

А теперь сам вопрос.
Нужно сформулировать запрос, в котором бы бралась сумма заказа, множилась на нужный процент по бюджету - и получалась сумма данного бюджета с данного заказа. И вся суть в том, что "нужный процент" - это тот, который по дате действовал в тот момент, когда был создан заказ (то есть нужно брать поле ДатаЗаказа).
При этом еще нужно учесть, что если в истории ставок нет данных для нужного периода (в файле примера это первые два заказа и бюджет "ремонт") - то чтобы в поле результата ничего не ставилось.

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

Не знаю, мне кажется, тут, наверное, нужно использовать какие-то запросы со связями, которые не отобразишь в обычном конструкторе. Ну, то есть я имею в виду, если в обычные связи выглядят как "ON Код = Код", то здесь должно быть что-то типа "ON Дата < Дата"... А я в таких запросах как-то до сих пор блужу, если честно)...

Буду очень признателен за подсказки)
Ответ: mobile, Вау... Как всегда, поражаюсь красоте решения и скорости ответа... СПАСИБО ОГРОМНОЕ! Это идеально.
Вопрос: Снова построение запроса (или кода для обработки) начисления с учетом дат и периодов

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

Ситуация:
Имеются работники, которым в месяц начисляется определенная сумма зарплаты по ставке. Ставка с течением времени может изменяться.

Соответственно, имеются таблицы:
1. Таблица Работники (поля КодРаботника, ФИО, ДатаПринятия)
2. Таблица ИсторияСтавок (поля КодРаботника, ДатаНачалаСтавки, СуммаНаМесяц)

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

И имеется форма, на которой есть поле ДатаКонца. В данное поле вводится какая-нибудь расчетная дата, по состоянию на которую нужно, исходя из имеющихся данных указанных выше таблиц рассчитать ПОЛНУЮ сумму зарплаты по ставке для каждого работника (начиная от даты принятия и заканчивая датой, указанной в форме. То есть сумма должна рассчитываться пропорционально дням в месяце.

Если, например, работник принят 01.01.2016, и в форме указали дату "12.04.2016", то нужно рассчитать общую сумму зарплаты данного работника, начиная от 01.01.2016 (то есть три полных месяца, начиная с января) - и за 12 дней апреля. При этом учитывая данные из истории ставок данного работника.
То есть, если у него с 01.01.2016 была з/п 5000, с 01.03.2016 - 7000, с 01.04.2016 - 10000, то в итоге мы должны получить:
5000 (январь) + 5000 (февраль) + 7000 (март) + (10000/30 дней * 12 дней = 4000) = 21000 по состоянию на 12.04.2016.

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

Мне кажется, что выстроить подсчет только с помощью запросов будет сложно, может, имеет смысл как-то выполнять эти рассчеты в VBA?.. И уже результаты заносить во временную таблицу?..
Или все-таки здесь тоже возможно построить какой-нибудь хитрый запрос (с использованием самописных функций и т.д.)?

Базу с описанными таблицами и формой прилагаю на всякий случай.

Буду очень признателен за идеи и советы)
Ответ: mobile, Наконец-то добрался до компа, посмотрел Ваш вариант. Как я и думал - все супер и идеально подходит, так что еще раз большое Вам спасибо за скорость и качество ответа!
Вопрос: Дата из объекта "Поле" в условии отбора SQL-запроса

День добрый.

Собственно вопрос озвучен в сабже. Прилагаю две базы.
В одной - отбор без учёта даты. Во другой - с учётом. Вариант с датой выдаёт ошибку "Несоответствие типов данных в выражении условия отбора". Вне зависимости от того с Eval я указываю данные или без.
Зашёл в тупик потому, что такую конструкцию я уже использовал ранее и без проблем. Или таки что-то делаю не так?
Ответ:
Сообщение от kukana
наблюдается забавный, но непонятный мне эффект. Форма открывается, но на ней не отображается ни один из объектов - ни PredList, ни ControlDateInput. Просто пустая форма и всё.
Такой вид у формы когда ее источник без записей. Это не баг, это фича
Как видите, задание начальных значений и обновление источника привели форму в нормальный вид
Вопрос: (MySQL) запрос с группировкой по дате с уникальными полями

Здрасте!

Есть таблица

id_view
id_sale
date_view
ip

чтобы подсчитать уникальные ip с группировкой по дате делаю так

SELECT date_view as d2, (COUNT(DISTINCT(ip))) as cnt FROM `table123` GROUP date_view


а как подсчитать сумму кол-ва уникальных ip для каждого id_sale по дате?
Ответ:
однобитный
COUNT(DISTINCT(ip))
Нет функции DISTINCT, поэтому лучше писать COUNT(DISTINCT ip), так корреткнее и читабельнее будет.
Вопрос: преобразование строки к дате

Есть запрос вида:
with qq as(select '30.12.2015' from dual
union
select '30-12-2015' from dual
union
select '30.Feb.2015' from dual
union
select '21/мар/2015' from dual
union
select '12.30.15' from dual
union
select '256.2015' from dual)

нужно преобразовать к дате, делаю вот так:
with qq as(
select to_date('21.12.2015', 'dd.mm.yyyy') q from dual
union all
select to_date(translate('21-12-2015','#-', '.'),'dd.mm.yyyy' )q from dual
union all
select to_date(replace(regexp_replace('21.Feb.2015','(Feb){1,}', '02'), '.'), 'DDMMYYYY')d
from dual
union all
select to_date(replace(regexp_replace('21/мар/2015','(мар){1,}', '03'), '/'), 'DDMMYYYY') d
from dual
union all
select to_date('12.21.15', 'mm.dd.yy') q from dual
union all
select to_date('256.2015', 'ddd.yyyy') q from dual
)
select * from qq

как можно преобразовать обращаясь к дате обращаясь к самой таблице qq из первого запроса?
Ответ: wiiild_che,

надо бороться не с системой в поисках лайфхака-костыля, а с кривыми данными (очевидно, приходящими извне).
(лечить не симптомы, а причину)
Вопрос: Выборка с учетом курса

Всем привет.
Подскажите имеет на существование велосипед который я придумал.
В базе есть таблица курсов валют вида
id_currencyexchangerate_maxexchangerate_mindate
110.58.123.12.2016
420.218.723.12.2016

Есть основная валюта (основная валюта может быть только одна, и изменить основную валюту невозможно) для которой курс не устанавливается, для всех других валют установлен курс, курс устанавливается каждый операционный день.
Для каждой модели (товар) в таблице моделей присвоено id_currency. в большинстве случаев пользователи видят цены в основной валюте, с учетом курса, придумал следующую выборку.
select count,name_model......, iif(exgerates.exchangerate_max is null, 1, exgerates.exchangerate_max) * price
from.....

 left join exchangerates exgerates on exgerates.id_currency = id_currency_модели and....

Выборка сводится к условию если для модели нет курса цену умножаем на 1 если есть цену умножаем на exgerates.exchangerate_max и получаем стоимость модели с учетом курса.
Имеет право на жизнь?
Ответ:
Di_LIne
Цены, аки резиденты РФ обязаны публиковать (указывать в документах) в рублях.

Публикуй как требует закон, просматривай в любой валюте в которой требуется, храни универсальным образом.
автор
- Чё я делаю не так уже 10 лет?

Тебе виднее - ты программист, я любитель, поэтому говорю так как вижу из своей практики.
+
Я бы начал примерно так - завел справочник валют
ID_Cur
Cur_Name
--Другие атрибуты, типа страны и т.п.

Таблицу операций с валютами, она же таблица курсов
ID
ID_Cur_From --Внешний ключ на справочник валют
ID_Cur_To --Внешний ключ на справочник валют
ID_Operation_type --Внешний ключ на тип операции
Operation_Time_from --Поле если в таблице хранятся данные об инфляции. Т.е. коэффициент от даты к дате.
Operation_Time --Время на которое фиксируется операция

Справочник типов операций
ID
Operation_Name

Предустановленные типы операций
1. Курс покупки.
2. Курс продажи.
3. Курс ЦБ.
4. Курс преобразования валюты.
5. Коэффициент инфляции.
6. Продажа товара.
7. Покупка товара.
Покупки фиксировал бы в таблице операций с товарами
ID
ID_Goods --Внешний ключ на таблицу товаров
ID_Cur --Внешний ключ на таблицу валют
Operation_Sum_Cur --Сумма операции в указанной валюте
/*
Рассмотрел бы необходимость хранения суммы операции в основной валюте.
Необходимость определяется планируемой нагрузкой на базу.
*/
Operation_type --Внешний ключ на таблицу операций
Operation_Time

При такой структуре я могу не трогая структуру базу, а только лишь силами пользователя отобразить любые данные - хранить курсы покупки, продажи, ЦБ, преобразование одних валют в другие - дойчмарки в евро (в том числе наоборот если Греция отвалится и вернет драхмы), и даже преобразование одной валюты - например, деноминацию.
Такая структура позволит мне, например, отследить текущую стоимость товара в рублях, который был куплен за дойчмарки в 1995 году, позволит продать программу в другую страну, где нет обязанности хранить в рублях и т.п.
Но, конечно правильным программистам виднее...


автор
И в большей степени - метедологический:
- Вертикальные vs горизонтльные табли в БД.

Это философский вопрос, но примерно в 80% случаев где я пожалел времени и стал делать горизонтальные столбцы для дополнительных (=вспомогательных) атрибутов, я потом пожалел об этом - каждый чих, каждая дополнительная настройка приводят к изменению структуры, в том числе у пользователей у которых нет DBA.
Вопрос: Посоветуйте опытом как лучше реализовать партийный учет много склад?

Привет всем Всех с новым годом.. Заранее извиняюсь за грамматику
Очень нужна ваша помощь
Посоветуйте опытом как лучше реализовать партийный учет много склад? Форуме много тем прочитал чета не могу соображать
Делаю для магазина простой самопальный веб приложение(велосипед). У магазина имеется 6 торговых точек
Владелец магазина просит партийный учет для того чтобы узнать сколько было продаж и сколько осталось по партии и сколько прибыль убыток итд..


Пример привез товар с Китая 10 мешков товаров внутри мешки разные товары 20 пар обувь разнего размера и цвета 100 пар носки итд..

В шапке документа вводит
Здесь как я понял ИД прихода можно использовать как номер партии?
    
    Дата закупки   01,01,2016
    Номер документа   1
    Откуда         С Китая
    Куда            Основной Склад
    Кто              Владелец магазина
    Проведен     Да/Нет

Детали документа вводит
    
    Код товара      Туфли 43 razmera
    КОД                1                      ----Порядковый код 
    Сколько          10
    Цена              100 руб

Оплата по документу то есть расходы
    
    Дата                     01,01,2016
    Номер документа   1
    Сумма                    200   -100 для товаров а +100 затраты который он тратил на билеты итд

После прихода я считаю себестоимость товара

Подскажите как хранить партию?
Создать таблицу который содержит?
ИД
ИДПрихода
ИДСклад
ИДТовар
Количество
Цена
Себестоимость
Остаток по партии


чтобы показать остаток примерно так
номер партии товар код склад основноймагазин-1магазин-2общий
1туфли (43 разм)10 шт1шт 2шт 3шт


Если сделать продаж с магазина-1 то я должен показать остаток этого магазина 1шт

К сообщению приложен файл (SkladLite.grc - 18Kb)
Ответ:
RADSeatle
Посоветуйте опытом как лучше реализовать партийный учет...

А что местная партячейка мыслит на эту тему?
Читайте работу ВИЛ - "Как нам реорганизовать рабкрин"

Не бейте за шутку юмора. Глаз просто зацепился за нестандартный хидер :)
.
Вопрос: Опять расчет кол-ва рабочих дней между двумя датами.

Хочу поделиться своими измышлениями.
Собствеенно процедура.
+
SET TERM ^ ;

create or alter procedure BUSSINES_DAYS (
    START_DATE date,
    END_DATE date,
    WORKDAYS integer)
returns (
    RET integer)
as
declare variable TMP_DATE date;
declare variable DIFF1 integer;
declare variable DIFF2 integer;
begin
tmp_date = '08.01.1900';
diff2 = datediff(day from tmp_date to start_date);
diff1 = datediff(day from tmp_date to end_date);
ret = (workdays*floor(diff1/7)  + MINVALUE(workdays, MOD( diff1, 7 )+1))
    - (workdays*floor(diff2/7)  + MINVALUE(workdays, MOD( diff2, 7 )));
    if(workdays = 6) then
     diff1 = 7;
    else
     diff1 = 6;
-- Ищем праздничные и невыходные.
   select count(*) from prod_calendar where data between :start_date and :end_date and type = 0 and week_day < :diff1 into :diff2;
   ret = ret - diff2;
   if(workdays = 5) then
    begin
   -- Ищем переносы выходных.
     select count(*) from prod_calendar where data between :start_date and :end_date and type = 1 and week_day < :diff1 into :diff2;
     ret = ret - diff2;
   -- Ищем переносы рабочих дней.
     select count(*) from prod_calendar where data between :start_date and :end_date and type = 2 and week_day >= :diff1 into :diff2;
     ret = ret + diff2;
    end
  suspend;
end^

SET TERM ; ^


Для учета праздничных дней и учета переноса используется таблица:
+
/******************************************************************************/
/***               Generated by IBExpert 28.02.2016 12:11:18                ***/
/******************************************************************************/

/******************************************************************************/
/***      Following SET SQL DIALECT is just for the Database Comparer       ***/
/******************************************************************************/
SET SQL DIALECT 3;



/******************************************************************************/
/***                                 Tables                                 ***/
/******************************************************************************/


CREATE GENERATOR GEN_PROD_CALENDAR_ID;

CREATE TABLE PROD_CALENDAR (
    DID       BIGINT NOT NULL,
    DATA      DATE NOT NULL,
    "TYPE"    SMALLINT NOT NULL,
    WEEK_DAY  SMALLINT
);




/******************************************************************************/
/***                              Primary keys                              ***/
/******************************************************************************/

ALTER TABLE PROD_CALENDAR ADD CONSTRAINT PK_PROD_CALENDAR PRIMARY KEY (DID);


/******************************************************************************/
/***                                Indices                                 ***/
/******************************************************************************/

CREATE INDEX PROD_CALENDAR_IDX1 ON PROD_CALENDAR (DATA);


/******************************************************************************/
/***                                Triggers                                ***/
/******************************************************************************/



SET TERM ^ ;



/******************************************************************************/
/***                          Triggers for tables                           ***/
/******************************************************************************/



/* Trigger: PROD_CALENDAR_BI */
CREATE OR ALTER TRIGGER PROD_CALENDAR_BI FOR PROD_CALENDAR
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
as
begin
  if (new.did is null) then
    new.did = gen_id(gen_prod_calendar_id,1);
  new.week_day = extract(weekday from new.data);
  if (new.week_day = 0) then new.week_day = 7;
end
^

SET TERM ; ^



/******************************************************************************/
/***                          Fields descriptions                           ***/
/******************************************************************************/

COMMENT ON COLUMN PROD_CALENDAR.DID IS 
'Первичный ключ';

COMMENT ON COLUMN PROD_CALENDAR.DATA IS 
'Дата праздника или переноса';

COMMENT ON COLUMN PROD_CALENDAR."TYPE" IS 
'Тип даты
0 - праздник
1 - день стал выходным после переноса
2- день стал рабочим после переноса';

COMMENT ON COLUMN PROD_CALENDAR.WEEK_DAY IS 
'День недели - считается автоматом в триггере
1- понедельник, 2- вторник,...., 7- воскресенье';


До конца не выяснен процесс применения переносов к рабочей неделе с точки зрения законодательства в которой не 5 дней.
Поэтому переносы для них просто пока не учитывается....
Покритикуйте, please!
Ответ: Это зарплата?
Если, да, то что делать со сменами, где люди работаю не по 8 часов в день, а например 8 8 8 8 8 4 ?
Имхо запрос по получению рабочих дней должен быть прост, нечто

select count(t1.hours) as workDay, sum(t1.hours) as workTime
from calendar t1
where 
-- фильтр по датам
-- фильтр по нужному графику


P.S.
Меня устраивает вариант, который использует например 1С - это производственный календарь по годам,
и графики, которые строятся по этому календарю, редактируются пользователем и сохраняются.
Вопрос: Нужна база данных "Учет вывоза отходов с предприятий"

Очень нужно база данных «Учет вывоза отходов с предприятий», может у кого есть? Люди!!!ПОЖАЛУЙСТА!!!!
Ответ: Спасибо. Подробнее.. Вариант 6
5.6.1 Создайте базу данных «Учет вывоза отходов с предприятий», состоящую из трех таблиц по примеру базы данных «Библиотека». Таблицы: 1 Организации (Код организации – числовой; Наименование – текстовый; Адрес – текстовый; Телефон – числовой). 2 Отходы (Код отхода – числовой; Наименование – текстовый; Агрегатное состояние – текстовый; Класс опасности – числовой). 3 Вывоз отходов (Код организации – числовой; Код отхода – числовой; Дата вывоза – дата/время; Количество – числовой). Ключевые поля в таблицах определите самостоятельно. Создайте связи между таблицами. Таблицы заполните данными – не менее десяти записей в каждой таблице.

5.6.2 Запросы к базе данных «Учет вывоза отходов с предприятий», созданной в задании 5.6.1.
Запрос №1 Вывести на экран все данные о твердых отходах.
Запрос №2 Вывести на экран данные об отходах, вывезенных с предприятий после определенной даты.
Запрос №3 Вывести на экран все данные об организации, наименование которой пользователь вводит с клавиатуры.
Запрос №4 Перекрестный запрос. Вывести на экран количество отходов, вывезенных с предприятий (Заголовки строк – организации, Заголовки столбцов – отходы; Значение – количество).
Запрос №5 Итоговый запрос. Подсчитать и вывести на экран количество отходов по каждому классу опасности.
Запрос №6 Вывести на экран наименования организаций, которые начинаются на определенную букву.

5.6.3 Формы к базе данных «Учет вывоза отходов с предприятий». Создайте простые формы с помощью мастера форм к каждой таблице базы данных.

5.6.4 Отчеты к базе данных «Учет вывоза отходов с предприятий».
Отчет №1 Создайте отчет с помощью мастера отчетов на основе таблицы «Отходы».
Отчет №2 Создайте отчеты с помощью мастера отчетов на основе запросов 1, 2, 5.
ПОМОГИТЕ!!! ГОРЮ!