Загрузка данных


import win32com.client
from datetime import datetime, timedelta

# 1. Вычисляем нужные даты программно
сегодня = datetime.now()
вчера = сегодня - timedelta(days=1)
завтра = сегодня + timedelta(days=1)

# Форматируем дату для 1С 7.7 (формат строки должен быть "ДД.ММ.ГГГГ")
# Для теста выберем "завтра", но ты можешь переставить на "вчера"
целевая_дата_строкой = завтра.strftime("%d.%m.%Y") 

# 2. Подключаемся к движку 1С 7.7
v7 = win32com.client.Dispatch("V77.Application")
path_to_db = r"C:\PathToYour1CBase"  # Укажи реальный путь к своей тестовой базе
initialized = v7.Initialize(v7.RMTrade, f'/d"{path_to_db}" /n"" /p""', "NO_SPLASH_SHOW")

if not initialized:
    print("Ошибка подключения к 1С!")
    exit()

print("Успешно подключено. Создаем новый Табель...")

# 3. Инициализируем объекты 1С для поиска справочников
спр_сотрудники = v7.СоздатьОбъект("Справочник.Сотрудники")
спр_виды_времени = v7.СоздатьОбъект("Справочник.ВидыВремени")

# 4. Создаем НОВЫЙ документ «Табель»
новый_табель = v7.СоздатьОбъект("Документ.Табель")
новый_табель.Новый()  # Инициализируем новый документ

# Задаем дату самого документа (пусть будет сегодняшняя)
новый_табель.ДатаДок = сегодня.strftime("%d.%m.%Y")

# 5. Имитируем входящие данные (например, прочитанные из твоего файла)
данные_для_загрузки = [
    {"фио": "Иванов И.И.", "код_времени": "Я", "часы": 8},
    {"фио": "Петров П.П.", "код_времени": "Я", "часы": 7.5}
]

# 6. Заполняем табличную часть документа
for строка_данных in данные_для_загрузки:
    
    # Ищем сотрудника в базе 1С по ФИО
    if спр_сотрудники.НайтиПоНаименованию(строка_данных["фио"], 0, 1) == 0:
        print(f"Сотрудник {строка_данных['фио']} не найден в 1С! Пропускаем.")
        continue
        
    # Ищем код времени в базе 1С по текстовому коду
    if спр_виды_времени.НайтиПоКоду(строка_данных["код_времени"], 0) == 0:
        print(f"Вид времени с кодом {строка_данных['код_времени']} не найден! Пропускаем.")
        continue

    # Добавляем новую строку в табличную часть документа
    новый_табель.НоваяСтрока()
    
    # Записываем ссылки на найденные объекты справочников
    # .ТекущийЭлемент() возвращает саму ссылку на элемент базы данных
    новый_табель.Сотрудник = спр_сотрудники.ТекущийЭлемент()
    новый_табель.ВидыВремени = спр_виды_времени.ТекущийЭлемент()
    
    # Записываем дату дня (наша вычисленная дата: вчера или завтра)
    # В 1С 7.7 через COM дату нужно передавать именно строкой формата "ДД.ММ.ГГГГ"
    новый_табель.ДатаДень = целевая_дата_строкой
    
    # Записываем часы
    # В реквизите табличной части у нас Идентификатор «Часы»
    # Обрати внимание: если в конфигураторе идентификатор реквизита "Часы", 
    # то пишем новый_табель.Часы. Проверь по своей структуре!
    # Если на форме колонка называется "Часы", а реквизит по-другому, укажи имя реквизита.
    новый_табель.Часы = строка_данных["часы"]

# 7. Записываем и проводим документ в базе данных
# Метод Записать() просто сохраняет черновик
новый_табель.Записать() 

# Метод Провести() делает движения по базе (если нужно). 
# Если проведение пока не настроено, достаточно просто вызвать Записать()
# новый_табель.Провести()

print(f"Документ успешно создан и заполнен данными на дату: {целевая_дата_строкой}!")