Перенос данных из внешних файлов, таких как Excel, в систему 1С 7.7 — это классическая задача по автоматизации рутинных операций. Когда объемы продаж растут (например, при торговле на маркетплейсах вроде eBay), ручной ввод документов становится невозможным. В данной статье мы подробно разберем, как написать обработку для программного создания документа Реализация, научимся правильно заполнять реквизиты шапки и табличной части, а также избежим типичных ошибок новичков, связанных с типизацией данных в «семерке».
Прежде чем приступать к написанию кода, нам необходимо выяснить точные программные идентификаторы реквизитов. В 1С 7.7 названия полей в экранной форме могут не совпадать с их именами в базе данных. Для этого выполним следующие действия:
Реализация (или РеализацияТоваров, в зависимости от вашей конфигурации).Именно эти идентификаторы мы будем использовать в коде. Например, если в конфигураторе поле называется Контрагент, то и в коде мы пишем Invoice.Контрагент. Если мы ошибемся хоть в одной букве, программа выдаст ошибку «Поле агрегатного объекта не обнаружено».
Рассмотрим процесс создания документа. Нам нужно не просто создать объект, но и организовать цикл по строкам файла Excel. Проанализируем общую структуру алгоритма:
// Создаем объект для работы с Excel
Попытка
Excel = СоздатьОбъект("Excel.Application");
Исключение
Сообщить("Excel не установлен на данном компьютере!");
Возврат;
КонецПопытки;
Книга = Excel.Workbooks.Open("C:\data\sales.xlsx");
Лист = Книга.Worksheets(1);
// Создаем объект Документ
Invoice = СоздатьОбъект("Документ.Реализация");
Обратите внимание, что метод СоздатьОбъект лишь подготавливает программную оболочку. Чтобы начать работу с конкретным новым документом, необходимо вызвать метод Новый(). Это очистит все поля и подготовит объект к записи в базу данных.
Одна из самых частых ошибок начинающих разработчиков в 1С 7.7 — попытка присвоить строковое значение (например, название фирмы) напрямую в реквизит, который имеет тип «Справочник». Проанализируем правильный подход. Мы не можем написать Invoice.Контрагент = "Ebay pirkumi", так как система ожидает ссылку на элемент справочника, а не текст.
Разберем, как правильно находить объекты в справочниках:
Invoice.Новый();
Invoice.ДатаДок = ТекущаяДата();
// Поиск контрагента
СпрКонтр = СоздатьОбъект("Справочник.Контрагенты");
Если СпрКонтр.НайтиПоНаименованию("Pirkumi EBAY", 0, 1) = 1 Тогда
Invoice.Контрагент = СпрКонтр.ТекущийЭлемент();
Иначе
Сообщить("Контрагент не найден!");
КонецЕсли;
// Поиск склада (Места хранения)
СпрСклад = СоздатьОбъект("Справочник.МестаХранения");
Если СпрСклад.НайтиПоНаименованию("Основной склад", 0, 1) = 1 Тогда
Invoice.Склад = СпрСклад.ТекущийЭлемент();
КонецЕсли;
Важный момент: метод НайтиПоНаименованию принимает три параметра. Второй параметр 0 означает поиск по всей длине строки, а третий 1 — поиск внутри иерархии (если справочник многоуровневый). После успешного поиска обязательно используйте ТекущийЭлемент() для получения ссылки.
Документ Реализация обычно содержит список товаров. Каждая строка в Excel должна превратиться в новую строку в табличной части 1С. Для этого мы используем цикл и метод НоваяСтрока(). Посмотрим на примере, как заполнять данные о товаре, количестве и цене:
СпрТовар = СоздатьОбъект("Справочник.Номенклатура");
// Предположим, данные в Excel начинаются со 2-й строки
Для НомерСтроки = 2 По 100 Цикл
ТоварНаименование = Лист.Cells(НомерСтроки, 1).Value; // Читаем из колонки 1
Если ПустаяСтрока(ТоварНаименование) = 1 Тогда
Прервать; // Выходим из цикла, если строки закончились
КонецЕсли;
Invoice.НоваяСтрока();
// Ищем товар в справочнике
Если СпрТовар.НайтиПоНаименованию(ТоварНаименование, 0, 1) = 1 Тогда
Invoice.Товар = СпрТовар.ТекущийЭлемент();
КонецЕсли;
Invoice.Количество = Лист.Cells(НомерСтроки, 2).Value;
Invoice.Цена = Лист.Cells(НомерСтроки, 3).Value;
// Автоматический расчет суммы строки, если в конфигурации прописаны формулы
// Если нет, считаем вручную:
Invoice.Сумма = Invoice.Количество * Invoice.Цена;
КонецЦикла;
Рассмотрим подробнее расчет налогов. В некоторых конфигурациях 1С 7.7 сумма НДС и общая сумма документа рассчитываются автоматически при записи, но часто это нужно делать программно. Например, если ставка налога составляет 21%, мы можем рассчитать её следующим образом: Invoice.НДС = Invoice.Сумма * 0.21.
В бухгалтерских конфигурациях 1С 7.7 крайне важно правильно указать счета учета. Реквизиты типа «Счет» заполняются с помощью специальной функции СчетПоКоду. Проанализируем пример заполнения счетов для реализации:
Важно: Всегда проверяйте, какой план счетов используется. В коде ниже используется обращение к основному плану счетов.
// Установка счетов учета
Invoice.СчетУчета = СчетПоКоду("21.10"); // Например, товары на складе
Invoice.СчетДоходов = СчетПоКоду("61.10"); // Выручка
Invoice.СчетРасчетов = СчетПоКоду("23.10"); // Расчеты с покупателями
// Работа с перечислениями (вид оплаты, тип налога и т.д.)
// Значение перечисления присваивается напрямую через точку
Invoice.ВидОплаты = Перечисление.ВидыОплаты.Безналичный;
После того как все реквизиты заполнены, документ необходимо сохранить в базе данных. Метод Записать() создает «черновик» документа. Если вы хотите, чтобы документ сразу отразился в учете (списал остатки, создал проводки), его нужно провести.
// Записываем документ
Попытка
Invoice.Записать();
Сообщить("Документ № " + Invoice.НомерДок + " успешно создан!");
// Проводим документ
Если Invoice.Провести() = 0 Тогда
Сообщить("Документ записан, но не проведен! Проверьте остатки.");
КонецЕсли;
Исключение
Сообщить("Ошибка при сохранении документа: " + ОписаниеОшибки());
КонецПопытки;
// Закрываем Excel
Книга.Close(0);
Excel.Quit();
Разберем несколько важных моментов, которые помогут сделать вашу обработку более надежной:
НайтиПоКоду(КодИзExcel). Это гораздо надежнее, чем поиск по названию.Курс. Его можно получить из справочника валют на дату документа: Курс = Валюта.Курс.Получить(Invoice.ДатаДок).Комментарий документа 1С. Перед созданием нового документа делайте проверку: не существует ли уже документ с таким комментарием.Invoice.УстановитьНовыйНомер("ПР-");.Таким образом, мы проанализировали полный цикл программного создания документа Реализация в среде 1С 7.7. Главный секрет успеха здесь заключается в четком соблюдении типов данных: справочники ищутся через СоздатьОбъект, счета — через СчетПоКоду, а перечисления — через глобальный контекст Перечисление. Соблюдая эти правила, вы сможете автоматизировать загрузку любых данных из Excel в кратчайшие сроки.