8.х Автоматическое заполнение табличной части документа

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем sergqwert, 7 май 2017.

  1. TopicStarter Overlay
    sergqwert
    Offline

    sergqwert

    Регистрация:
    27 ноя 2016
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    Как программным способом заполнить табличную часть документа данными из справочника "Сотрудники"(тип Ссылка)?
    В табличной части Работники Организации документа заполняются сотрудники, потом идут пустые значения, и снова сотрудники повторяются несколько раз. В списке сотрудников должно быть 4, но загружается 99990 строк.

    Код ниже:

    ВыбФайл = Новый Файл(ИмяФайла);
    Если НЕ ВыбФайл.Существует() Тогда
    Сообщить("Файл не существует!");
    Возврат;
    КонецЕсли;

    Попытка
    Excel = Новый COMОбъект("Excel.Application");
    Excel.WorkBooks.Open(ИмяФайла);
    // Состояние("Обработка файла Microsoft Excel...");
    ExcelЛист = Excel.Sheets(1);
    Исключение
    Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel.");
    Возврат;

    КонецПопытки;

    Фл = 1;
    НомСтр = 2;
    // создаем документ Начисление зарплаты работникам организаций
    НовДок = Документы.НачислениеЗарплатыРаботникамОрганизаций.СоздатьДокумент();
    НовДок.Дата = ТекущаяДата();
    НовДок.ПериодРегистрации = НачалоМесяца(ТекущаяДата());
    НовДок.Организация = Справочники.Организации.НайтиПоКоду("000000001");
    НовДок.ПодразделениеОрганизации = Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000001");
    НовДок.НормаДнейЗаМесяц = НормаДнейЗаМесяц;
    НовДок.НормаЧасовЗаМесяц = НормаЧасовЗаМесяц;
    НовДок.ПредварительныйРасчет = Ложь;

    Сообщить("Начата загрузка документа Начисление");
    Пока Фл = 1 Цикл

    нСотрудник = СокрЛП(Строка(ExcelЛист.Cells(НомСтр,8).Value));

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | СотрудникиОрганизаций.Ссылка КАК Ссылка
    |ИЗ
    | Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций";

    РезультатЗапроса = Запрос.Выполнить().Выгрузить();

    Для каждого Стр из РезультатЗапроса Цикл
    НоваяСтрока = НовДок.РаботникиОрганизации.Добавить();
    НоваяСтрока.Сотрудник = Стр.Ссылка;
    КонецЦикла;

    НоваяСтрока = НовДок.Начисления.Добавить();
    НоваяСтрока.Авторасчет = Истина;
    НоваяСтрока.Назначение = Справочники.СотрудникиОрганизаций.НайтиПоНаименованию(нСотрудник);
    Если СокрЛП(Строка(ExcelЛист.Cells(НомСтр,4).Value)) = "1" Тогда
    НоваяСтрока.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОкладПоДням
    ИначеЕсли СокрЛП(Строка(ExcelЛист.Cells(НомСтр,4).Value)) = "120" Тогда
    НоваяСтрока.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоНаименованию("Больничный за счет предприятия");
    КонецЕсли;
    НоваяСтрока.ДатаНачала = СокрЛП(Строка(ExcelЛист.Cells(НомСтр,2).Value));
    НоваяСтрока.ДатаОкончания = СокрЛП(Строка(ExcelЛист.Cells(НомСтр,3).Value));
    НоваяСтрока.БазовыйПериодНачало = СокрЛП(Строка(ExcelЛист.Cells(НомСтр,2).Value));
    НоваяСтрока.БазовыйПериодКонец = СокрЛП(Строка(ExcelЛист.Cells(НомСтр,3).Value));
    НоваяСтрока.Результат = СокрЛП(Строка(ExcelЛист.Cells(НомСтр,5).Value));
    НоваяСтрока.Размер = СокрЛП(Строка(ExcelЛист.Cells(НомСтр,5).Value));
    НоваяСтрока.ОтработаноДней = СокрЛП(Строка(ExcelЛист.Cells(НомСтр,6).Value));
    НоваяСтрока.ОтработаноЧасов = СокрЛП(Строка(ExcelЛист.Cells(НомСтр,7).Value));
    НоваяСтрока.НормаДнейЗаМесяц = СокрЛП(Строка(ExcelЛист.Cells(НомСтр,6).Value));
    НоваяСтрока.НормаЧасовЗаМесяц = СокрЛП(Строка(ExcelЛист.Cells(НомСтр,7).Value));
    НоваяСтрока.ОплаченоДнейЧасов = СокрЛП(Строка(ExcelЛист.Cells(НомСтр,6).Value));

    НоваяСтрока = НовДок.НДФЛ.Добавить();
    НоваяСтрока.НалоговыйПериод = НачалоМесяца(ТекущаяДата());
    НоваяСтрока.Авторасчет = Истина;
    НоваяСтрока.Сотрудник = Справочники.СотрудникиОрганизаций.НайтиПоНаименованию(СокрЛП(Строка(ExcelЛист.Cells(НомСтр,8).Value)));
    НоваяСтрока.ДоходНДФЛ = Справочники.ВидыДоходовНДФЛ.Код01;
    НоваяСтрока.ВидСтавки = Перечисления.ВидыСтавокНДФЛ.Основная;
    НоваяСтрока.УвеличеннаяСтавка = Перечисления.ВидыСтавокНДФЛ.Увеличенная;

    НомСтр = НомСтр+1;
    Если ПустаяСтрока(ExcelЛист.Cells(НомСтр,1).Value) тогда
    Фл = 0;
    НовДок.Записать();
    НовДок.ПолучитьФорму("ФормаДокумента").Открыть();
    Сообщить("Завершена загрузка документа Начисление");
    КонецЕсли;

    КонецЦикла;
    Excel.WorkBooks.Close();
    Excel = 0;
    КонецПроцедуры

    Вложения:

    • Архив.xls
      Размер файла:
      128,5 КБ
      Просмотров:
      0
  2. Программмист
    Offline

    Программмист Новичок в 1С

    Регистрация:
    18 янв 2017
    Сообщения:
    36
    Симпатии:
    4
    Баллы:
    4
    чета жесть какая то
    ФЛ=1
    Пока ФЛ=1 ЦИКЛ
    Если ПустаяСтрока(ExcelЛист.Cells(НомСтр,1).Value) тогда
    Фл = 0;

    Отладчиком пройдите и посмотрите почему фл у вас неравно 0 после ваших 4х строк , может не пустаястрока
    я канешн не спец но это воообще адекватно?)
    --- Объединение сообщений, 18 май 2017 ---
    Наставник подсказывает что есть какаято функция для подсчета количества строк , либо он пользуется ЗначениеЗаполнено()

Поделиться этой страницей