HelpF.pro

Подключение к ИБ через Com, Получение списка документов и их Загрузка

Код 1C v 8.х
  //Пример кода
Перем Подключились;
Перем COMОбъект;

Функция ПолучитьНом(Выборка)

Ном = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Выборка.Номенклатура));

Если Ном.Пустая() Тогда
ВвестиЗначение(Ном, "Выберите номенклатуру " + СокрЛП(Выборка.Номенклатура), Тип("СправочникСсылка.Номенклатура"));
КонецЕсли;

Возврат Ном;

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


Функция ПодключитьсяКCRM()

Подключились = Истина;

Попытка
Подкл = Новый COMОбъект("V82.COMConnector");
COMОбъект = Подкл.Connect("Srvr=""Server1"";Ref=""TradeUT"";Usr=""ObmenBot"";Pwd=""12345""");
Исключение
Сообщить(ОписаниеОшибки());
Подключились = Ложь;
КонецПопытки;

Возврат Подключились;

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

Процедура Реализации_Анализ(Элемент)

Если не Подключились Тогда
Если не ПодключитьсяКCRM() Тогда
Возврат;
КонецЕсли;
КонецЕсли;

Запрос = COMОбъект.NewObject("Запрос");

Запрос.Текст = ПолучитьМакет("ЗапросПродажи").ПолучитьТекст();

Запрос.УстановитьПараметр("Дата1", НачалоДня(ДатаНач));
Запрос.УстановитьПараметр("Дата2", КонецДня(ДатаКон));

глРезультатЗапросаПродажи = Запрос.Выполнить();

Выборка = глРезультатЗапросаПродажи.Выбрать(COMОбъект.ОбходРезультатаЗапроса.ПоГруппировкам);

ДокРеал = Документы.РеализацияТоваровУслуг;
СпрКонтр = Справочники.Контрагенты;

ТаблицаДокументов.Очистить();

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

КонецЦикла;

ЭлементыФормы.кнЗагрузитьШаг1.Доступность = Истина;
ЭлементыФормы.ИндикаторРеал.МаксимальноеЗначение = ТаблицаДокументов.Количество();

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

Процедура Реализации_Загрузить(Элемент)

ЭлементыФормы.ИндикаторРеал.МаксимальноеЗначение = ТаблицаДокументов.Количество();
ЗначениеИндикатораРеал = 0;

ДокРеал = Документы.РеализацияТоваровУслуг;

ВыборкаДок = глРезультатЗапросаПродажи.Выбрать(COMОбъект.ОбходРезультатаЗапроса.ПоГруппировкам);

мСписокВидовДоговоров = Новый СписокЗначений;
мСписокВидовДоговоров.Добавить(Перечисления.ВидыДоговоровКонтрагентов.СПокупателем);

СпособЗаполненияЦен = Перечисления.СпособыЗаполненияЦен.ПоЦенамНоменклатуры;

Пока ВыборкаДок.Следующий() Цикл
ЗначениеИндикатораРеал = ЗначениеИндикатораРеал + 1;

СтрокаТаб = ТаблицаДокументов.Найти(ВыборкаДок.Номер, "Номер");

Если СтрокаТаб <> Неопределено Тогда
Если ЗначениеЗаполнено(СтрокаТаб.Документ) Тогда
Док = СтрокаТаб.Документ.ПолучитьОбъект();
Док.Товары.Очистить();
Док.Услуги.Очистить();
Иначе
Док = ДокРеал.СоздатьДокумент();
КонецЕсли;


Док.Дата = ВыборкаДок.Дата;
Док.Номер = ВыборкаДок.Номер;
Док.Контрагент = СтрокаТаб.Контрагент;

ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(Док, глЗначениеПеременной("глТекущийПользователь"), Док.мВалютаРегламентированногоУчета, "Продажа");
ЗаполнениеДокументов.ПриИзмененииЗначенияКонтрагента(Док, мСписокВидовДоговоров);
ЗаполнениеДокументов.ПриИзмененииЗначенияДоговора(Док, Док.ВалютаДокумента, Док.мВалютаРегламентированногоУчета, СпособЗаполненияЦен, Ценообразование.ПолучитьСтруктуруРеквизитовДокументаДляЦенообразования(Док), "Продажа", "Товары", Неопределено);

Док.ЗаполнитьСчетаУчетаРасчетов();

Док.УчитыватьНДС = Ложь;

ВыборкаНом = ВыборкаДок.Выбрать(COMОбъект.ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаНом.Следующий() Цикл

ОбработкаПрерыванияПользователя();

Ном = ПолучитьНом(ВыборкаНом);

Если ВыборкаНом.Идентификатор = 1 Тогда
СтрокаТЧ = Док.Товары.Добавить();
СтрокаТЧ.Номенклатура = Ном;
Док.ЗаполнитьСчетаУчетаВСтрокеТабЧасти(СтрокаТЧ, "Товары", Истина);
Иначе
СтрокаТЧ = Док.Услуги.Добавить();
СтрокаТЧ.Номенклатура = Ном;
Док.ЗаполнитьСчетаУчетаВСтрокеТабЧастиУслуги(СтрокаТЧ, ИСТИНА);
ОбработкаТабличныхЧастей.ЗаполнитьСодержаниеТабЧасти(СтрокаТЧ, Док);
КонецЕсли;


ОбработкаТабличныхЧастей.ЗаполнитьСтавкуНДСТабЧасти(СтрокаТЧ, Док);
ОбработкаТабличныхЧастей.ЗаполнитьЕдиницуЦенуПродажиТабЧасти(СтрокаТЧ, Док, Док.мВалютаРегламентированногоУчета);

СтрокаТЧ.Количество = ВыборкаНом.Количество;
СтрокаТЧ.Сумма = ВыборкаНом.Сумма;
СтрокаТЧ.Цена = СтрокаТЧ.Сумма / ?(ВыборкаНом.Количество = 0, 1, ВыборкаНом.Количество);

КонецЦикла;

Если не ВыборкаДок.ДоставкаОтдельно и ВыборкаДок.СтоимостьДоставкиПлан <> 0 Тогда
СтрокаТЧ = Док.Товары.Добавить();
СтрокаТЧ.Номенклатура = Док.Товары[0].Номенклатура;
Док.ЗаполнитьСчетаУчетаВСтрокеТабЧасти(СтрокаТЧ, "Товары", Истина);
ОбработкаТабличныхЧастей.ЗаполнитьСтавкуНДСТабЧасти(СтрокаТЧ, Док);
ОбработкаТабличныхЧастей.ЗаполнитьЕдиницуЦенуПродажиТабЧасти(СтрокаТЧ, Док, Док.мВалютаРегламентированногоУчета);
СтрокаТЧ.Сумма = - ВыборкаДок.СтоимостьДоставкиПлан;

СтрокаТЧ = Док.Услуги.Добавить();
СтрокаТЧ.Номенклатура = Справочники.Номенклатура.ТранспортныеУслуги;
Док.ЗаполнитьСчетаУчетаВСтрокеТабЧастиУслуги(СтрокаТЧ, ИСТИНА);
ОбработкаТабличныхЧастей.ЗаполнитьСодержаниеТабЧасти(СтрокаТЧ, Док);
ОбработкаТабличныхЧастей.ЗаполнитьСтавкуНДСТабЧасти(СтрокаТЧ, Док);
ОбработкаТабличныхЧастей.ЗаполнитьЕдиницуЦенуПродажиТабЧасти(СтрокаТЧ, Док, Док.мВалютаРегламентированногоУчета);
СтрокаТЧ.Количество = 1;
СтрокаТЧ.Цена = ВыборкаДок.СтоимостьДоставкиПлан;
СтрокаТЧ.Сумма = ВыборкаДок.СтоимостьДоставкиПлан;

КонецЕсли;

Ош = Ложь;
Попытка
Док.Записать(?(Проводить, РежимЗаписиДокумента.Проведение, РежимЗаписиДокумента.Запись));
Ош = Истина;
Исключение
КонецПопытки;

Если Ош и Проводить Тогда
Док.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;

СтрокаТаб.Документ = Док.Ссылка;

КонецЕсли;

КонецЦикла;

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

Подключились = Ложь;

Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq8/view/1313.html