может кто пнет в правильном направление. Количество высчитывается неправильно для некоторых товаров
Вот скрипт на пайтоне, ума не приложу в чем проблема
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