|
Обработка загрузки документов приходной накладной в БП | ☑ | ||
---|---|---|---|---|
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)}: Преобразование значения к типу Булево не может быть выполнено Если ФлагОшибокСозданияДок Тогда |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |