Как программно создать документ «Реализация» в 1С 7.7 и загрузить данные из Excel

Программист 1С v7.7 Бухгалтерский учет Торговля и дистрибуция
← На главную

Перенос данных из внешних файлов, таких как Excel, в систему 1С 7.7 — это классическая задача по автоматизации рутинных операций. Когда объемы продаж растут (например, при торговле на маркетплейсах вроде eBay), ручной ввод документов становится невозможным. В данной статье мы подробно разберем, как написать обработку для программного создания документа Реализация, научимся правильно заполнять реквизиты шапки и табличной части, а также избежим типичных ошибок новичков, связанных с типизацией данных в «семерке».

Шаг 1. Изучение структуры документа в Конфигураторе

Прежде чем приступать к написанию кода, нам необходимо выяснить точные программные идентификаторы реквизитов. В 1С 7.7 названия полей в экранной форме могут не совпадать с их именами в базе данных. Для этого выполним следующие действия:

  1. Запустим 1С в режиме Конфигуратор.
  2. В дереве метаданных откроем ветку Документы.
  3. Найдем документ Реализация (или РеализацияТоваров, в зависимости от вашей конфигурации).
  4. Раскроем список Реквизиты шапки и Реквизиты табличной части.

Именно эти идентификаторы мы будем использовать в коде. Например, если в конфигураторе поле называется Контрагент, то и в коде мы пишем Invoice.Контрагент. Если мы ошибемся хоть в одной букве, программа выдаст ошибку «Поле агрегатного объекта не обнаружено».

Шаг 2. Подключение к Excel и инициализация документа

Рассмотрим процесс создания документа. Нам нужно не просто создать объект, но и организовать цикл по строкам файла Excel. Проанализируем общую структуру алгоритма:


// Создаем объект для работы с Excel
Попытка
    Excel = СоздатьОбъект("Excel.Application");
Исключение
    Сообщить("Excel не установлен на данном компьютере!");
    Возврат;
КонецПопытки;

Книга = Excel.Workbooks.Open("C:\data\sales.xlsx");
Лист = Книга.Worksheets(1);

// Создаем объект Документ
Invoice = СоздатьОбъект("Документ.Реализация");

Обратите внимание, что метод СоздатьОбъект лишь подготавливает программную оболочку. Чтобы начать работу с конкретным новым документом, необходимо вызвать метод Новый(). Это очистит все поля и подготовит объект к записи в базу данных.

Шаг 3. Заполнение шапки документа и работа со ссылочными типами

Одна из самых частых ошибок начинающих разработчиков в 1С 7.7 — попытка присвоить строковое значение (например, название фирмы) напрямую в реквизит, который имеет тип «Справочник». Проанализируем правильный подход. Мы не можем написать Invoice.Контрагент = "Ebay pirkumi", так как система ожидает ссылку на элемент справочника, а не текст.

Разберем, как правильно находить объекты в справочниках:


Invoice.Новый();
Invoice.ДатаДок = ТекущаяДата();

// Поиск контрагента
СпрКонтр = СоздатьОбъект("Справочник.Контрагенты");
Если СпрКонтр.НайтиПоНаименованию("Pirkumi EBAY", 0, 1) = 1 Тогда
    Invoice.Контрагент = СпрКонтр.ТекущийЭлемент();
Иначе
    Сообщить("Контрагент не найден!");
КонецЕсли;

// Поиск склада (Места хранения)
СпрСклад = СоздатьОбъект("Справочник.МестаХранения");
Если СпрСклад.НайтиПоНаименованию("Основной склад", 0, 1) = 1 Тогда
    Invoice.Склад = СпрСклад.ТекущийЭлемент();
КонецЕсли;

Важный момент: метод НайтиПоНаименованию принимает три параметра. Второй параметр 0 означает поиск по всей длине строки, а третий 1 — поиск внутри иерархии (если справочник многоуровневый). После успешного поиска обязательно используйте ТекущийЭлемент() для получения ссылки.

Шаг 4. Работа с табличной частью документа

Документ Реализация обычно содержит список товаров. Каждая строка в 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.

Шаг 5. Работа со счетами учета и перечислениями

В бухгалтерских конфигурациях 1С 7.7 крайне важно правильно указать счета учета. Реквизиты типа «Счет» заполняются с помощью специальной функции СчетПоКоду. Проанализируем пример заполнения счетов для реализации:

Важно: Всегда проверяйте, какой план счетов используется. В коде ниже используется обращение к основному плану счетов.


// Установка счетов учета
Invoice.СчетУчета = СчетПоКоду("21.10"); // Например, товары на складе
Invoice.СчетДоходов = СчетПоКоду("61.10"); // Выручка
Invoice.СчетРасчетов = СчетПоКоду("23.10"); // Расчеты с покупателями

// Работа с перечислениями (вид оплаты, тип налога и т.д.)
// Значение перечисления присваивается напрямую через точку
Invoice.ВидОплаты = Перечисление.ВидыОплаты.Безналичный;

Шаг 6. Сохранение и проведение документа

После того как все реквизиты заполнены, документ необходимо сохранить в базе данных. Метод Записать() создает «черновик» документа. Если вы хотите, чтобы документ сразу отразился в учете (списал остатки, создал проводки), его нужно провести.


// Записываем документ
Попытка
    Invoice.Записать();
    Сообщить("Документ № " + Invoice.НомерДок + " успешно создан!");
    
    // Проводим документ
    Если Invoice.Провести() = 0 Тогда
        Сообщить("Документ записан, но не проведен! Проверьте остатки.");
    КонецЕсли;
Исключение
    Сообщить("Ошибка при сохранении документа: " + ОписаниеОшибки());
КонецПопытки;

// Закрываем Excel
Книга.Close(0);
Excel.Quit();

Дополнительные советы для эффективной разработки

Разберем несколько важных моментов, которые помогут сделать вашу обработку более надежной:

Таким образом, мы проанализировали полный цикл программного создания документа Реализация в среде 1С 7.7. Главный секрет успеха здесь заключается в четком соблюдении типов данных: справочники ищутся через СоздатьОбъект, счета — через СчетПоКоду, а перечисления — через глобальный контекст Перечисление. Соблюдая эти правила, вы сможете автоматизировать загрузку любых данных из Excel в кратчайшие сроки.

← На главную