Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.81/37: Рейтинг темы: голосов - 37, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 21.11.2014
Сообщений: 57

РАБДЕНЬ ЧИСТРАБДНИ в ACCESS

21.11.2014, 22:33. Показов 7802. Ответов 57
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Столкнулся с проблемой:
Не смог найти в интернете способ реализации следующего функционала доступного в Excel:

1) Как реализовать запрос c функционалом РАБДЕНЬ

К примеру в строке имеется срок годности товара и необходимо вычислить крайнюю дату продажи товара, а это случится за 4 рабочих дня до последнего рабочего дня месяца, предыдущего указанному в строке.
Я использовал следующую формулу:
=РАБДЕНЬ(КОНМЕСЯЦА(ДАТА(d2;c2;1);-1);-4;{39448;39814})

Поясню на примере: имеем строку:
20140103|Тип1|2|2014|50
Т.е. расшифровка строки:
дата очередной продажи товара 2014 01 03 (3е января)
Тип товара: Тип1
Месяц в котором заканчивается срок годности: 2 (февраль)
Год, в котором заканчивается срок годности: 2014г.
Цена товара 50
Необходимо так же учесть праздничные дни в году, для примера оставил 2 значения..
В конечном итоге получаю значение СРОК РЕАЛИЗАЦИИ: 27.01.2013
А в строке появится дополнительный столбец СРОК РЕАЛИЗАЦИИ, добавится ячейка со значением 27.01.2014 и строка примет следующий вид:
|20140104|Тип1|2|2014|50|27.01.2014|

2) Функционал ЧИСТРАБНИ

Необходимо найти количество оставшихся рабочих дней до СРОКА РЕАЛИЗАЦИИ:
Т.е. в Excel я пользовался формулой
=ЧИСТРАБДНИ(ДАТА(ПСТР(A2;1;4);ПСТР(A2;5; 2);ПСТР(A2;7;2));G2;{39448;39814})

Дело в том, что дата идет в формате ГГГГММДД во всех строках, поэтому необходимо включить в код функционал ПСТР. Так же необходимо учесть праздничные дни.

Имею на входе уже обновленную строку:
|20140104|Тип1|2|2014|50|27.01.2014|

После вычисления должна добавиться запись:
|20140104|Тип1|2|2014|50|27.01.2014|16|

Т.е. разница между 27.01 и 04.01, с учетом праздников и выходных, составляет 16 рабочих дней.

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

3) Ну и наверное самый главный вопрос:
Имеются уже вычисленные значения (27.01 и 16), необходимо узнать самую раннюю дату продажи, т.е. самое минимальное значение ДАТА для связки ТИП+МЕС+ГОД+ЦЕНА. Вот это я не смог реализовать в ни в Excel, ни через Access (имеется ввиду пытался использовать select, однако выдает просто самую 1ю дату).

Буду очень признателен за ответы!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.11.2014, 22:33
Ответы с готовыми решениями:

Реализация собственной функции Excel РАБДЕНЬ на языке 1с
Здравствуйте. Очень нужно реализовать алгоритм нахождения даты рабочего дня, отстоящей от указанной начальной даты на заданное количество...

Как скопировать данные из таблицы одной БД Access в такую же таблицу БД Access другой БД Access?
Как с помощью компонента AdoQuery (Delphi7) скопировать данные из таблицы одной БД Access в такую же таблицу БД Access (такой же структуры)...

Нужно ли устанавливать Access 2003, если в Access 2016 итак возможно разрабатывать БД в формате Access 2003?
Здравствуйте! Подскажите пожалуйста, нужно ли устанавливать Access 2003, если в Access 2016 итак возможно разрабатывать БД в формате...

57
Эксперт MS Access
2835 / 1377 / 215
Регистрация: 13.05.2011
Сообщений: 4,219
21.11.2014, 22:43
manager777, то что вы написали хорошо, но не хватает вашего примера. прочитав, не много ясно, в если бы был пример, то было бы еще яснее. и самое главное: на нем бы и показали.
1
 Аватар для VinniPuh
9118 / 6107 / 591
Регистрация: 27.03.2013
Сообщений: 19,919
21.11.2014, 22:47
Ну по идее то и по здравому размышлению, праздничные дни не должны учитываться.
Если у товара срок годности заканчивается к примеру 10 мая, а ваша контора 9 и 10 мая не работает. т. к. это праздничные дни, то если его не продали в рабочийе дни, максимум 8 мая, то это уже будет просроченый, типа - ТУХЛЫЙ товар, могуций причинить вред здоровью.. По закону это если вкратце то как то так.
Вы или покупайте у производителя товар выпущенный 11 марта или выбрасывайте его на помойку. Компромисов кажется по данному вопросу нет, по крайней мере в России.
0
0 / 0 / 0
Регистрация: 21.11.2014
Сообщений: 57
21.11.2014, 23:10  [ТС]
Не вопрос)
http://download.files.namba.net/files/65856831

Добавлено через 5 минут
"Ну по идее то и по здравому размышлению.... "

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

Как говаривал один опытный программист: Без внятного ТЗ - результат будет ХЗ
0
 Аватар для VinniPuh
9118 / 6107 / 591
Регистрация: 27.03.2013
Сообщений: 19,919
21.11.2014, 23:30
В своем задании вы ссылаетесь на возможности - Excel, а это раздел - Access, тут малость немного все по другому делается, типа раз в 5 более трудозатратно.
Создание таблиц, форм, запросов. процедур довольно больше времени занимает чем в Excel, по этому желательно выкладывать пример с примерно введенными данными, а то вам сделают пример затратив на это несколько часов, а вы скажите, а у меня немного по другому, сделайте теперь на моем примере. Это я к тому, что очень редко кто без примера будет прмер делать, чтоб потом еще и повторно переделывать.
0
0 / 0 / 0
Регистрация: 21.11.2014
Сообщений: 57
21.11.2014, 23:36  [ТС]
kmv-puh, Я ВООБЩЕТО СКИНУЛ УЖЕ ПРИМЕР В EXCEL.
Для меня не важно прямо полное соответствие ожиданиям - хотя бы общий принцип, если что сам допишу, что потребуется, хоть сам 2й день в аксесс всего))
0
0 / 0 / 0
Регистрация: 21.11.2014
Сообщений: 57
21.11.2014, 23:39  [ТС]
kmv-puh, Вот наконец то получилось найти как прикреплять файл)
Вложения
Тип файла: xlsx PRIMER.xlsx (10.8 Кб, 14 просмотров)
0
 Аватар для VinniPuh
9118 / 6107 / 591
Регистрация: 27.03.2013
Сообщений: 19,919
21.11.2014, 23:45
Щас попробую набросать.
1
 Аватар для VinniPuh
9118 / 6107 / 591
Регистрация: 27.03.2013
Сообщений: 19,919
22.11.2014, 00:18
Ну вот как то так.
Вложения
Тип файла: rar Сроки-01.rar (20.5 Кб, 55 просмотров)
1
0 / 0 / 0
Регистрация: 21.11.2014
Сообщений: 57
22.11.2014, 00:40  [ТС]
kmv-puh, Ну конечно спасибо, однако необходимо выполнить запрос и получить таблицу с дополнительными ячейками с просчитанными значениями РАБДЕНЬ и пр...
Ну как то неудобно анализировать таким образом (ваш вариант) около миллиона строк)))
Поэтому просто таблица на выходе нужна.. просто таблица. СМ. первый пост.
0
Эксперт MS Access
26825 / 14505 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
22.11.2014, 02:47
manager777, смотрите вложение. В нем 2 запроса, построенные на импортированной с ексель-файла таблице Лист1. Запрос "Срок реализации" отвечает на 2 первых Ваших вопроса о сроке реализации и количестве оставшихся рабочих дней. Запрос "СамаяРанняяДатаПродажи" это Ваш третий вопрос.

У Вас были ошибки в подсчетах даты реализации и, соответственно всего остального. В частности за август не 165, а 164 рабдня. Это за счет того, что неверно определялось (не по Вашему же алгоритму) дата как Месяц-1 и отнять 4 рабдня. В каких-то еще месяцах были ошибки.

Но примененный алгоритм никак не учитывает государственные праздники и корпоративные выходные. Это можно учесть только специальной таблицей типа календаря. Пример такой таблицы приведен.
Вложения
Тип файла: rar Рабдни.rar (38.8 Кб, 54 просмотров)
1
Эксперт MS Access
26825 / 14505 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
22.11.2014, 03:12
Лучший ответ Сообщение было отмечено manager777 как решение

Решение

Возможно сделал ошибку в запросе на самую ранню цену. У Вас условие
Цитата Сообщение от manager777 Посмотреть сообщение
самое минимальное значение ДАТА для связки ТИП+МЕС+ГОД+ЦЕНА
а я сделал группировку только по товару. Исправляюсь. Вот правильное SQL-выражение для запроса "СамаяРанняяДатаПродажи"
SQL
1
2
3
SELECT Товар, Месяц, Год, Цена, MIN(Дата1) AS СамаяРанняяДатаПродажи
FROM Лист1
GROUP BY Товар, Месяц, Год, Цена
Поле Дата1 это преобразованное из строки в датный тип поле Дата из ексель-файла
1
0 / 0 / 0
Регистрация: 21.11.2014
Сообщений: 57
22.11.2014, 05:10  [ТС]
mobile, спасибо,я ознакомлюсь через часов 6)
По поводу праздников: в екселе применялся массив ;{более 100 дат по различным годам}), поэтому оставил для наглядности только 2-3 штуки, Соответственно расхождения имеют место быть.
Загрузив массив праздников на TYPE9 например у меня получается 159 дней.
Отсюда вытекает вопрос как можно включить в код SQL запроса следующий массив дат:
{39448;39814;40179;40544;40909;41275;416 40;42005;42370:39468;39832;40196;40560;4 0924;41295;41659;42023;42387:39496;39860 ;40231;40595;40959;41323;41687;42051;424 22:39528;39913;40270;40655;41005;41362;4 1747;41732;42489:39594;39958;40329;40693 ;41057;41421;41785;42149;42520:39633;399 98;40363;40728;41094;41459;41824;42189;4 2555:39692;40063;40427;40791;41155;41519 ;41883;42254;42618:39734;40098;40462;408 26;41190;41561;41925;42289;42653:39763;4 0128;40493;40858;41224;41589;41954;42319 ;42685:39779;40143;40507;40871;41235;416 06;41970;42334;42698:39807;40172;40537;4 0902;41268;41633;41998;42363;42729}
И соответственно при беглом взгляде на ваше решение в SQL может несколько поменяться алгоритм вычисления...
Если нужно массив переделаю в какой нибудь другой вид.
Делать запросы и крутить код попробую часов через 6.

Добавлено через 2 минуты
Но можно с уверенностью сказать, что на % 70 я получил ответы - это вдохновляет
0
 Аватар для Андрэич
2842 / 774 / 41
Регистрация: 20.05.2012
Сообщений: 2,055
22.11.2014, 13:16
Здравствуйте всем.
Цитата Сообщение от manager777 Посмотреть сообщение
...как можно включить в код SQL запроса следующий массив дат:
{39448;39814;40179;40544;40909;41275;416 40;42005;42370:39468;39832;40196;40560;4 0924;41295;41659;42023;
42387:39496;39860;40231;40595;40959;4132 3;41687;42051;42422:39528;39913;40270;40 655;41005;41362;41747;
41732;42489:39594;39958;40329;40693;4105 7;41421;41785;42149;42520:39633;39998;40 363;40728;41094;41459;
41824;42189;42555:39692;40063;40427;4079 1;41155;41519;41883;42254;42618:39734;40 098;40462;40826;41190;
41561;41925;42289;42653:39763;40128;4049 3;40858;41224;41589;41954;42319;42685:39 779;40143;40507;40871;
41235;41606;41970;42334;42698:39807;4017 2;40537;40902;41268;41633;41998;42363;42 729}
manager777, а как из этих чисел вы выделяете даты?..
0
Эксперт MS Access
26825 / 14505 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
22.11.2014, 13:23
Андрэич, это и есть даты. Например первое из чисел - 39448 это
Visual Basic
1
2
?cdate(39448)
01.01.2008
В екселе видимо, массив можно куда-то целиком засунуть как строку. А в аксе надо сплитом делить.
1
 Аватар для Андрэич
2842 / 774 / 41
Регистрация: 20.05.2012
Сообщений: 2,055
22.11.2014, 13:28
mobile, спсб, понял: это даты в "оригинальном" их числовом типе-виде...
0
Эксперт MS Access
26825 / 14505 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
22.11.2014, 13:33
Цитата Сообщение от Андрэич Посмотреть сообщение
это даты в "оригинальном" их числовом типе-виде...
Так точно. Только тип их здесь не виден. Тип дат это тип Double. А здесь они видно без мантиссы. Как Long.
1
 Аватар для VinniPuh
9118 / 6107 / 591
Регистрация: 27.03.2013
Сообщений: 19,919
22.11.2014, 14:15
Я так и знал. что это заразно, вот здесь - РАБДЕНЬ ЧИСТРАБДНИ в ACCESS - Андрэич как и - commun (в некоторых темах) - отвечает в темах как и дедушка Ленин находжясь в ссылке - типа молоком, скрытно (типа шифровано и Конспиративно)

Добавлено через 2 минуты
Если это так и продолжится, то я наверное свою Балладу не дописю, скорее всего умру от смеха.
0
0 / 0 / 0
Регистрация: 21.11.2014
Сообщений: 57
22.11.2014, 20:43  [ТС]
mobile, Так ну такой вариант почему то не работает
Цитата Сообщение от mobile Посмотреть сообщение
Код SQL
SELECT Товар, Месяц, Год, Цена, MIN(Дата1) AS СамаяРанняяДатаПродажи
FROM Лист1
GROUP BY Товар, Месяц, Год, Цена
Выдает ошибку
0
Эксперт MS Access
26825 / 14505 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
22.11.2014, 22:12
Лучший ответ Сообщение было отмечено manager777 как решение

Решение

Цитата Сообщение от manager777 Посмотреть сообщение
Выдает ошибку
Не знаю. Надо смотреть Ваш вариант.

Подготовил вариант с таблицей-календарем. Внедрил в нее перечисленные Вами выходные дни с помощью процедуры addFreeDay из Module1. Создал запрос "Срок реализацииКаленд" в котором учитываются Ваши выходные.
Расчет срока реализации и оставшихся дней делаются в функции getAllDate также из модуля1. Эта функция применена в запросе "Срок реализацииКаленд".

Таблица Kalendar0 та же таблица-календарь, но без Ваших выходных.
Вложения
Тип файла: rar Рабдни.rar (54.9 Кб, 49 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.11.2014, 22:12
Помогаю со студенческими работами здесь

Переписывание файла adp под Access 2007 или Access 2010
Имеется проект, разработанный под Access 2003 и работающий с базой данных SQL Server. При запуске проекта под Access 2003 и...

VkApi (vk_api.exceptions.ApiError: [15] Access denied: no access to call this method)
Не работает код на питоне, что я делаю не так? или как это исправить from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType ...

Создание БД Access, используя VB-команду Select Microsoft Access Database to Create
Доброе время суток всем!!!! все как обычно, в последнии дня....Прошу, просто умоляю ПОМОГИТЕ!!!! Сказанно сделать курсач в универ, а...

Код VBA в Access 2010 работает, в Access 2007 выдает ошибку
Написала код VBA в Access 2010 - работает, в Access-2007 выдает ошибку. В чем причина - подскажите

Чем можно заменить тип вычисляемый (Access 2007) в Access 2002?
Чем можно заменить тип вычисляемый (Access 2007) в Access 2002 Делфи принимает базу только mdb Access 2002-2003


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru