Имя: Пароль:
1C
 
Обработка загрузки документов приходной накладной в БП
,
0 Олеся999
 
07.04.15
07:01
http://www.fayloobmennik.net/4764333

http://lvkr.ru/f/KbnZds/640.jpg

Подскажите пожалуйста может кто-нибудь делал?
Нужно поставить флажки в поле (Выбранные документы)
Их может быть несколько.
И по кнопочке "ЭкспортироватьБП",  создать и загрузить  данные выбранных документов в БП (Документы.ПоступлениеТоваровУслуг)

код :



&НаКлиенте
Функция ПодключитьсяК1С()
    // создается объект COM-соединение
    Соединитель = Новый COMObject("V83.COMConnector");
    Попытка
        v8 = Соединитель.Connect("srvr = ""1C""; ref = ""Производство""; usr = ""Админ""; pwd = ""4466""");  
    Исключение
        Предупреждение("Не удалось подключиться к складу!",5);
        Возврат Неопределено;
    КонецПопытки;
    Возврат v8;
КонецФункции

&НаКлиенте
Процедура ПолучитьДанные(Команда)
    
    Перем COM;
    Если НЕ ЗначениеЗаполнено(НачПериода) Тогда
        Предупреждение("Заполните начало периода", 3);
        ТекущийЭлемент = Элементы.НачПериода;
        Возврат;
    КонецЕсли;
    Если НЕ ЗначениеЗаполнено(КонПериода) Тогда
        Предупреждение("Заполните окончание периода", 3);
        ТекущийЭлемент = Элементы.КонПериода;
        Возврат;
    КонецЕсли;
    
    Если COM = Неопределено Тогда
        COM = ПодключитьсяК1С();
        Если COM = Неопределено Тогда
            Возврат;
        КонецЕсли;
    КонецЕсли;
    
    ДанныеОбмена.Очистить();
    тзДокумент.Очистить();
    ЗапросCOM = COM.NewObject("Запрос");
    ЗапросCOM.Текст = "ВЫБРАТЬ
    |    ПриходнаяНакладная.Номер КАК Номер,
    |    ПриходнаяНакладная.Дата КАК Дата,
    |    ПриходнаяНакладная.Контрагент.Наименование КАК Контрагент,
    |    ПриходнаяНакладная.Контрагент.ИНН КАК ИНН,
    |    ПриходнаяНакладная.ИтоговаяСумма,
    |    ПриходнаяНакладная.Фирма.Наименование КАК Фирма,
    |    ПриходнаяНакладная.ИнфНакладной,
    |    ПриходнаяНакладная.ДатаНакладной,
    |    ПриходнаяНакладная.ИнфСчета,
    |    ПриходнаяНакладная.ДатаСчета
    |ИЗ
    |    Документ.ПриходнаяНакладная КАК ПриходнаяНакладная
    |ГДЕ
    |    ПриходнаяНакладная.Дата МЕЖДУ &НачДата И &КонДата";
    ЗапросCOM.УстановитьПараметр("НачДата", НачалоДня(НачПериода));
    ЗапросCOM.УстановитьПараметр("КонДата", КонецДня(КонПериода));
    Рез = ЗапросCOM.Выполнить();
    Выборка = Рез.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        НС = ДанныеОбмена.Добавить();
        ЗаполнитьЗначенияСвойств(НС, Выборка);
    КонецЦикла;
    
    // Загрузим товары из табличной части
    ЗапросCOM.Текст = "ВЫБРАТЬ
    |    ПриходнаяНакладнаяТаблЧасть.Ссылка.Номер КАК Номер,
    |    ПриходнаяНакладнаяТаблЧасть.Номенклатура.Наименование КАК Номенклатура,
    |    ПриходнаяНакладнаяТаблЧасть.Номенклатура.Код КАК Код,
    |    ПриходнаяНакладнаяТаблЧасть.Количество,
    |    ПриходнаяНакладнаяТаблЧасть.Цена,
    |    ПриходнаяНакладнаяТаблЧасть.Артикул
    |ИЗ
    |    Документ.ПриходнаяНакладная.ТаблЧасть КАК ПриходнаяНакладнаяТаблЧасть
    |ГДЕ
    |    ПриходнаяНакладнаяТаблЧасть.Ссылка.Дата МЕЖДУ &НачДата И &КонДата";
    Рез = ЗапросCOM.Выполнить();
    Выборка = Рез.Выбрать();
    Пока Выборка.Следующий() Цикл
        НС = тзДокумент.Добавить();
        ЗаполнитьЗначенияСвойств(НС, Выборка);
    КонецЦикла;
    COM = Неопределено;
    
КонецПроцедуры

&НаКлиенте
// Будем показывать данные ТЧ только текущего документа
Процедура ДанныеОбменаПриАктивизацииСтроки(Элемент)
    Перем COM;    
    
    ТД = Элементы.ДанныеОбмена.ТекущиеДанные;
    Если ТД = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    ОтборСтрок = Новый Структура;
    ОтборСтрок.Вставить("Номер", ТД.Номер);
    Элементы.тзДокумент.ОтборСтрок = Новый ФиксированнаяСтруктура(ОтборСтрок);
    
КонецПроцедуры

&НаСервере
Процедура ЭкспортироватьБПНаСервере()
//Ошибки    = Неопределено;
    КэшД    = Документы.ПоступлениеТоваровУслуг.ПолучитьЗагруженныеДокументы(Организация, НачПериода, КонецДня(КонПериода), "РеализацияТоваровУслуг", "ИНН");
//    СчетУчетаТч        = ПланыСчетов.Хозрасчетный.НайтиПоКоду("43");
//    СчетУчетаНДСПоРеализации = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.03");
//    ФлагОшибокСозданияДок = Ложь;
//    ФлагБезНДС = (Найти(НРег(Организация.Наименование), "техноком") > 0);

//    Сообщение = Новый СообщениеПользователю;
     ДокСсылка = КэшД.Получить(ДанныеОбмена.Стр.Номер);
    Для каждого Стр Из ДанныеОбмена Цикл
        Если НЕ Стр.ВыбрДокументов Тогда
            Продолжить;
        КонецЕсли;
        //Если Стр.Сумма = 0 Тогда
        //    ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки,    "", "Нулевая сумма документа " + Стр.Номер + " " + Стр.Наименование);
        //    Продолжить;
        //КонецЕсли;
        //ДокСсылка = КэшД.Получить(СокрЛП(Стр.ИНН));
        //Если ДокСсылка <> Неопределено Тогда
        //    Если ДокСсылка.ПометкаУдаления Тогда
        //        НДок = ДокСсылка.ПолучитьОбъект();
        //        Попытка
        //            НДок.УстановитьПометкуУдаления(Ложь);
        //        Исключение
        //            ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки,    "", "Не удалось снять пометку удаления " + Стр.Номер + " " + Стр.Наименование);
        //            Продолжить;
        //        КонецПопытки;
        //    КонецЕсли;
        //КонецЕсли;
        
        Если ДокСсылка = Неопределено Тогда
            НДок = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
        Иначе
            НДок = ДокСсылка.ПолучитьОбъект();
            НДок.Товары.Очистить();
            НДок.Услуги.Очистить();
        КонецЕсли;
        НДок.Организация                    = стр.Фирма;
        //НДок.Дата                            = Стр.Дата + 3600 * 18; // продаем в 18-00
        НДок.Номер                            = Стр.Номер;
        //НДок.ВидОперации                    = Перечисления.ВидыОперацийРеализацияТоваров.Услуги;
        НДок.Контрагент                        = Стр.Контрагент.ИНН;
        НДок.ДоговорКонтрагента             = Стр.Договор;
        //НДок.Комментарий                    = "Загружено из Биллинга";
        НДок.КратностьВзаиморасчетов         = 1;
        НДок.КурсВзаиморасчетов                = 1;
        //НДок.СпособЗачетаАвансов             = Перечисления.СпособыЗачетаАвансов.Автоматически;
        //НДок.Склад                            = Склад;
        НДок.УдалитьУчитыватьНДС            = Истина;
        //НДок.СчетУчетаРасчетовПоАвансам        = ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.02");
        //НДок.СчетУчетаРасчетовСКонтрагентом = ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.01");
        //НДок.СчетУчетаРасчетовПоТаре        = ПланыСчетов.Хозрасчетный.НайтиПоКоду("76.05");
        //НДок.Ответственный                    = ПараметрыСеанса.ТекущийПользователь;
        НДок.СуммаДокумента                    = Стр.Сумма;
        НДок.СуммаВключаетНДС                = Ложь;
        //НДок.ВалютаДокумента                = ВалютаДок;
        //========================================================================================
        НДок.СуммаВключаетНДС                = Ложь;
        НДок.НомерВходящегоДокумента        = Стр.ИнфНакладной;
        НДок.ДатаВходящегоДокумента            = Стр.ДатаНакладной;

        //ОтветственныеЛицаБП.УстановитьОтветственныхЛиц(НДок);
        
        
        //// Добавим услугу
        //НС = НДок.Услуги.Добавить();
        //НС.Номенклатура        = УслугаБиллинг;
        //НС.Содержание        = "Биллинг";
        //НС.Количество        = 1;
        //НС.Цена                = Стр.Сумма;
        //НС.Сумма            = Стр.Сумма;
        //НС.СтавкаНДС        = Перечисления.СтавкиНДС.БезНДС;
        //НС.СчетУчетаНДСПоРеализации    = СчетУчетаНДСПоРеализации;
        //НС.СчетДоходов        = СчетДоходовТч;
        //НС.СчетРасходов        = СчетРасходов;
        //НС.Субконто            = СубконтоБиллинг;
        
        // Проверки и запись
        Если НДок.СуммаДокумента <> (НДок.Товары.Итог("Сумма") + НДок.Услуги.Итог("Сумма")) Тогда
            //ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки,    "", "Не совпала сумма документа " + Стр.Номер + " " + НДок.СуммаДокумента + " - " + (НДок.Товары.Итог("Сумма") + НДок.Услуги.Итог("Сумма")));
        КонецЕсли;
        
        Попытка
            НДок.Записать();
            Стр.Флаг = Ложь;
        Исключение
            //Сообщение.Текст = "НЕ ЗАПИСАЛИ ДОКУМЕНТ " + НДок.Номер + " " + НДок.Дата + " " + НДок.Контрагент  + " " + ОписаниеОшибки();
            //Сообщение.Сообщить();
            ФлагОшибокСозданияДок = Истина;
            Стр.Флаг = Истина;
        КонецПопытки;
        Если ФлагОшибокСозданияДок Тогда
            Продолжить;
        КонецЕсли;
        // Проводим
        Попытка
            НДок.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
        Исключение
            //Сообщение.Текст = "НЕ ПРОВЕЛИ " + НДок.Номер + " " + НДок.Дата;
            //Сообщение.Сообщить();
        КонецПопытки;
        
        // Создадим с/ф для плательщиков НДС
        //  Настя, так то да, но мы вообще по биллингу счетов-фактур не выписываем!
        //СоздатьСчетФактураВыданный(НДок.Ссылка, Ошибки);
        
    КонецЦикла;
    
    //ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки);

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

&НаКлиенте
Процедура ЭкспортироватьБП(Команда)
    ЭкспортироватьБПНаСервере();
КонецПроцедуры


//========================================================================================================
//Передача из Приходной Склады в БП ПоступлениеТоваровУслуг
//========================================================================================================

&НаКлиенте
Процедура СоединениеСклад(Команда)
    
    ТекстовыйДокумент = Новый ТекстовыйДокумент;
    ТекстовыйДокумент.Прочитать(КаталогВременныхФайлов() + "ДанныеОбмена.txt");
    ТекстОшибки = ЗаполнитьДокументПоДанныемОбмена(ТекстовыйДокумент.ПолучитьТекст());
    Если НЕ ПустаяСтрока(ТекстОшибки) Тогда
        СП = Новый СообщениеПользователю;
        СП.Текст = ТекстОшибки;
        СП.Сообщить();
    КонецЕсли;

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


&НаСервере
Функция ЗаполнитьДокументПоДанныемОбмена(ДанныеОбменаСтр)
1 Любопытная
 
07.04.15
07:14
В нике Олеся, а в комментариях Настя...
2 Олеся999
 
07.04.15
07:20
(1) ?
3 Любопытная
 
07.04.15
07:21
(2) что не получается-то?
4 Олеся999
 
07.04.15
07:23
(3) Не получается создать документ в БП Документы.ПоступлениеТоваровУслуг
5 ДенисЧ
 
07.04.15
07:30
(4) А что именно-то не получается?
Или надо применять http://moiinstrumenty.ru/wp-content/uploads/2015/02/instrymentu.jpg и http://www.remont-bampera.com/images/payalnik3.jpg ?
6 Любопытная
 
07.04.15
07:30
А отладчик что говорит?
7 Любопытная
 
07.04.15
07:34
Вы там пустой документ записываете, у которого только шапка заполнена, да? Или я чего-то не понимаю.
Нахрена закомментированный код хранить? На память?
8 Олеся999
 
07.04.15
07:43
(7) Да бывает пользуюсь ....
Ну сперва нужно по флажку создать документы, потом в эти документы записать их содержимое ...
я вот код накидала ... и что то мне подсказывает что полную ерунду написала..

И сразу ошибка КэшД    = <<?>>ПолучитьЗагруженныеДокументы(Организация, НачПериода, КонецДня(КонПериода), "РеализацияТоваровУслуг", "ИНН"); (Проверка: Сервер)




&НаСервере
Процедура ЭкспортироватьБПНаСервере()
//Ошибки    = Неопределено;
    КэшД    = ПолучитьЗагруженныеДокументы(Организация, НачПериода, КонецДня(КонПериода), "РеализацияТоваровУслуг", "ИНН");
//    Сообщение = Новый СообщениеПользователю;
     ДокСсылка = КэшД.Получить(ДанныеОбмена.Стр.Номер);
    Для каждого Стр Из ДанныеОбмена Цикл
        Если НЕ Стр.ВыбрДокументов Тогда
            Продолжить;
        КонецЕсли;
            
        Если ДокСсылка = Неопределено Тогда
            НДок = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
        Иначе
            НДок = ДокСсылка.ПолучитьОбъект();
            НДок.Товары.Очистить();
            НДок.Услуги.Очистить();
        КонецЕсли;
        НДок.Организация                    = стр.Фирма;
        //НДок.Дата                            = Стр.Дата + 3600 * 18; // продаем в 18-00
        НДок.Номер                            = Стр.Номер;
        //НДок.ВидОперации                    = Перечисления.ВидыОперацийРеализацияТоваров.Услуги;
        НДок.Контрагент                        = Стр.Контрагент.ИНН;
        НДок.ДоговорКонтрагента             = Стр.Договор;
        //НДок.Комментарий                    = "Загружено из Биллинга";
        НДок.КратностьВзаиморасчетов         = 1;
        НДок.КурсВзаиморасчетов                = 1;
        //НДок.СпособЗачетаАвансов             = Перечисления.СпособыЗачетаАвансов.Автоматически;
        //НДок.Склад                            = Склад;
        НДок.УдалитьУчитыватьНДС            = Истина;
                НДок.СуммаДокумента                    = Стр.Сумма;
        НДок.СуммаВключаетНДС                = Ложь;
        //НДок.ВалютаДокумента                = ВалютаДок;
        //========================================================================================
        НДок.СуммаВключаетНДС                = Ложь;
        НДок.НомерВходящегоДокумента        = Стр.ИнфНакладной;
        НДок.ДатаВходящегоДокумента            = Стр.ДатаНакладной;

            // Проверки и запись
        Если НДок.СуммаДокумента <> (НДок.Товары.Итог("Сумма") + НДок.Услуги.Итог("Сумма")) Тогда
            //ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки,    "", "Не совпала сумма документа " + Стр.Номер + " " + НДок.СуммаДокумента + " - " + (НДок.Товары.Итог("Сумма") + НДок.Услуги.Итог("Сумма")));
        КонецЕсли;
        
        Попытка
            НДок.Записать();
            Стр.Флаг = Ложь;
        Исключение
            //Сообщение.Текст = "НЕ ЗАПИСАЛИ ДОКУМЕНТ " + НДок.Номер + " " + НДок.Дата + " " + НДок.Контрагент  + " " + ОписаниеОшибки();
            //Сообщение.Сообщить();
            ФлагОшибокСозданияДок = Истина;
            Стр.Флаг = Истина;
        КонецПопытки;
        Если ФлагОшибокСозданияДок Тогда
            Продолжить;
        КонецЕсли;
        // Проводим
        Попытка
            НДок.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
        Исключение
            //Сообщение.Текст = "НЕ ПРОВЕЛИ " + НДок.Номер + " " + НДок.Дата;
            //Сообщение.Сообщить();
        КонецПопытки;
        
        КонецЦикла;
    


КонецПроцедуры
9 Любопытная
 
07.04.15
07:51
Дык этой процедуры в вашем коде нет, чем мы тут поможем? :)
10 Олеся999
 
07.04.15
07:54
(9) А есть может какие-нибудь примеры?
Я просто даже не знаю с чего и начать)
11 Олеся999
 
07.04.15
08:20
Ну вот создаем документы:

Для каждого Стр Из ДанныеОбмена Цикл
        Если НЕ Стр.ВыбрДокументов Тогда
            Продолжить;
        КонецЕсли;
            
        Если ДокСсылка = Неопределено Тогда
            НДок = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
        Иначе
            НДок = ДокСсылка.ПолучитьОбъект();
            НДок.Товары.Очистить();
            НДок.Услуги.Очистить();
        КонецЕсли;
        НДок.Организация                    = стр.Фирма;
        НДок.Дата                            = Стр.Дата ;
        НДок.Номер                            = Стр.Номер;
        НДок.Контрагент                        = Стр.Контрагент.ИНН;
        НДок.ДоговорКонтрагента             = Стр.Договор;
        НДок.КратностьВзаиморасчетов         = 1;
        НДок.КурсВзаиморасчетов                = 1;
        //НДок.СпособЗачетаАвансов             = Перечисления.СпособыЗачетаАвансов.Автоматически;
        //НДок.Склад                            = Склад;
        НДок.УдалитьУчитыватьНДС            = Истина;
                НДок.СуммаДокумента                    = Стр.Сумма;
        НДок.СуммаВключаетНДС                = Ложь;
        //НДок.ВалютаДокумента                = ВалютаДок;
        //========================================================================================
        НДок.СуммаВключаетНДС                = Ложь;
        НДок.НомерВходящегоДокумента        = Стр.ИнфНакладной;
        НДок.ДатаВходящегоДокумента            = Стр.ДатаНакладной;
12 Любопытная
 
07.04.15
08:35
(10) Примеры чего?
13 Любопытная
 
07.04.15
08:35
(11) Ну вот, у вас ошибка ДО этого кода возникает. Или вас это не смущает вовсе?
14 Олеся999
 
08.04.15
11:18
&НаСервере
Процедура ЭкспортироватьБПНаСервере()
        Для каждого Стр Из ДанныеОбмена Цикл
        Если НЕ Стр.ВыбрДокументов Тогда
            Продолжить;
        КонецЕсли;
        НДок = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
        
        НДок.Организация                    = стр.Фирма;
        НДок.Дата                            = Стр.ДатаСчета ;
        НДок.Номер                            = Стр.ИнфСчета;
        НДок.Контрагент                        = Стр.Контрагент;
        НДок.Склад                          = Объект.Склад;
        НДок.НомерВходящегоДокумента        = Стр.ИнфНакладной;
        НДок.ДатаВходящегоДокумента            = Стр.ДатаНакладной;
        //НДок.ДоговорКонтрагента            = ?;
        //Тут записываем данные в таблицу    Товары
        
        Для каждого Строка_ДанныеОбмена Из тзДокумент  Цикл
        НоваяСтрокаТаблЧасти = НДок.Товары.Добавить();
        
        //НоваяСтрокаТаблЧасти.Артикул      =  Строка_ДанныеОбмена.Артикул;
        НоваяСтрокаТаблЧасти.Номенклатура =  Строка_ДанныеОбмена.Номенклатура;
        НоваяСтрокаТаблЧасти.Количество   =  Строка_ДанныеОбмена.Количество;
        НоваяСтрокаТаблЧасти.Цена         =  Строка_ДанныеОбмена.Цена;

    //========================================================================================
                Попытка
            НДок.Записать();
            Стр.ВыбрДокументов = Ложь;
        Исключение
                Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = ОписаниеОшибки() ;
            Сообщение.Сообщить();
            
            ФлагОшибокСозданияДок = Истина;
            Стр.ВыбрДокументов = Истина;
        КонецПопытки;
        Если ФлагОшибокСозданияДок Тогда
            Продолжить;
        КонецЕсли;
                КонецЦикла;
                КонецЦикла;



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

Пишет ошибку :
{Форма.Форма.Форма(141)}: Преобразование значения к типу Булево не может быть выполнено
        Если ФлагОшибокСозданияДок Тогда