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"Документ успешно создан и заполнен данными на дату: {целевая_дата_строкой}!")