Страницы: 1
RSS
Выборка последних значений по дате, обработка подобно запросу в SQL или ACCESS
 
Добрый день Великие Гуру
Помогите старому торгашу в детстве программировавшему на см1810.))

Сделал форму для заполнения сотрудниками которая преобразовывается в таблицу (прилагается) , которая является источником  для построения кэша сводной таблицы.
Задача которую нужно решить:
1. из прилагаемой таблицы удалить все строки в которых значение в поле "ВидДанных" начинается на "_"
2. Аналогично запросам с last (в Access) сделать выборку из этой таблицы по следующему принципу : совпадают все значения кроме поля "количество" (игнорируются) используя максимальное значение по полю "Дата".
2. Результат обработки поместить в конец таблицы указав в полях "дата" сегодняшнее число, а в поле "ВидДанных" к имеющемуся значению добавить префикс "_"

Буду очень признателен.
Заранее спасибо
С Уважением Сергей
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
 
Цитата
leseal написал: Аналогично запросам с last (в Access) сделать выборку
Вот я, допустим, не знаю что такое запросы с last в Access, как помочь?

Цитата
leseal написал: удалить все строки в которых значение в поле "ВидДанных" начинается на "_"
и тут-же
Цитата
leseal написал: а в поле "ВидДанных" к имеющемуся значению добавить префикс "_"
в чем подвох? Лучше на втором листе покажите ручками, что должно получиться после работы макроса
Согласие есть продукт при полном непротивлении сторон
 
ССори - комментировать замечания не буду , но на будущее учту.

пошаговые пояснения внес на отдельных листах.
надеюсь так понятнее
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
 
leseal, добрый вечер. Неправда Ваша :) В шаге 2 атрибуты "Фабрика", "Артикул", "ВидДанных" не совпадают, но попали в выборку... как так?
Учусь программировать :)
 
Как не совпадают ?
для клиента "нева...." артикула 1000-00М , фабрики "места " ВидаДанных "места" формата "0,53", типа фирмы "АКБ-Общий"......адрес "Санкт-Петербург" и обои составитель филиал максимальная дата 3/01/2015
это же результат выборки а не из чего выбирают (лист РД)
Изменено: leseal - 28.07.2015 17:44:55
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
 
Тишина..
а за деньги (перечисление на карту сбербанка)?
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
 
Перенести в платный раздел?
 
да
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
 
leseal, так а максимальная дата по таблице или в группе?
Учусь программировать :)
 
на момент работы макроса - текущая
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
 
leseal, последний, надеюсь, вопрос: поле "количество" увеличивается с увеличением даты? Т.е. идет типа накопительным итогом? :)
Учусь программировать :)
 
нет - поле количество вообще игнорируется на втором шаге (при выборке строк) и указывается только значение из этих строк когда оные определены. Т.е. по барабану число когда определяем номера строк, а когда их определили берем значение из них.
Что бы было понятнее это количество мест в магазинах которое занято конкретным типом продукции конкретного производителя (это зашито в артикуле и фабрике). Так как данные по магазинам собираются с разной периодичностью при выполнении этой задачи я смогу как смотреть хронологию изменений в конкретном магазине по выставке(дистрибуции)  и количеству мест в магазине , так и получить условный срез "на сейчас" который отобразит последнюю информацию по каждому магазину (вид данных меняется на вид данных с префиксом "_".
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
 
и если взялся отпиши расценки тут или в скайп (в профиле)
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
 
leseal, понятно. Нет, пока не взялся, просто задаю вопросы для общего понимания.
Учусь программировать :)
 
Что бы совсем понятно было это два запроса в ассess (второй пункт)
1запрос - выбирает данные с максимальной датой без учета количества

SELECT РД.Магазин, РД.Артикул, РД.Фабрика, РД.ВидДанных, РД.Формат, РД.ТипФирмы, РД.НП, РД.СФ, РД.ФО, РД.Адрес, РД.Обои, Last(РД.Дата) AS [Last-Дата], РД.Составитель, РД.филиал
FROM РД
GROUP BY РД.Магазин, РД.Артикул, РД.Фабрика, РД.ВидДанных, РД.Формат, РД.ТипФирмы, РД.НП, РД.СФ, РД.ФО, РД.Адрес, РД.Обои, РД.Составитель, РД.филиал;
второй запрос формирует нужную таблицу (в отличии от задания не добавляю префикс а меняю шрифт на верхний регистр что тоже приемлемо)
SELECT РД.Магазин, РД.Артикул, РД.Количество, РД.Фабрика, UCase$([РД].[ВидДанных]) AS ВидДанных, РД.Формат, РД.ТипФирмы, РД.НП, РД.СФ, РД.ФО, РД.Адрес, РД.Обои, РД.Дата, РД.Составитель, РД.филиал
FROM Запрос1 INNER JOIN РД ON (Запрос1.Артикул = РД.Артикул) AND (Запрос1.Магазин = РД.Магазин) AND (Запрос1.Фабрика = РД.Фабрика) AND (Запрос1.ВидДанных = РД.ВидДанных) AND (Запрос1.Формат = РД.Формат) AND (Запрос1.ТипФирмы = РД.ТипФирмы) AND (Запрос1.НП = РД.НП) AND (Запрос1.СФ = РД.СФ) AND (Запрос1.ФО = РД.ФО) AND (Запрос1.Адрес = РД.Адрес) AND (Запрос1.Обои = РД.Обои) AND (Запрос1.[Last-Дата] = РД.Дата) AND (Запрос1.Составитель = РД.Составитель) AND (Запрос1.филиал = РД.филиал);
Изменено: leseal - 29.07.2015 18:51:14
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
 
1. Операторы SELECT никуда ничего не добавляют. Речь идет о выборке.
2. Почему надо добавлять выборку в ту же таблицу? Может сделать рядом другую, которая содержить и "чистую" таблицу и ее компиляцию (UNION)?
3. Что мешает текст запросов Access подставить в excel (синтаксис почти совпадает, FROM только подпилить)?
4. Изложенные условия и данные в файле не совпадают. А именно:
Цитата
leseal написал:
сделать выборку из этой таблицы по следующему принципу : совпадают все значения кроме поля "количество
глагол "совпадают" подразумевает сравнение двух множеств/чисел. одно множество таблица, а второе где? если это та же таблица. то зачем сравнивать два одинаковых множества, понятно, что они совпадают, и самое непонятное - что является результатом сравнения - объединение, пересечение?
я вижу здесь простой DISTINCT по набору полей плюс условие.
5. Кстати, условие:
5.1
Цитата
leseal написал: получить условный срез "на сейчас"
срез - это DISTINCT плюс последняя дата для каждой записи (могут различаться, но должны быть меньше или равны дате сравнения) - еще называется "срез последних"
5.2
Цитата
Smiley написал:так а максимальная дата по таблице или в группе?
Цитата
leseal написал:на момент работы макроса - текущая
в таблице вообще может не оказаться записей с текущей датой и это уже не срез последних, это выборка на дату
5.3
Цитата
leseal написал: максимальное значение по полю "Дата"
это уже не срез последних, это подмножество этого среза на максимальную дату

так какой из 3-х вариантов нужен?
Изменено: TheBestOfTheBest - 29.07.2015 22:41:12
Неизлечимых болезней нет, есть неизлечимые люди.
 
тяжко... ))
наверное проще полностью объясню суть реализуемой задачи

менеджеры собирают информацию в форму данные из которой преобразуются в таблицу пример которой выложен.

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

но решил для себя  что мне нужен срез на сегодняшнюю дату. Как пример город Мухосранск у первого клиента  были  в 1, 2 и 3 месяце текущего года, у второго только в 1 у третьего в 1 и 2.
я решил что под "сегодняшним срезом" буду понимать последнюю имеющуюся информацию по конкретному магазину. Соответственно для первого магазина это информация с 3 месяца, для второго с 1 месяца , для третьего с 2месяца.

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

в итоге в сводной я смогу посмотреть информацию по количеству мест и выставке разных производителей на "сегодняшний день " и "в хронологии" .
 
не хочу использовать access так как схема будет совсем кривая - справочники из 1с в access, из access через квери в эксель, из экселя в access, там два запроса и в эксель )))

по той же причине не могу использовать sql так как обращение к базам 1с в формате скуля запрещено лицензионным соглашением.
а айтишники кроме программирования в 1с и настраивать компы с телефонами cisco ничего не умеют.

помогите а......

так как данные просматриваю только в формате сводных таблиц вариант с "давайте сформируем отдельную" не катит )) просто количество филиалов 9 а магазинов больше 9000 еще одна "табличка" смерти подобна
скайп mobile.leseal но доступен только в рабочее время или по договоренности
Изменено: leseal - 30.07.2015 08:14:00
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
 
Да, научиться выражать свои мысли не просто...
Решение такое: в excel берем исходную таблицу и делаем из нее новую, которая состоит из самой таблицы и среза последних (именно срез) с указанием даты этого среза и количества на эту дату. Добавлено поле ТипДанных для удобства отбора фильтром.
Что вы с этим будете делать я не понимаю, т.к. из описания непонятно где хранятся данные, где обрабатываются, зачем в описании Access?
В файле реализован алгоритм из файла в #3. Файл должен находиться в папке C:\1\, на таблице правой кнопкой-Обновить либо изменить дату в A1.
Неизлечимых болезней нет, есть неизлечимые люди.
 
Ошибка
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
 
У меня все работает.
Неизлечимых болезней нет, есть неизлечимые люди.
 
Решение есть, если с TheBestOfTheBest не договоритесь, могу скинуть своё как еще один вариант.
ЗЫ: прошу внимательно посмотреть свою таблицу, там есть, как минимум, лишние пробелы в названиях. Если использовать группировки в запросах, то могут быть неверные результаты.
Изменено: Smiley - 30.07.2015 11:00:41
Учусь программировать :)
 
общаемся с best
Изменено: leseal - 30.07.2015 11:01:02
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
 
Принято - Спасибо
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
 
Задача решена. Гонорар+бонус - Ок.
Неизлечимых болезней нет, есть неизлечимые люди.
 
Выложу тоже решение, может быть кому пригодится :)
Изменено: Smiley - 30.07.2015 11:51:38
Учусь программировать :)
Страницы: 1
Читают тему
Loading...