Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
03 дек 2024, 20:11

Создавать документы

Автор Gio, 11 ноя 2024, 13:15

0 Пользователей и 1 гость просматривают эту тему.

Gio

Привет всем, Я создал внешнюю обработку для импорта документов(ПоступлениеТоваровУслуг) через Excel. Все хорошо, но я хочу создавать документы построчно (в одном документе). и не так много документов.

Как я могу сделать это легко?

                впТекущийПользователь = глЗначениеПеременной("глТекущийПользователь");
    Doc = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();   
    Doc.ВидОперации  = Перечисления.ВидыОперацийПоступлениеТоваровУслуг.ПокупкаКомиссия;   
    Doc.Дата =  КонецДня(DateColNumValue) - 61 ;   
        Doc.Контрагент = Справочники.Контрагенты.НайтиПоКоду(ContrColNumValue);               
                Doc.ДоговорКонтрагента = Справочники.ДоговорыКонтрагентов.НайтиПоКоду(ContractColNumValue);
                Doc.ВалютаДокумента =   Справочники.Валюты.НайтиПоНаименованию(Doc.ДоговорКонтрагента.ВалютаВзаиморасчетов.Наименование);
    Валюта = ОМОбщегоНазначения.ПолучитьКурсВалюты(Doc.ВалютаДокумента, Doc.Дата );


                Doc.WS = false;   
    Doc.СпособЗачетаАвансов =  Перечисления.СпособыЗачетаАвансов.НеЗачитывать;     
    Doc.Организация = PrimaryOrgan;     
    Doc.СуммаДокумента = AmountColNumValue;       
    Doc.СчетУчетаРасчетовСКонтрагентом = ПланыСчетов.Хозрасчетный.НайтиПоКоду("3190.7");
    Doc.Ответственный =  впТекущийПользователь;
    Doc.Комментарий =  DescriptionColNumValue;
    Doc.УчитыватьНДС = истина;

//////////////////////////Табличная часть////////////////////////////////////

                 Doc.Услуги.Добавить();
                 НовыыйТабДолга = Doc.Услуги[0];     
НовыыйТабДолга.СчетЗатрат = ПланыСчетов.Хозрасчетный.НайтиПоКоду("1710.01");           
НовыыйТабДолга.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("000000000089");
НовыыйТабДолга.Содержание  =  Справочники.Номенклатура.НайтиПоКоду("000000000089");
НовыыйТабДолга.Количество =  1;   
         НовыыйТабДолга.Сумма =  AmountColNumValue;               
         НовыыйТабДолга.Цена =   AmountColNumValue;     
НовыыйТабДолга.СчетУчетаНДС = ПланыСчетов.Хозрасчетный.НайтиПоКоду("3340.01");
НовыыйТабДолга.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;                                     
НовыыйТабДолга.Субконто1 = Субконто2Value; // Справочники.РасходыБудущихПериодов.НайтиПоКоду(Субконто1Value.Код);
НовыыйТабДолга.Субконто2 = Справочники.Субконто.НайтиПоНаименованию(ПолеВвода1);   



Попытка
    Doc.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);

Сообщить(НСтр("ru='Документ ""'") + Строка(Doc.Ссылка) + НСтр("ru='"" оформлен удачно!'"));
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;



Счет = Счет + 1;

КонецЦикла;

КонецЕсли;

Excel.Quit();   


  Возврат Истина;
Иначе
Возврат Ложь;
    КонецЕсли;



Максим75

Gio, так тут кусок кода, всего не видно. виден конец цикла, а где начало?
видно что на каждой итерации цикла создаете новый документ, пишите его, а что и как должно быть пока не понятно.

Gio

Максим75, Вот полный код.

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ

Функция  CheckExcelValues()
   
    AllIsOk = Истина;
   
    ErrorMessage = "";   
   
    Если FileName = "" Тогда
        AllIsOk = Ложь;
    КонецЕсли;
   
    Если Не ЗначениеЗаполнено(ContractColNum) Тогда
        AllIsOk = Ложь;
    КонецЕсли;       
       
    Если Не ЗначениеЗаполнено(Субконто1ColNum) Тогда
        AllIsOk = Ложь;                                   
    КонецЕсли;
   
    Если Не ЗначениеЗаполнено(DateColNum) Тогда
        AllIsOk = Ложь;
    КонецЕсли;
   
    Если Не ЗначениеЗаполнено(ContrColNum) Тогда
        AllIsOk = Ложь;
    КонецЕсли;
   
    Если Не ЗначениеЗаполнено(AmountColNum) Тогда
        AllIsOk = Ложь;
    КонецЕсли;
   
    Если Не ЗначениеЗаполнено(DescriptionColNum) Тогда
        AllIsOk = Ложь;
    КонецЕсли;
   
    Если AllIsOk = Ложь Тогда
        Предупреждение(НСтр("ru='Заполните обязателные поля:'"));
    КонецЕсли;     
   
    Возврат AllIsOk;
       
КонецФункции

Функция LoadExcel()
   
    Если CheckExcelValues() Тогда
        Попытка
            Excel = Новый  COMОбъект("Excel.Application");
            стр = 1;
        Исключение
            Сообщить(НСтр("ru='Не удалось загрузить файл'"));
            стр = 0;
            Возврат Ложь;
        КонецПопытки;
       
        Попытка
            Excel.Workbooks.Open(FileName);
       
        Исключение
            стр = 0;
            Сообщить(ОписаниеОшибки());
            Excel.Quit();
            Возврат Ложь;
        КонецПопытки;
       
       
        Если стр = 1 Тогда
           
            PrimaryOrgan = глЗначениеПеременной("ОсновнаяОрганизация");           
            Счет = StartingRow;       
            Пока Excel.Sheets(Sheet).Cells(Счет, DateColNum).Value <> Неопределено Цикл                               
       
                // Дата
                Попытка
                    DateColNumValue = Дата(Excel.Sheets(Sheet).Cells(Счет,DateColNum).Value);
                    Если Не ЗначениеЗаполнено(DateColNumValue) Тогда
                        Сообщить(Строка(Счет) + НСтр("ru = '. Дата не заполнена ""'"), СтатусСообщения.Важное);
                        Счет = Счет + 1;
                        Продолжить;
                    КонецЕсли;
                Исключение
                    Сообщить(Строка(Счет) + НСтр("ru = '. Неверный формат указанной даты'"), СтатусСообщения.Важное);
                    Счет = Счет + 1;
                    Продолжить;
                КонецПопытки;           
                       
               
                //ПодразделенияОрганизаций
                ПодразделенияОрганизацийColNumValue = СокрЛП(СтрЗаменить(Строка(Excel.Sheets(Sheet).Cells(Счет, ПодразделенияОрганизацийColNum).Value),Символ(160),""));
               
                //ОсновныеСредства
                ОсновныеСредстваColNumValue = СокрЛП(СтрЗаменить(Строка(Excel.Sheets(Sheet).Cells(Счет, ОсновныеСредстваColNum).Value),Символ(160),""));

                                                   
            //  сумма полиса
                Попытка
                    PolisAmountColNumValue = Число(Excel.Sheets(Sheet).Cells(Счет,PolisAmountColNum).Value);
                    Если Не ЗначениеЗаполнено(PolisAmountColNumValue) Тогда
                        Сообщить(Строка(Счет) + НСтр("ru = '. Сумма полиса не заполнена ""'"), СтатусСообщения.Важное);
                        Счет = Счет + 1;
                        Продолжить;
                    КонецЕсли;
                Исключение
                    Сообщить(Строка(Счет) + НСтр("ru = '. Неверный формат указанной суммы '"), СтатусСообщения.Важное);
                    Счет = Счет + 1;
                    Продолжить;
                КонецПопытки;     
               
                //счет полиса
                    CreditColNumValue = СокрЛП(СтрЗаменить(Строка(Excel.Sheets(Sheet).Cells(Счет, CreditColNum).Value),Символ(160),""));
                   
                    Если Не ЗначениеЗаполнено(CreditColNumValue)  Тогда
                        Сообщить(Строка(Счет) + НСтр("ru = '. счет полиса ""'") + CreditColNumValue + НСтр("ru = '"" не найдена в базе'"), СтатусСообщения.Важное);
                        Счет = Счет + 1;
                        Продолжить;
                    КонецЕсли;                                     
               
                //// Контрагент
                ContrColNumValue = СокрЛП(СтрЗаменить(Строка(Excel.Sheets(Sheet).Cells(Счет, ContrColNum).Value),Символ(160),""));
                Если ЗначениеЗаполнено(ContrColNumValue) Тогда
                   
                    ContrValue  = Справочники.Контрагенты.НайтиПоКоду(ContrColNumValue,,,PrimaryOrgan);
                   
                    Если Не ЗначениеЗаполнено(ContrValue)  Тогда
                        Сообщить(Строка(Счет) + НСтр("ru = '.Контрагент ""'") + ContrValue + НСтр("ru = '"" не найдена в базе.'"), СтатусСообщения.Важное);
                        Счет = Счет + 1;
                        Продолжить;
                    КонецЕсли;
                   
                Иначе
                    Сообщить(Строка(Счет) + НСтр("ru = '. Не заполнено наименование Контрагент '"), СтатусСообщения.Важное);
                    Счет = Счет + 1;
                    Продолжить;
                КонецЕсли;
               
               
                      //// ДоговорыКонтрагентов
                ContractColNumValue = СокрЛП(СтрЗаменить(Строка(Excel.Sheets(Sheet).Cells(Счет, ContractColNum).Value),Символ(160),""));
                Если ЗначениеЗаполнено(ContractColNumValue) Тогда
                   
                    ContractValue  = Справочники.ДоговорыКонтрагентов.НайтиПоКоду(ContractColNumValue);
                   
                    Если Не ЗначениеЗаполнено(ContractValue)  Тогда
                        Сообщить(Строка(Счет) + НСтр("ru = '.ДоговорыКонтрагентов ""'") + ContractValue + НСтр("ru = '"" не найдена в базе'"), СтатусСообщения.Важное);
                        Счет = Счет + 1;
                        Продолжить;
                    КонецЕсли;
                   
                Иначе
                    Сообщить(Строка(Счет) + НСтр("ru = '. Не заполнено ДоговорыКонтрагентов'"), СтатусСообщения.Важное);
                    Счет = Счет + 1;
                    Продолжить;
                КонецЕсли;   
                             
                             
                                                       //////страховой полис  ////
            Субконто1ColNumValue = СокрЛП(СтрЗаменить(Строка(Excel.Sheets(Sheet).Cells(Счет, Субконто1ColNum).Value),Символ(160),""));
                Если ЗначениеЗаполнено(Субконто1ColNumValue) Тогда                           
                             
        Субконто1Value  = Справочники.РасходыБудущихПериодов.НайтиПоНаименованию(Субконто1ColNumValue); 
       
                                              /////// новый полис ///////////////
                   
                        спр = Справочники.РасходыБудущихПериодов.СоздатьЭлемент();
                        спр.Наименование = Субконто1ColNumValue ;
                        спр.СпособПризнанияРасходов = Перечисления.СпособыПризнанияРасходов.ПоКалендарнымДням;
                        спр.Сумма =  PolisAmountColNumValue;   // сумма полиса   
                        спр.ДатаНачалаСписания = ПолеВвода2; //Дата начала учета
                        спр.ДатаОкончанияСписания  = ПолеВвода3; //Дата окончания списания
                        спр.СчетБУ = ПланыСчетов.Хозрасчетный.НайтиПоКоду(CreditColNumValue);
                        спр.СубконтоБУ1 = Справочники.ОсновныеСредства.НайтиПоКоду(ОсновныеСредстваColNumValue);     //ОсновныеСредства
                        спр.СубконтоБУ2 = Справочники.ПодразделенияОрганизаций.НайтиПоНаименованию(ПодразделенияОрганизацийColNumValue);  //ПодразделенияОрганизаций
                        спр.СубконтоБУ3 = Справочники.СтатьиЗатрат.НайтиПоКоду("000000134");                  //СтатьиЗатрат   
                       
                          спр.Записать();
                                                                           
                    Сообщить(НСтр("ru='полис ""'") + Строка(спр.Наименование ) + НСтр("ru='"" оформлен удачно!'"));
                                 
                    Субконто2Value  = Справочники.РасходыБудущихПериодов.НайтиПоКоду(спр.Код);
                                                                                                                                             
                   
                    Если Не ЗначениеЗаполнено(Субконто1Value)  Тогда
                        Сообщить(Строка(Счет) + НСтр("ru = '. полис ""'") + Субконто1Value + НСтр("ru = '"" не найдена в базе.'"), СтатусСообщения.Важное);
                        Счет = Счет + 1;
                                         
                        Продолжить;
                    КонецЕсли;
                   
                Иначе
                    Сообщить(Строка(Счет) + НСтр("ru = '. полис не заполнена'"), СтатусСообщения.Важное);
                    Счет = Счет + 1;
                    Продолжить;
                КонецЕсли;     
               
                    // Сумма документа
                Попытка
                    AmountColNumValue = Число(Excel.Sheets(Sheet).Cells(Счет,AmountColNum).Value);
                    Если Не ЗначениеЗаполнено(AmountColNumValue) Тогда
                        Сообщить(Строка(Счет) + НСтр("ru = '. Сумма не заполнена  ""'"), СтатусСообщения.Важное);
                        Счет = Счет + 1;
                        Продолжить;
                    КонецЕсли;
                Исключение
                    Сообщить(Строка(Счет) + НСтр("ru = '. Неверный формат указанной суммы '"), СтатусСообщения.Важное);
                    Счет = Счет + 1;
                    Продолжить;
                КонецПопытки;
           
            //    Курс документа
                Если ЗначениеЗаполнено(КурсColNum) Тогда
                    КурсColNumValue = СокрЛП(СтрЗаменить(Строка(Excel.Sheets(Sheet).Cells(Счет, КурсColNum).Value),Символ(160),""));               
                КонецЕсли;               
       
               
             //Комментарий         
                DescriptionColNumValue = СокрЛП(СтрЗаменить(Строка(Excel.Sheets(Sheet).Cells(Счет, DescriptionColNum).Value),Символ(160),""));

               
           
               
            /////////////////     Формирование документов ////////////////////////////////////////////
                                                                     
                впТекущийПользователь = глЗначениеПеременной("глТекущийПользователь");
                Doc = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();                       
                Doc.ВидОперации  = Перечисления.ВидыОперацийПоступлениеТоваровУслуг.ПокупкаКомиссия;               
                Doc.Дата =  КонецДня(DateColNumValue) - 61 ;               
                Doc.Контрагент = Справочники.Контрагенты.НайтиПоКоду(ContrColNumValue);               
                Doc.ДоговорКонтрагента = Справочники.ДоговорыКонтрагентов.НайтиПоКоду(ContractColNumValue);
                Doc.ВалютаДокумента =   Справочники.Валюты.НайтиПоНаименованию(Doc.ДоговорКонтрагента.ВалютаВзаиморасчетов.Наименование);
                Валюта = ОМОбщегоНазначения.ПолучитьКурсВалюты(Doc.ВалютаДокумента, Doc.Дата );         
                Doc.WS = false;                               
                Doc.СпособЗачетаАвансов =  Перечисления.СпособыЗачетаАвансов.НеЗачитывать;                 
                Doc.Организация = PrimaryOrgan;                 
                Doc.СуммаДокумента = AmountColNumValue;                           
                Doc.СчетУчетаРасчетовСКонтрагентом = ПланыСчетов.Хозрасчетный.НайтиПоКоду("3190.7");
                Doc.Ответственный =  впТекущийПользователь;
                Doc.Комментарий =  DescriptionColNumValue;
                Doc.УчитыватьНДС = Истина;
               
               
                   /////////////////////////////// Табличная часть //////////////////////////////////////////
                                         
                 Doc.Услуги.Добавить();
                 НовыыйТабДолга = Doc.Услуги[0];                 
                 НовыыйТабДолга.СчетЗатрат = ПланыСчетов.Хозрасчетный.НайтиПоКоду("1710.01");                           
                 НовыыйТабДолга.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("000000000089");
                 НовыыйТабДолга.Содержание  =  Справочники.Номенклатура.НайтиПоКоду("000000000089");
                 НовыыйТабДолга.Количество =  1; //1;           
                 НовыыйТабДолга.Сумма =  AmountColNumValue;                   
                 НовыыйТабДолга.Цена =   AmountColNumValue;     
                 НовыыйТабДолга.СчетУчетаНДС = ПланыСчетов.Хозрасчетный.НайтиПоКоду("3340.01");
                 НовыыйТабДолга.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;                                                     
                 НовыыйТабДолга.Субконто1 = Субконто2Value; // Справочники.РасходыБудущихПериодов.НайтиПоКоду(Субконто1Value.Код);
                 НовыыйТабДолга.Субконто2 = Справочники.Субконто.НайтиПоНаименованию(ПолеВвода1);         //Субконто                 
                 
                                       
                Попытка
                        Doc.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);
                   
                    Сообщить(НСтр("ru='Документ ""'") + Строка(Doc.Ссылка) + НСтр("ru='"" оформлен удачно!'"));
                Исключение
                    Сообщить(ОписаниеОшибки());
                КонецПопытки;
                   
               
                           
                Счет = Счет + 1;
                 
            КонецЦикла;
           
        КонецЕсли;
       
        Excel.Quit();   
   

     Возврат Истина;
    Иначе
        Возврат Ложь;
    КонецЕсли;
 

КонецФункции

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ
                       

Процедура ПриОткрытии()     
    Sheet = 1;
    StartingRow = 3;
    DateColNum = 1;
    ContrColNum = 2;
    ContractColNum = 3;
    AmountColNum = 4;
    КурсColNum =  5;
    DescriptionColNum = 6;
    Субконто1ColNum = 7;
    ПодразделенияОрганизацийColNum =  8;
    PolisAmountColNum = 9;
    ОсновныеСредстваColNum =  10;
    CreditColNum = 11;

КонецПроцедуры

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ - ДЕЙСТВИЯ КОМАНДНЫХ ПАНЕЛЕЙ ФОРМЫ

Процедура КнопкаВыполнитьНажатие(Кнопка)
   
    LoadExcel();
   
КонецПроцедуры

Процедура ФайлНачалоВыбора(Элемент, СтандартнаяОбработка)
   
    Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
    ДиалогОткрытияФайла.Заголовок = НСтр("en='Select file';ru='Выберите файл'");
    ДиалогОткрытияФайла.Фильтр = "файл Excel (*.xls; *.xlsx)|*.xls; *.xlsx";
    FileName = "";
    Если ДиалогОткрытияФайла.Выбрать() Тогда
        FileName =  ДиалогОткрытияФайла.ПолноеИмяФайла;
    КонецЕсли;
   
КонецПроцедуры

LexaK

Gio, Проверьте в Екселе значения полей Контрагент и ContractColNum
Если они разные = то все в один документ собирать НЕ НАДО!
Для каждого различного варианта Контрагент - Договор ДОЖЕН быть создан свой, отдельный документ!
если помогло нажмите: Спасибо!

Gio

LexaK,

В моем случае контрагент, договор и сумма документа совпадают.Только ПодразделенияОрганизаций(субконто) будут разные который находится в табличное часте.
Вот почему я хочу записать их в один документ.

LexaK

Gio, тогда так попробуйте (ваш код с минимальными допилками)
Функция LoadExcel()
   
    Если CheckExcelValues() Тогда
        Попытка
            Excel = Новый  COMОбъект("Excel.Application");
            стр = 1;
        Исключение
            Сообщить(НСтр("ru='Не удалось загрузить файл'"));
            стр = 0;
            Возврат Ложь;
        КонецПопытки;
       
        Попытка
            Excel.Workbooks.Open(FileName);
       
        Исключение
            стр = 0;
            Сообщить(ОписаниеОшибки());
            Excel.Quit();
            Возврат Ложь;
        КонецПопытки;
       
       
        Если стр = 1 Тогда
           
            PrimaryOrgan = глЗначениеПеременной("ОсновнаяОрганизация");           
            Счет = StartingRow;       

Doc = Неопределено; //Добаввить

            Пока Excel.Sheets(Sheet).Cells(Счет, DateColNum).Value <> Неопределено Цикл                               
       
                // Дата
                Попытка
                    DateColNumValue = Дата(Excel.Sheets(Sheet).Cells(Счет,DateColNum).Value);
                    Если Не ЗначениеЗаполнено(DateColNumValue) Тогда
                        Сообщить(Строка(Счет) + НСтр("ru = '. Дата не заполнена ""'"), СтатусСообщения.Важное);
                        Счет = Счет + 1;
                        Продолжить;
                    КонецЕсли;
                Исключение
                    Сообщить(Строка(Счет) + НСтр("ru = '. Неверный формат указанной даты'"), СтатусСообщения.Важное);
                    Счет = Счет + 1;
                    Продолжить;
                КонецПопытки;           
                       
               
                //ПодразделенияОрганизаций
                ПодразделенияОрганизацийColNumValue = СокрЛП(СтрЗаменить(Строка(Excel.Sheets(Sheet).Cells(Счет, ПодразделенияОрганизацийColNum).Value),Символ(160),""));
               
                //ОсновныеСредства
                ОсновныеСредстваColNumValue = СокрЛП(СтрЗаменить(Строка(Excel.Sheets(Sheet).Cells(Счет, ОсновныеСредстваColNum).Value),Символ(160),""));

                                                   
            //  сумма полиса
                Попытка
                    PolisAmountColNumValue = Число(Excel.Sheets(Sheet).Cells(Счет,PolisAmountColNum).Value);
                    Если Не ЗначениеЗаполнено(PolisAmountColNumValue) Тогда
                        Сообщить(Строка(Счет) + НСтр("ru = '. Сумма полиса не заполнена ""'"), СтатусСообщения.Важное);
                        Счет = Счет + 1;
                        Продолжить;
                    КонецЕсли;
                Исключение
                    Сообщить(Строка(Счет) + НСтр("ru = '. Неверный формат указанной суммы '"), СтатусСообщения.Важное);
                    Счет = Счет + 1;
                    Продолжить;
                КонецПопытки;     
               
                //счет полиса
                    CreditColNumValue = СокрЛП(СтрЗаменить(Строка(Excel.Sheets(Sheet).Cells(Счет, CreditColNum).Value),Символ(160),""));
                   
                    Если Не ЗначениеЗаполнено(CreditColNumValue)  Тогда
                        Сообщить(Строка(Счет) + НСтр("ru = '. счет полиса ""'") + CreditColNumValue + НСтр("ru = '"" не найдена в базе'"), СтатусСообщения.Важное);
                        Счет = Счет + 1;
                        Продолжить;
                    КонецЕсли;                                     
               
                //// Контрагент
                ContrColNumValue = СокрЛП(СтрЗаменить(Строка(Excel.Sheets(Sheet).Cells(Счет, ContrColNum).Value),Символ(160),""));
                Если ЗначениеЗаполнено(ContrColNumValue) Тогда
                   
                    ContrValue  = Справочники.Контрагенты.НайтиПоКоду(ContrColNumValue,,,PrimaryOrgan);
                   
                    Если Не ЗначениеЗаполнено(ContrValue)  Тогда
                        Сообщить(Строка(Счет) + НСтр("ru = '.Контрагент ""'") + ContrValue + НСтр("ru = '"" не найдена в базе.'"), СтатусСообщения.Важное);
                        Счет = Счет + 1;
                        Продолжить;
                    КонецЕсли;
                   
                Иначе
                    Сообщить(Строка(Счет) + НСтр("ru = '. Не заполнено наименование Контрагент '"), СтатусСообщения.Важное);
                    Счет = Счет + 1;
                    Продолжить;
                КонецЕсли;
               
               
                      //// ДоговорыКонтрагентов
                ContractColNumValue = СокрЛП(СтрЗаменить(Строка(Excel.Sheets(Sheet).Cells(Счет, ContractColNum).Value),Символ(160),""));
                Если ЗначениеЗаполнено(ContractColNumValue) Тогда
                   
                    ContractValue  = Справочники.ДоговорыКонтрагентов.НайтиПоКоду(ContractColNumValue);
                   
                    Если Не ЗначениеЗаполнено(ContractValue)  Тогда
                        Сообщить(Строка(Счет) + НСтр("ru = '.ДоговорыКонтрагентов ""'") + ContractValue + НСтр("ru = '"" не найдена в базе'"), СтатусСообщения.Важное);
                        Счет = Счет + 1;
                        Продолжить;
                    КонецЕсли;
                   
                Иначе
                    Сообщить(Строка(Счет) + НСтр("ru = '. Не заполнено ДоговорыКонтрагентов'"), СтатусСообщения.Важное);
                    Счет = Счет + 1;
                    Продолжить;
                КонецЕсли;   
                             
                             
                                                       //////страховой полис  ////
            Субконто1ColNumValue = СокрЛП(СтрЗаменить(Строка(Excel.Sheets(Sheet).Cells(Счет, Субконто1ColNum).Value),Символ(160),""));
                Если ЗначениеЗаполнено(Субконто1ColNumValue) Тогда                           
                             
        Субконто1Value  = Справочники.РасходыБудущихПериодов.НайтиПоНаименованию(Субконто1ColNumValue); 
       
                                              /////// новый полис ///////////////
                   
                        спр = Справочники.РасходыБудущихПериодов.СоздатьЭлемент();
                        спр.Наименование = Субконто1ColNumValue ;
                        спр.СпособПризнанияРасходов = Перечисления.СпособыПризнанияРасходов.ПоКалендарнымДням;
                        спр.Сумма =  PolisAmountColNumValue;   // сумма полиса   
                        спр.ДатаНачалаСписания = ПолеВвода2; //Дата начала учета
                        спр.ДатаОкончанияСписания  = ПолеВвода3; //Дата окончания списания
                        спр.СчетБУ = ПланыСчетов.Хозрасчетный.НайтиПоКоду(CreditColNumValue);
                        спр.СубконтоБУ1 = Справочники.ОсновныеСредства.НайтиПоКоду(ОсновныеСредстваColNumValue);     //ОсновныеСредства
                        спр.СубконтоБУ2 = Справочники.ПодразделенияОрганизаций.НайтиПоНаименованию(ПодразделенияОрганизацийColNumValue);  //ПодразделенияОрганизаций
                        спр.СубконтоБУ3 = Справочники.СтатьиЗатрат.НайтиПоКоду("000000134");                  //СтатьиЗатрат   
                       
                          спр.Записать();
                                                                           
                    Сообщить(НСтр("ru='полис ""'") + Строка(спр.Наименование ) + НСтр("ru='"" оформлен удачно!'"));
                                 
                    Субконто2Value  = Справочники.РасходыБудущихПериодов.НайтиПоКоду(спр.Код);
                                                                                                                                             
                   
                    Если Не ЗначениеЗаполнено(Субконто1Value)  Тогда
                        Сообщить(Строка(Счет) + НСтр("ru = '. полис ""'") + Субконто1Value + НСтр("ru = '"" не найдена в базе.'"), СтатусСообщения.Важное);
                        Счет = Счет + 1;
                                         
                        Продолжить;
                    КонецЕсли;
                   
                Иначе
                    Сообщить(Строка(Счет) + НСтр("ru = '. полис не заполнена'"), СтатусСообщения.Важное);
                    Счет = Счет + 1;
                    Продолжить;
                КонецЕсли;     
               
                    // Сумма документа
                Попытка
                    AmountColNumValue = Число(Excel.Sheets(Sheet).Cells(Счет,AmountColNum).Value);
                    Если Не ЗначениеЗаполнено(AmountColNumValue) Тогда
                        Сообщить(Строка(Счет) + НСтр("ru = '. Сумма не заполнена  ""'"), СтатусСообщения.Важное);
                        Счет = Счет + 1;
                        Продолжить;
                    КонецЕсли;
                Исключение
                    Сообщить(Строка(Счет) + НСтр("ru = '. Неверный формат указанной суммы '"), СтатусСообщения.Важное);
                    Счет = Счет + 1;
                    Продолжить;
                КонецПопытки;
           
            //    Курс документа
                Если ЗначениеЗаполнено(КурсColNum) Тогда
                    КурсColNumValue = СокрЛП(СтрЗаменить(Строка(Excel.Sheets(Sheet).Cells(Счет, КурсColNum).Value),Символ(160),""));               
                КонецЕсли;               
       
               
             //Комментарий         
                DescriptionColNumValue = СокрЛП(СтрЗаменить(Строка(Excel.Sheets(Sheet).Cells(Счет, DescriptionColNum).Value),Символ(160),""));

               
           
               
            /////////////////     Формирование документов ////////////////////////////////////////////
Если Doc = Неопределено Тогда                                                                     
                впТекущийПользователь = глЗначениеПеременной("глТекущийПользователь");
                Doc = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();                       
                Doc.ВидОперации  = Перечисления.ВидыОперацийПоступлениеТоваровУслуг.ПокупкаКомиссия;               
                Doc.Дата =  КонецДня(DateColNumValue) - 61 ;               
                Doc.Контрагент = Справочники.Контрагенты.НайтиПоКоду(ContrColNumValue);               
                Doc.ДоговорКонтрагента = Справочники.ДоговорыКонтрагентов.НайтиПоКоду(ContractColNumValue);
                Doc.ВалютаДокумента =   Справочники.Валюты.НайтиПоНаименованию(Doc.ДоговорКонтрагента.ВалютаВзаиморасчетов.Наименование);
                Валюта = ОМОбщегоНазначения.ПолучитьКурсВалюты(Doc.ВалютаДокумента, Doc.Дата );         
                Doc.WS = false;                               
                Doc.СпособЗачетаАвансов =  Перечисления.СпособыЗачетаАвансов.НеЗачитывать;                 
                Doc.Организация = PrimaryOrgan;                 
                Doc.СуммаДокумента = AmountColNumValue;                           
                Doc.СчетУчетаРасчетовСКонтрагентом = ПланыСчетов.Хозрасчетный.НайтиПоКоду("3190.7");
                Doc.Ответственный =  впТекущийПользователь;
                Doc.Комментарий =  DescriptionColNumValue;
                Doc.УчитыватьНДС = Истина;
Иначе 
                Doc.СуммаДокумента = Doc.СуммаДокумента  + AmountColNumValue;                           
КонецЕсли;
               
                   /////////////////////////////// Табличная часть //////////////////////////////////////////
                                         
                 
                 НовыыйТабДолга = Doc.Услуги.Добавить(); //Doc.Услуги[0];                 

                 НовыыйТабДолга.СчетЗатрат = ПланыСчетов.Хозрасчетный.НайтиПоКоду("1710.01");                           
                 НовыыйТабДолга.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("000000000089");
                 НовыыйТабДолга.Содержание  =  Справочники.Номенклатура.НайтиПоКоду("000000000089");
                 НовыыйТабДолга.Количество =  1; //1;           
                 НовыыйТабДолга.Сумма =  AmountColNumValue;                   
                 НовыыйТабДолга.Цена =   AmountColNumValue;     
                 НовыыйТабДолга.СчетУчетаНДС = ПланыСчетов.Хозрасчетный.НайтиПоКоду("3340.01");
                 НовыыйТабДолга.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;                                                     
                 НовыыйТабДолга.Субконто1 = Субконто2Value; // Справочники.РасходыБудущихПериодов.НайтиПоКоду(Субконто1Value.Код);
                 НовыыйТабДолга.Субконто2 = Справочники.Субконто.НайтиПоНаименованию(ПолеВвода1);         //Субконто                 
                 
                                       
//Попытка
//        Doc.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);
//   
//    Сообщить(НСтр("ru='Документ ""'") + Строка(Doc.Ссылка) + НСтр("ru='"" оформлен удачно!'"));
//Исключение
//    Сообщить(ОписаниеОшибки());
//КонецПопытки;
                   
               
                           
                Счет = Счет + 1;
                 
            КонецЦикла;

//Одна запись после цикла
Если Doc <> Неопределено Тогда                                                                     
                Попытка
                     Doc.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);
                   
                    Сообщить(НСтр("ru='Документ ""'") + Строка(Doc.Ссылка) + НСтр("ru='"" оформлен удачно!'"));
                Исключение
                    Сообщить(ОписаниеОшибки());
                КонецПопытки;

КонецЕсли;

        КонецЕсли;
       
        Excel.Quit();   
   

     Возврат Истина;
    Иначе
        Возврат Ложь;
    КонецЕсли;
 

КонецФункции
если помогло нажмите: Спасибо!

Gio

LexaK, Я попробовал и Из 3 строк, указанных для тестирования в Excel, было создано 3 полис(в в справочниках), но в документах была создана только 1 (последняя запись).





Gio

LexaK,

В форме обработки, в табличное счастье нет никаких реквизиты. может это была причина?


Максим75

Gio, смотрите, причина скорее всего вот здесь:
Вы вначале ищете субконто
Субконто1Value  = Справочники.РасходыБудущихПериодов.НайтиПоНаименованию(Субконто1ColNumValue);

потом создаете новый элемент в справочнике, причем даже не проверяете, есть ли по этому субконто элемент в справочнике (может же уже он есть)
а потом проверка идет
Если Не ЗначениеЗаполнено(Субконто1Value)  Тогда
                        Сообщить(Строка(Счет) + НСтр("ru = '. полис ""'") + Субконто1Value + НСтр("ru = '"" не найдена в базе.'"), СтатусСообщения.Важное);
                        Счет = Счет + 1;
                                         
                        Продолжить;
                    КонецЕсли;

и скорее всего нет значения Субконто1Value (оно то нигде не определяется после поиска) и у Вас не доходит до создания документа и заполнения табличной части.

Gio

Максим75,

Я хочу новую элемент в справочнике в каждом документе, (несмотря  на что есть ли по этому субконто элемент в справочнике)

для тестирования я отменил Субконто1Value, но результат тот же. (в документах была создана только 1, последняя запись из Excel)

//                                                       //////страховой полис  ////
//            Субконто1ColNumValue = СокрЛП(СтрЗаменить(Строка(Excel.Sheets(Sheet).Cells(Счет, Субконто1ColNum).Value),Символ(160),""));
//                Если ЗначениеЗаполнено(Субконто1ColNumValue) Тогда                           
//                             
//        Субконто1Value  = Справочники.РасходыБудущихПериодов.НайтиПоНаименованию(Субконто1ColNumValue); 
//       
//                                              /////// новый полис ///////////////
//                   
//                        спр = Справочники.РасходыБудущихПериодов.СоздатьЭлемент();
//                        спр.Наименование = Субконто1ColNumValue ;
//                        спр.СпособПризнанияРасходов = Перечисления.СпособыПризнанияРасходов.ПоКалендарнымДням;
//                        спр.Сумма =  PolisAmountColNumValue;   // сумма полиса   
//                        спр.ДатаНачалаСписания = ПолеВвода2; //Дата начала учета
//                        спр.ДатаОкончанияСписания  = ПолеВвода3; //Дата окончания списания
//                        спр.СчетБУ = ПланыСчетов.Хозрасчетный.НайтиПоКоду(CreditColNumValue);
//                        спр.СубконтоБУ1 = Справочники.ОсновныеСредства.НайтиПоКоду(ОсновныеСредстваColNumValue);     //ОсновныеСредства
//                        спр.СубконтоБУ2 = Справочники.ПодразделенияОрганизаций.НайтиПоНаименованию(ПодразделенияОрганизацийColNumValue);  //ПодразделенияОрганизаций
//                        спр.СубконтоБУ3 = Справочники.СтатьиЗатрат.НайтиПоКоду("000000134");                  //СтатьиЗатрат   
//                       
//                          спр.Записать();
//                                                                           
//                    Сообщить(НСтр("ru='полис ""'") + Строка(спр.Наименование ) + НСтр("ru='"" оформлен удачно!'"));
//                                 
//                    Субконто2Value  = Справочники.РасходыБудущихПериодов.НайтиПоКоду(спр.Код);
//                                                                                                                                             
//                   
//                    Если Не ЗначениеЗаполнено(Субконто1Value)  Тогда
//                        Сообщить(Строка(Счет) + НСтр("ru = '. полис ""'") + Субконто1Value + НСтр("ru = '"" не найдена в базе.'"), СтатусСообщения.Важное);
//                        Счет = Счет + 1;
//                                         
//                        Продолжить;
//                    КонецЕсли;
//                   
//                Иначе
//                    Сообщить(Строка(Счет) + НСтр("ru = '. полис не заполнена'"), СтатусСообщения.Важное);
//                    Счет = Счет + 1;
//                    Продолжить;
//                КонецЕсли; 

НовыыйТабДолга.Субконто1 = ""; //Субконто2Value; // Справочники.РасходыБудущихПериодов.НайтиПоКоду(Субконто1Value.Код);

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск