• Ласкаво просимо на Спільнота для обміну досвідом між користувачами програм УкрБланк, УкрСклад, УкрЗарплата.
 

SQL скрипт в SQL менеджере!

Автор crazyjonyster, Червень 25, 2015, 10:58:40

Попередня тема - Наступна тема

0 Користувачі і 2 Гостей дивляться цю тему.

crazyjonyster

Ребята, помогите кто может! Нужен простенький SQL скрипт который сделает следующие:

Во всех товарах от конкретного поставщика (ID поставщика 37) проставит галочку "Скрывать в прайсе" ( и что бы галочка проставиласть на все товары поставщика (ID 37)  на всех складах... Кто-то может помочь?

TheOK

Перед выполнением скрипта рекомендую сделать архив базы данных. Скрипт изменяет данные в справочнике товаров (устанавливает поле скрывать в прайсе для всех товаров поставщика id=37)


Попробуйте вот этот скрипт, должно помочь


update
   tovar_name set is_price_invisible = 1
where
   num in
   (
      SELECT
        tz.tovar_id
      FROM
         tovar_zal tz
      where
         tz.last_post_id = 37
   )
Работа в УкрСклад(особенности и советы): [url="//www.softbalance.com.ua/forum/index.php/topic,2362.0.html"]www.softbalance.com.ua/forum/index.php/topic,2362.0.html[/url]
Некоторые мои отчеты можно найти здесь: [url="http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html"]http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html[/url]

crazyjonyster

Спасибо огромное! скрипт работает! Но вот какая задача... Оказывается если принять товары от разных поставщиков на одного нового, а потом отменить/удалить приходную, то программа не возвращает отбатно предыдущего поставщика... Если честно, мне кажется это не совсем правильная логика... ( вдруг случайно не того тот товар попадет в накладную и потом его прийдется отдельно принимать на правильного поставщика)

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

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

Ну или совсем идеальный вариант (но я понимаю что это сложнее): все товары которые мне нужно убрать из прайса имеют в названии слова "Не актуален" может скрипт будет просто как фильтр находить товары которые в названии содержат это словосочетание и только в них проставлять эту галочку? Или посоветуйте как правильнее было бы все это сделать? Вариант вручную не интересен так, как таких товаров более тысячи.

TheOK

словосочетание "Не актуален" везде с большой буквы?
В какой части названия товара может быть это словосочетание (начало, конец, в любом месте названия товара)?
Работа в УкрСклад(особенности и советы): [url="//www.softbalance.com.ua/forum/index.php/topic,2362.0.html"]www.softbalance.com.ua/forum/index.php/topic,2362.0.html[/url]
Некоторые мои отчеты можно найти здесь: [url="http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html"]http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html[/url]

AVDcomp

Подскажите скрипт чтобы копейки были мельче в ценнике .....или вообще без копеек ценники распечатать.

crazyjonyster

Обычно написано " НЕ АКТУАЛЕН" ( иногда есть пробел перед НЕ, иногда нет) словосочетание всегда в начале названия товара. Прикрепил скрин для аонятности..

Цитата: TheOK від Червень 26, 2015, 20:21:24
словосочетание "Не актуален" везде с большой буквы?
В какой части названия товара может быть это словосочетание (начало, конец, в любом месте названия товара)?

crazyjonyster

Попробуйте отпредактировать печатную форму. Там можно выставить формат данных вам нужно поставить для цены формат %2.0f и будет выводить без копеек. Но это не совсем правильно... А что бы выводило копейки маленькими спрашивайте дальше. может кто подскажет.

Цитата: AVDcomp від Червень 29, 2015, 13:29:27
Подскажите скрипт чтобы копейки были мельче в ценнике .....или вообще без копеек ценники распечатать.

TheOK

Цитата: crazyjonyster від Червень 30, 2015, 10:30:03
Обычно написано " НЕ АКТУАЛЕН" ( иногда есть пробел перед НЕ, иногда нет) словосочетание всегда в начале названия товара. Прикрепил скрин для аонятности..

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

Скрипт устанавливает поле скрывать в прайсе для всех товаров, которые содержат текст "НЕ АКТУАЛЕН" в названии товара в любом месте (в любой позиции) наименования в любом регистре символов

Должен сработать вот этот скрипт, не проверял, но ошибок быть не должно


update
   tovar_name set is_price_invisible = 1
where
UPPER( name ) like '%НЕ АКТУАЛЕН%'
Работа в УкрСклад(особенности и советы): [url="//www.softbalance.com.ua/forum/index.php/topic,2362.0.html"]www.softbalance.com.ua/forum/index.php/topic,2362.0.html[/url]
Некоторые мои отчеты можно найти здесь: [url="http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html"]http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html[/url]

crazyjonyster

Спасибо! Работает. Подскажите еще где найти информацию ( справочник ) структуры базы. Ну например как узнать что галочка "Скрыть в прайсе" это "is_price_invisible", а Название товара это UPPER( name ).. ??

Цитата: TheOK від Червень 30, 2015, 20:40:59
Цитата: crazyjonyster від Червень 30, 2015, 10:30:03
Обычно написано " НЕ АКТУАЛЕН" ( иногда есть пробел перед НЕ, иногда нет) словосочетание всегда в начале названия товара. Прикрепил скрин для аонятности..

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

Скрипт устанавливает поле скрывать в прайсе для всех товаров, которые содержат текст "НЕ АКТУАЛЕН" в названии товара в любом месте (в любой позиции) наименования в любом регистре символов

Должен сработать вот этот скрипт, не проверял, но ошибок быть не должно


update
   tovar_name set is_price_invisible = 1
where
UPPER( name ) like '%НЕ АКТУАЛЕН%'


TheOK

Цитата: crazyjonyster від Липень 01, 2015, 14:31:21
Спасибо! Работает. Подскажите еще где найти информацию ( справочник ) структуры базы. Ну например как узнать что галочка "Скрыть в прайсе" это "is_price_invisible", а Название товара это UPPER( name ).. ??

Список таблиц и полей этих таблиц выкладывал вот здесь
http://www.softbalance.com.ua/forum/index.php/topic,1973.msg10950.html#msg10950
С 2011 года структура базы изменилась, но не координально
Проблема в том, что для тех, кто не работал с SQL достаточно сложно, как мне кажется, работать напрямую с базой
Расшифровки полей нет, но смотря на сами данные можно догадаться, что это за поля
Работа в УкрСклад(особенности и советы): [url="//www.softbalance.com.ua/forum/index.php/topic,2362.0.html"]www.softbalance.com.ua/forum/index.php/topic,2362.0.html[/url]
Некоторые мои отчеты можно найти здесь: [url="http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html"]http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html[/url]

semp

Думаю, что было на форуме, не могу найти
Может, кто знает даст ссылку или пропишите SQL менеджер:
По всему справочнику товаров нужно найти коды товаров по которым не было движения.

admin

Цитата: semp від Січень 06, 2016, 12:48:37
Думаю, что было на форуме, не могу найти
Может, кто знает даст ссылку или пропишите SQL менеджер:
По всему справочнику товаров нужно найти коды товаров по которым не было движения.

Вот по складам, только перепроверьте на пару позициях.

SELECT
  tn.kod,
  tn.name,
  sn.name AS sklad_name,
  tm.num
FROM
  tovar_name tn
    JOIN tovar_zal tz ON (tn.num = tz.tovar_id)
    JOIN sklad_names sn ON (tz.sklad_id = sn.num)
    LEFT JOIN tovar_move tm ON (tm.tovar_id = tn.num AND (tm.from_sklad_id = tz.sklad_id OR tm.to_sklad_id = tz.sklad_id))
WHERE
  tn.visible = 1 AND
  tm.num IS NULL

semp

Цитата: admin від Січень 06, 2016, 14:31:54
Вот по складам...

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

admin

Цитата: semp від Січень 06, 2016, 23:27:41
По складам вроде бы работает, а т.к. у нас три склада (три активные фирмы и у каждой свой склад) хотелось бы, чтобы находились только те, по которым не было вообще движения, т.е. те, по которым было движение по одному из складов уже не должны находиться.

Без учета складов:
SELECT
  tn.kod,
  tn.name,
  tm.num
FROM
  tovar_name tn
    LEFT JOIN tovar_move tm ON (tm.tovar_id = tn.num)
WHERE
  tn.visible = 1 AND
  tm.num IS NULL

semp

Все работает - большое спасибо,
Вот только возникла новая проблема:
несколько позиций были удалены - можно ли их как-то вытянуть из удаленных