gifts2017

Загрузка из Lotus или OLE-подключение из других (не 1С) программ

Опубликовал Наталья (nvl) в раздел Обработки - Обработка документов

Как-то давно писала настройку в 7.7. Теперь пришлось переделать на 8.2. Суть в том, что в программе Lotus заводятся счета, накладные, счет-фактуры. Как уж там прописана кнопка "Экспорт" - не знаю, но эта кнопка передает в 1С8 через функцию Import2 перечень реквизитов (ИНН, Наименование, Сумма, СуммаНДС , НомерСчета, ДатаСчета, ПН, Группа). А 1С8 их подхватывает в модуле внешнего соединения и "загружает" реализацию и счета-фактуры.

Текст функции загрузки представлен ниже. Функцию надо скопировать в конфигураторе: БухгалтерияПредприятия - правой кнопкой мыши (для не 1С-овцев пишу) - Открыть модуль внешнего соединения.

Функция Import2(ИНН, Наименование, Сумма, СуммаНДС , НомерСчета, ДатаСчета, ПН, Группа) Экспорт
 
    ИНН = Строка(ИНН);
    ИНН2 = "00000000";
    КПП="000000000";
    p = Найти(ИНН, "\") ;
    Если p > 1 Тогда
        ИНН2 = Лев(ИНН, p - 1);
        КПП = Сред(ИНН, p + 1);
    Иначе
        ИНН2 = Лев(ИНН, 12);
        КПП = ""; 
    КонецЕсли;
 
 
    Спр1=Справочники.Контрагенты.НайтиПоКоду("000000001");
    //
    Если (Группа="A") или (Группа="B") или (Группа="G") или (Группа="H") Тогда
        СпрВД = Справочники.Номенклатура.НайтиПоКоду("00000000547");
    ИначеЕсли   Группа="C" Тогда
        СпрВД = Справочники.Номенклатура.НайтиПоКоду("00000000545");
    ИначеЕсли   Группа="F" Тогда
        СпрВД = Справочники.Номенклатура.НайтиПоКоду("00000000544");
    КонецЕсли;
 
    Если Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ИНН2) = 0 Тогда
  
        СпрКонтр=Справочники.Контрагенты.СоздатьЭлемент();
        СпрКонтр.ИНН = ИНН2;
        СпрКонтр.КПП = КПП;
        СпрКонтр.Родитель=Спр1.ТекущийЭлемент();
        СпрКонтр.Наименование=Наименование;
        СпрКонтр.НаименованиеПолное=ПН;
        СпрКонтр.ЮрФизЛицо=Перечисления.ЮрФизЛицо.ЮрЛицо;
  
        Попытка
            СпрКонтр.Записать();
        Исключение
        КонецПопытки;
  
    Иначе
        СпрКонтр1 = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ИНН2);
  
        Запрос = Новый Запрос;
        Запрос.Текст=
        "ВЫБРАТЬ
        | Контрагенты.Ссылка как контрагент
        |ИЗ
        | Справочник.Контрагенты КАК Контрагенты
        |ГДЕ
        | Контрагенты.ИНН = &ВыбИНН
        | И Контрагенты.КПП = &ВыбКПП" ;
  
        Запрос.УстановитьПараметр("ВыбИНН",ИНН2);
        Запрос.УстановитьПараметр("ВыбКПП",КПП);
        Выборка = Запрос.Выполнить().Выбрать();
  
        Пока Выборка.Следующий() Цикл
            СпрКонтр1 = Выборка.Контрагент;
        КонецЦикла;
  
        Попытка
            СпрКонтр =СпрКонтр1.ПолучитьОбъект();
            СпрКонтр.Наименование = Наименование;
            СпрКонтр.НаименованиеПолное = ПН;
            СпрКонтр.ИНН = ИНН2; //Запись полного ИНН\КПП
            СпрКонтр.КПП = КПП;
            Попытка
                СпрКонтр.Записать();
            Исключение
            КонецПопытки;
        Исключение
        КонецПопытки;
    КонецЕсли;
    // 
    //Иначе
    // СпрКонтр = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ИНН2);
    // СпрКонтр.Наименование=Наименование;
    // СпрКонтр.НаименованиеПолное=ПН;
    // СтарыйСпр=СпрКонтр.ТекущийЭлемент();
    // Попытка
    //  СпрКонтр.Записать();
    // Исключение
    //  Предупреждение("Контрагент "+Наименование +" не записан!");
    // КонецПопытки;
    //КонецЕсли;
    Док=Документы.РеализацияТоваровУслуг.СоздатьДокумент();
    СтавкаНДС=Перечисления.СтавкиНДС.НДС18;
    СтавкаНДС10=Перечисления.СтавкиНДС.НДС10;
    Док.Комментарий=ИНН2;
 
    //Проверить коды номенклатуры
    Если (Группа="A") или (Группа="B") Тогда
        ВД = Справочники.Номенклатура.НайтиПоКоду("00000000547");
    ИначеЕсли   Группа="C" Тогда
        ВД = Справочники.Номенклатура.НайтиПоКоду("00000000545");
    ИначеЕсли   Группа="F" Тогда
        ВД = Справочники.Номенклатура.НайтиПоКоду("00000000544");
    КонецЕсли;
 
    Док.Дата= СокрЛП(ДатаСчета)+"  0:00:00";
    Док.Номер=СокрЛП(НомерСчета);
    Док.Организация=Справочники.Организации.НайтиПоКоду("000000002");
    Док.ТипЦен=Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000001");
    Док.ВалютаДокумента = Справочники.Валюты.НайтиПоКоду("643");
    Док.Контрагент=СпрКонтр.Ссылка;
    УправлениеВзаиморасчетами.УстановитьДоговорКонтрагента(Док.ДоговорКонтрагента,
         Док.Контрагент,
         Док.Организация,,);
    Док.СпособЗачетаАвансов = Перечисления.СпособыЗачетаАвансов.Автоматически;
    Док.СчетУчетаРасчетовСКонтрагентом = ПланыСчетов.Хозрасчетный.РасчетыСПокупателями;
    Док.СчетУчетаРасчетовПоАвансам = Планысчетов.Хозрасчетный.РасчетыПоАвансамПолученным;
    Док.СуммаВключаетНДС = Истина;
 
    НовСтрока = Док.Услуги.Добавить();
    НовСтрока.Номенклатура = ВД;
    НовСтрока.Содержание = ВД;
    СчетаУчета     = БухгалтерскийУчет.ПолучитьСчетаУчетаНоменклатуры(Док.Организация, НовСтрока.Номенклатура, );
    НовСтрока.СчетДоходов  = СчетаУчета.СчетДоходов;
    НовСтрока.СчетРасходов = СчетаУчета.СчетРасходов;
    НовСтрока.СчетУчетаНДСПоРеализации = СчетаУчета.СчетУчетаНДСПродажи;
 
    Если НовСтрока.СчетДоходов.ВидыСубконто.Количество() > 0 Тогда
        НовСтрока.Субконто = Новый(НовСтрока.СчетДоходов.ВидыСубконто[0].ВидСубконто.ТипЗначения.Типы()[0]);
        Если ТипЗнч(НовСтрока.Субконто) = Тип("СправочникСсылка.НоменклатурныеГруппы") Тогда
            НовСтрока.Субконто = НовСтрока.Номенклатура.НоменклатурнаяГруппа;
        КонецЕсли;
    Иначе
        НовСтрока.Субконто = Неопределено;
    КонецЕсли;
    НовСтрока.Количество=1;
    НовСтрока.Цена=Сумма;  
    НовСтрока.Сумма=Сумма;
    НовСтрока.СуммаНДС=СуммаНДС;
    Если   Группа="F" Тогда
        НовСтрока.СтавкаНДС = СтавкаНДС10;
    Иначе
        НовСтрока.СтавкаНДС = СтавкаНДС;
    КонецЕсли;
    Попытка
        Док.Записать();
    Исключение
        Сообщить("Документ уже выгружался!!!");
    КонецПопытки;
    Сф=Документы.СчетФактураВыданный.СоздатьДокумент();
 
    Попытка
        СФ.Заполнить(Док.Ссылка);
        СФ.Номер=СокрЛП(НомерСчета);
        СФ.Записать();
    Исключение
    КонецПопытки;
 
    Возврат 1;

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

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Евгений Сущенков (Jonny_wk) 17.06.12 18:23
Надо будет использовать
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа