Требуется вход Go login page
Выгрузка количества товара из базы
Вы не подписаны на тему
InjutkinAG
since: 2017-12-18 18:22:48
From: Краснодар
Messages: 74
IP address: ***.***.***.***
И так имеем MySQL базу где у нас хранится вся информация о товарах. Сделал скрипт выгрузки товаров в формате
003007;000006;000265;000497;100;12.88;150.00;MP2161 ШИМ-контроллер MPS SO-8 [AEBG]
С пятой колонкой (через запятую) есть сложности, это количество товара. к примеру был сделан приход по новой накладной 100 штук. Отображается правильно, но если распроведу накладную
то данные берутся из старой приходной накладной где приход был на 13 позиций , 12 расход и 1 резерв, и в итоге отображается в колонке "kolv" 13 штук. а по факту должно быть 0.
Вопрос где брать актуальный правильный остаток товара, и стоимость закупки и стоимость продажи? я нашел только в goods_base
#0001376
Alexandr
since: 2017-12-18 05:00:54
From: Россия
Messages: 495
IP address: ***.***.***.***
Остаток формируется на основании разницы: поступление (kolv) минус продажа (sale+rent).
Таблица goods_base
Правильный остаток товара по артикулу - нужно делать выборку по всем записям из goods_base по артикулу, и делать выше указанное вычитание.
Стоимость закупки - там же в таблице. Обратите внимание, что стоимость покупки одного и того же артикула может быть разной, всё согласно приходным накладным.
Стоимость продажи - это goods_out и detals_m
#0001377
InjutkinAG
since: 2017-12-18 18:22:48
From: Краснодар
Messages: 74
IP address: ***.***.***.***
принято ! спасибо. перем программисту чтоб правил скрипт выгрузки
#0001378
xomjak
since: 2017-12-19 04:18:17
From: Вараш
Messages: 75
IP address: ***.***.***.***
Столкнулся также с данной выборкой при написании telegram бота на Python, иногда сотрудникам нужно на выезде знать стоимость и количество товара на складе.

В своём варианте получилось только так выбрать актуальное количество и цену товара.
SELECT sum(kolv), max(price2), max(price3), sum(sale), ANY_VALUE(name), art FROM goods_base WHERE name LIKE "%имя товара, частичное совпадение%" and kolv-sale>0 OR art = "%либо код товара%" and kolv-sale>0 GROUP BY art

Количество формирую, столбец kolv - sale = количество остатка товара на складе.

Не судите строго выборка писалась для своих нужд впервые. Может кому будет интересно бот под telegram, написанный на Python (пока только поиск по складу) пишите.

Уважаемый Александр интересует как происходит выборка в окне расчёт зарплаты в поле "Итого к оплате" определённого сотрудника.
#0001379
InjutkinAG
since: 2017-12-18 18:22:48
From: Краснодар
Messages: 74
IP address: ***.***.***.***
В общем разобрался с данной ситуацией.
Правильный запрос для получения только остатков:
SELECT
SUM(GREATEST(kolv - IFNULL(sale, 0) - IFNULL(rent, 0) - IFNULL(reserv, 0), 0)) AS total_result
FROM goods_base
WHERE art LIKE '107';
В данном запросе не учитывается товар который находится под реализацией. Его количество будет указано как "0".
Это артикул товара !
#0001514
InjutkinAG
since: 2017-12-18 18:22:48
From: Краснодар
Messages: 74
IP address: ***.***.***.***
Если вдруг нужно кому будет пишите, сделал скрипт на сайт который подключается к базе данных и каждые пять минут обновляет данные о последних пяти ремонтах которые находятся в сервисе. посмотреть можно тут ссылка
Сайт пока демка, но скоро будет рабочий.На главной странице, справа сверху ссылка "Online табло ремонтов", если его не закрывать данные без перезагрузки обновляются раз в 5 минут (время настраивается), цветовое оформление полей сделал так же как и в программе у себя, все настраивается.
Еще один скрипт интрективная база ремонта:
Пользователь выбирает тип оборудования, модель, неисправность и система показывает что может быть неисправно и примерная стоимость, так же в информацию о решение проблемы подтягиваются в реальном времени данные из базы данных вашей программы , количество данных настраивается и показывается только те данные которые соответствуют оборудованию
Если это телевизоры то только данные по телевизорам покажутся.
ссылка
#0001515
InjutkinAG
since: 2017-12-18 18:22:48
From: Краснодар
Messages: 74
IP address: ***.***.***.***
может кто пнет в правильном направление. Количество высчитывается неправильно для некоторых товаров
Вот скрипт на пайтоне, ума не приложу в чем проблема

import pymysql
import csv
from ftplib import FTP
import os
import traceback
from datetime import datetime

# Настройки подключения к базе данных
host = '1sdf'
dbname = 'sdf'
user = 'sdf'
password = 'sdf'

# Настройки FTP (замените на свои)
ftp_host = 'ваш_ftp_сервер'
ftp_user = 'ваш_ftp_пользователь'
ftp_password = 'ваш_ftp_пароль'
ftp_folder = 'папка_на_сервере'

# Имя CSV-файла
csv_filename = "6666.csv"

def connect_to_db():
"""Подключение к базе данных MySQL."""
try:
connection = pymysql.connect(
host=host.split(':')[0],
port=int(host.split(':')[1]),
user=user,
password=password,
database=dbname,
# charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
print("Успешное подключение к базе данных.")
return connection
except Exception as e:
print("Ошибка подключения: {traceback.format_exc()}")
return None

def fetch_data(connection):
"""Выборка данных из базы данных."""
try:
with connection.cursor() as cursor:
sql = """
SELECT
art,
kolv,
IFNULL(sale, 0) AS sale,
IFNULL(rent, 0) AS rent,
IFNULL(reserv, 0) AS reserv,
price1,
price3,
name
FROM goods_base
WHERE art IS NOT NULL AND art != ''
"""
cursor.execute(sql)
result = cursor.fetchall()
print("Выбрано записей: {len(result)}")
return result
except Exception as e:
print("Ошибка выборки: {traceback.format_exc()}")
return None

def calculate_kolvo(row):
"""Вычисление kolvo на основе данных из строки."""
try:
# Приводим все значения к числам
kolv = int(row.get('kolv'))
sale = int(row.get('sale'))
rent = int(row.get('rent'))
reserv = int(row.get('reserv'))

# Вычисляем остаток
kolvo = max(kolv - (sale - rent - reserv))
return kolvo
except Exception as e:
print("Ошибка расчета kolvo: {traceback.format_exc()}")
return 0

def format_art(art):
"""Форматирование артикула в шестизначный формат."""
try:
return str(art).strip().zfill(6)
except:
return "000000"

def write_to_csv(data, filename):
"""Запись данных в CSV с разделением на колонки."""
try:
# Формируем заголовки
headers = [
'art (артикул товара)',
'kolvo (количество на складе)',
'price1 (цена закупки)',
'price3 (цена продажи)',
'name (наименование товара)'
]
# Преобразуем данные в формат для CSV
csv_data = []
for row in data:
csv_row = {
'art (артикул товара)': format_art(row.get('art')),
'kolvo (количество на складе)': row.get('kolvo', 0),
'price1 (цена закупки)': row.get('price1', ''),
'price3 (цена продажи)': row.get('price3', ''),
'name (наименование товара)': str(row.get('name', '')).strip()
}
csv_data.append(csv_row) # Убедитесь, что отступ здесь одинаковый!
# Записываем данные в CSV (кодировка cp1251)
with open(filename, 'w', newline='', encoding='cp1251') as f:
writer = csv.DictWriter(
f,
fieldnames=headers,
delimiter=';',
quoting=csv.QUOTE_MINIMAL # Кавычки только при необходимости
)
writer.writeheader()
writer.writerows(csv_data)
print("Файл {filename} создан.")
return True
except Exception as e:
print("Ошибка записи CSV: {traceback.format_exc()}")
return False

def upload_to_ftp(filename):
"""Загрузка файла на FTP."""
try:
with FTP(ftp_host) as ftp:
ftp.login(ftp_user, ftp_password)
ftp.cwd(ftp_folder)
with open(filename, 'rb') as f:
ftp.storbinary('STOR {filename}', f)
print("Файл {filename} загружен на FTP.")
return True
except Exception as e:
print("Ошибка FTP: {traceback.format_exc()}")
return False

def main():
connection = connect_to_db()
if not connection:
return

data = fetch_data(connection)
connection.close()

if not data:
print("Нет данных для выгрузки.")
return

try:
# Записываем в CSV
if write_to_csv(data, csv_filename):
# Загружаем на FTP
if upload_to_ftp(csv_filename):
os.remove(csv_filename)
print("Успешно завершено.")
else:
print("Файл сохранен локально.")
except Exception as e:
print("Фатальная ошибка: {traceback.format_exc()}")

if __name__ == "__main__":
main()
#0001516
InjutkinAG
since: 2017-12-18 18:22:48
From: Краснодар
Messages: 74
IP address: ***.***.***.***
Чтоб посчитать товар который на реализации находится используем
SELECT
SUM(GREATEST(rent - IFNULL(sale, 0) - IFNULL (reserv, 0), 0)) AS total_result
FROM goods_base
WHERE art LIKE '37';
'37'; - артикул товара для проверки
#0001517
InjutkinAG
since: 2017-12-18 18:22:48
From: Краснодар
Messages: 74
IP address: ***.***.***.***
Написал скрипт python 3.4 если что.
ссылка

Теперь остатки выгружаются корректно, но так и не сделал чтоб отображался товар который на реализации, но его не так мнго поттом разберусь
Стоимость выгружается только закупка и продажи. Берется максимальная
Разделитель CVS ";" кодировка CP1251
Если внести данные FTP еще и по фтп выгрузит файт куда вам нужно.
По умолчанию файл создается csv там же где и сам скрипт.
Кто может и хочет буду раз если внесете доработки, я тупой писал как мог и ни разу не программист

Выше запрос корректный, но вот как его вкорячить в скрипт пока не пойму.
#0001518
InjutkinAG
since: 2017-12-18 18:22:48
From: Краснодар
Messages: 74
IP address: ***.***.***.***
Если у вас сайт построен на CMS OpenCart и у вас там есть интернет магазин возможно так же вам интересно чтоб клиенты синхронизировались с вашей базой учета.
Простой скрипт на php заливается на хостинг и запускается по cron столько раз сколько вам нужно.
Переносит в бузу программы следующие данные ФИО клиента, номер телефона (номер приводит к формату +7(000)000-00-00
в опенкарт Имя и Отчество идет в одном столбце, скрипт делает разделение и правильно помещает в базу данных программы.
Если в базе программы есть уже клиент, то он не добавляется, а пропускается. совпадение ищется по номеру телефона.
Если есть ошибки создается лог в том же месте где и лежит скрипт.
Пример лога:
[2025-02-18 10:14:12]
Найдено записей в базе cp2545490_test: 887
Найдено совпадений в базе u094878754543_serv4 по номеру телефона, количество пропущенных записей: 483
Добавлено новых записей в базу u0941353_serv4: 404
----------------------------------------

Скрипт ссылка

--------------------------
Скрипт выгрузки остатков доделал, Остатки теперь выгружаются корректно.
Даже если у вас товар стоит на реализации, указывается верное количество
Скрипт обновил, теерь работает и на Python 3.4 и на 3,9 проверено.
#0001520
Войдите или зарегистрируйтесь чтобы ответить.
Вставить изображение