0 / 0 / 0
Регистрация: 21.11.2014
Сообщений: 57

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

21.11.2014, 22:33. Показов 7743. Ответов 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,217
21.11.2014, 22:43
manager777, то что вы написали хорошо, но не хватает вашего примера. прочитав, не много ясно, в если бы был пример, то было бы еще яснее. и самое главное: на нем бы и показали.
1
 Аватар для VinniPuh
9118 / 6101 / 591
Регистрация: 27.03.2013
Сообщений: 19,918
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 / 6101 / 591
Регистрация: 27.03.2013
Сообщений: 19,918
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 / 6101 / 591
Регистрация: 27.03.2013
Сообщений: 19,918
21.11.2014, 23:45
Щас попробую набросать.
1
 Аватар для VinniPuh
9118 / 6101 / 591
Регистрация: 27.03.2013
Сообщений: 19,918
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
26824 / 14504 / 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
26824 / 14504 / 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
26824 / 14504 / 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
26824 / 14504 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
22.11.2014, 13:33
Цитата Сообщение от Андрэич Посмотреть сообщение
это даты в "оригинальном" их числовом типе-виде...
Так точно. Только тип их здесь не виден. Тип дат это тип Double. А здесь они видно без мантиссы. Как Long.
1
 Аватар для VinniPuh
9118 / 6101 / 591
Регистрация: 27.03.2013
Сообщений: 19,918
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
26824 / 14504 / 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
И решил я переделать этот ноут в машину для распределенных вычислений
Programma_Boinc 09.11.2025
И решил я переделать этот ноут в машину для распределенных вычислений Всем привет. А вот мой компьютер, переделанный из ноутбука. Был у меня ноут асус 2011 года. Со временем корпус превратился. . .
Мысли в слух
kumehtar 07.11.2025
Заметил среди людей, что по-настоящему верная дружба бывает между теми, с кем нечего делить.
Новая зверюга
volvo 07.11.2025
Подарок на Хеллоуин, и теперь у нас кроме Tuxedo Cat есть еще и щенок далматинца: Хочу еще Симбу взять, очень нравится. . .
Инференс ML моделей в Java: TensorFlow, DL4J и DJL
Javaican 05.11.2025
Python захватил мир машинного обучения - это факт. Но когда дело доходит до продакшена, ситуация не так однозначна. Помню проект в крупном банке три года назад: команда data science натренировала. . .
Mapped types (отображённые типы) в TypeScript
Reangularity 03.11.2025
Mapped types работают как конвейер - берут существующую структуру и производят новую по заданным правилам. Меняют модификаторы свойств, трансформируют значения, фильтруют ключи. Один раз описал. . .
Адаптивная случайность в Unity: динамические вероятности для улучшения игрового дизайна
GameUnited 02.11.2025
Мой знакомый геймдизайнер потерял двадцать процентов активной аудитории за неделю. А виновником оказался обычный генератор псевдослучайных чисел. Казалось бы - добавил в карточную игру случайное. . .
Протоколы в Python
py-thonny 31.10.2025
Традиционная утиная типизация работает просто: попробовал вызвать метод, получилось - отлично, не получилось - упал с ошибкой в рантайме. Протоколы добавляют сюда проверку на этапе статического. . .
C++26: Read-copy-update (RCU)
bytestream 30.10.2025
Прошло почти двадцать лет с тех пор, как производители процессоров отказались от гонки мегагерц и перешли на многоядерность. И знаете что? Мы до сих пор спотыкаемся о те же грабли. Каждый раз, когда. . .
Изображения webp на старых x32 ОС Windows XP и Windows 7
Argus19 30.10.2025
Изображения webp на старых x32 ОС Windows XP и Windows 7 Чтобы решить задачу, использовал интернет: поисковики Google и Yandex, а также подсказки Deep Seek. Как оказалось, чтобы создать. . .
Passkey в ASP.NET Core identity
stackOverflow 29.10.2025
Пароли мертвы. Нет, серьезно - я повторяю это уже лет пять, но теперь впервые за это время чувствую, что это не просто красивые слова. В . NET 10 команда Microsoft внедрила поддержку Passkey прямо в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru