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

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем Legion, 3 мар 2009.

  1. TopicStarter Overlay
    Legion
    Offline

    Legion Опытный в 1С

    Регистрация:
    3 мар 2009
    Сообщения:
    57
    Симпатии:
    1
    Баллы:
    29
    Доброго времени суток, помоги с такой проблемой: нужно заполнить табличную часть документа данными из Excel файла, но при этом не создавая документа, т.е. если пользователь нажимает ОК то тогда он создаётся.
    у меня получается сделать только вот так:
    В модуле объекта обработки:
    Код:
    Процедура Инициализировать (Объект, ИмяТабличнойЧасти, ТабличноеПолеОбъекта) Экспорт
    
    Форма =  ЭтотОбъект.ПолучитьФорму("Форма");
    Форма.ОткрытьМодально();
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/конецпроцедуры')">КонецПроцедуры	</span>  
    
    
    А в модуле формы:
    Код:
    Процедура ЗаполнениеТабличнойЧастиДокумента(Элемент)
    
    Если ПустаяСтрока(ИмяФайла) Тогда
    
    Предупреждение("Для запуска обработки необходимо предварительно выбрать файл Microsoft Excel.");
    Возврат;
    
    КонецЕсли;
    
    
    
    Попытка
    
    // Загрузка Microsoft Excel
    Состояние("Загрузка Microsoft Excel...");
    ExcelПриложение = Новый COMОбъект("Excel.Application");
    
    Исключение
    
    Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
    Возврат;
    
    КонецПопытки;
    
    Попытка
    
    // Открытие файла Microsoft Excel
    Состояние("Открытие файла Microsoft Excel...");
    ExcelФайл = ExcelПриложение.WorkBooks.Open(ИмяФайла);
    
    // Обработка файла Microsoft Excel
    Состояние("Обработка файла Microsoft Excel...");
    ExcelЛист = ExcelФайл.Sheets(1);
    
    //Создаём новый документ
    [b]НовыйДокумент = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();[/b]
    НовыйДокумент.Дата = ТекущаяДата();
    НовыйДокумент.ВидОперации = Перечисления.ВидыОперацийПоступлениеТоваровУслуг.Оборудование;
    НовыйДокумент.ВалютаДокумента =  Справочники.Валюты.НайтиПоКоду("643");
    НовыйДокумент.Склад = Справочники.Склады.НайтиПоКоду("000000001");
    НовыйДокумент.Организация = Справочники.Организации.НайтиПоКоду("000000001");
    
    
    Строка = 19;
    
    Пока  ExcelЛист.Cells(Строка, 2).Value <> Неопределено  <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/цикл')">Цикл			</span> 
    
    Состояние("Обработка файла Microsoft Excel : " + "строка " + Строка);
    //Проверка существования справочника	
    Если Не Справочники.Номенклатура.НайтиПоНаименованию(ExcelЛист.Cells(Строка, 2).Value).Пустая() Тогда
    //Заполнить табличную часть
    НоваяСтрока = НовыйДокумент.Оборудование.Добавить();
    НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(ExcelЛист.Cells(Строка, 2).Value);
    [b]НовыйДокумент.Записать();[/b]
    Иначе
    //Создаём элемент справочника в выбранную группу
    НовыйОбъект	= Справочники.Номенклатура.СоздатьЭлемент();
    НовыйОбъект.Родитель = ВыборГруппы;
    НовыйОбъект.Наименование = ExcelЛист.Cells(Строка, 2).Value;
    НовыйОбъект.НаименованиеПолное = ExcelЛист.Cells(Строка, 2).Value;
    НовыйОбъект.Услуга = Ложь;
    //В зависимости от того, что написано в 5м столбце определяем единицу измерения
    Если  ExcelЛист.Cells(Строка, 5).Value = "шт"  Тогда
    НовыйОбъект.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("796")
    Иначе НовыйОбъект.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("166");
    КонецЕсли;
    //НДС(пока выбор между 18 и 10)
    Если ExcelЛист.Cells(Строка, 14).Value = 18  Тогда
    НовыйОбъект.СтавкаНДС = Перечисления.СтавкиНДС.НДС18;
    Иначе
    Если ExcelЛист.Cells(Строка, 14).Value = 10  Тогда
    НовыйОбъект.СтавкаНДС = Перечисления.СтавкиНДС.НДС10;
    КонецЕсли;
    КонецЕсли;
    НовыйОбъект.Записать();
    
    // И теперь записываем этот элемент справочника в табличную часть
    НоваяСтрока = НовыйДокумент.Оборудование.Добавить();
    НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(ExcelЛист.Cells(Строка, 2).Value);
    [b]НовыйДокумент.Записать();[/b]
    
    КонецЕсли;	
    
    Строка = Строка+1;					
    КонецЦикла;
    
    
    Исключение
    
    Сообщить("Ошибка при открытии/чтении файла " + ИмяФайла + "." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
    
    КонецПопытки;
    
    ExcelПриложение.Quit();
    
    КонецПроцедуры
    
    
  2. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    Ну так просто открой форму документа, а не записывай его.
    И по поводу создания номенклатуры не очень корректно: базовую единицу создал, а саму единицу измерения в подчиненном справочнике?
    + можно поиски номенклатуры реже осуществлять
    Код:
    НоменклатураСсылка = Справочники.Номенклатура.НайтиПоНаименованию(ExcelЛист.Cells(Строка, 2).Value);
    
    Если НоменклатураСсылка.Пустая() Тогда
    // создаем номенклатуру и в конце
    // и чтобы все были счастливы можно сообщать о создании новых позиций номенклатуры
    НоменклатураСсылка = НовыйОбъект.Ссылка;
    КонецЕсли;
    
    // далее создание строки документа - номенклатура в любом случае есть
    НоваяСтрока = //...
    
    // И в конце открываем новый не записанный документ
    НовыйДокумент.ПолучитьФорму().Открыть();
    
    
    А если ты хочешь сделать обработку заполнения ТЧ так и работай с переменной Объект, которая у тебя в параметрах Инициализировать
  3. TopicStarter Overlay
    Legion
    Offline

    Legion Опытный в 1С

    Регистрация:
    3 мар 2009
    Сообщения:
    57
    Симпатии:
    1
    Баллы:
    29
    Теперь открывается ещё одна форма документа и она заполняется, а прежняя остаётся пустой.
    В том то и дело, что она (переменная Объект) в модуле объекта, а в модуле формы обработки она уже не определена :unsure:
  4. TopicStarter Overlay
    Legion
    Offline

    Legion Опытный в 1С

    Регистрация:
    3 мар 2009
    Сообщения:
    57
    Симпатии:
    1
    Баллы:
    29
    Всё, вопрос снят, всего то надо было реквизит создать :unsure:

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