helpf.pro
Регистрация
 0 
Распечатать

Подключение к ИБ через 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;
				СтрокаТЧ.Цена = ВыборкаДок.СтоимостьДоставкиПлан;
				СтрокаТЧ.Сумма = ВыборкаДок.СтоимостьДоставкиПлан;
				
			КонецЕсли;
			
			Ош = Ложь;
			Попытка
				Док.Записать(?(Проводить, РежимЗаписиДокумента.Проведение, РежимЗаписиДокумента.Запись));
				Ош = Истина;
			Исключение
			КонецПопытки;
			
			Если Ош и Проводить Тогда
				Док.Записать(РежимЗаписиДокумента.Запись);
			КонецЕсли;
			
			СтрокаТаб.Документ = Док.Ссылка;
			
		КонецЕсли;
			
	КонецЦикла;
	
КонецПроцедуры

Подключились = Ложь;   
Разместил:   Версии: | 8.x |  Дата:   Прочитано: 20583
 0 
Распечатать
Возможно, вас также заинтересует
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П
10060 (0x0000274C): Попытка установить соединение была безуспешной 24
Установили новый терминальный сервер, на нем подняли 1С, терминальные пользователе неописуемо довольны, все просто летает :) И вот же надо было такому случиться, главному бухгалтеру не понравилось работать через терминал, а еще у нее свой ноутбук и
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 53
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ
1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш
1C медленно работает по сети с базой на SQL Server 23
Данное обстоятельство может быть обусловлено многими причинами. Одна из них - неоптимальная настройка MS SQL . Перечислим неоптимальности в настройке: 1) Неправильно указанный сетевой протокол, используемый для взаимодействия 1С с SQL Server. П
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
Загрузка... Дождитесь завершения!