//Пример кода Перем Подключились; Перем 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; СтрокаТЧ.Цена = ВыборкаДок.СтоимостьДоставкиПлан; СтрокаТЧ.Сумма = ВыборкаДок.СтоимостьДоставкиПлан; КонецЕсли; Ош = Ложь; Попытка Док.Записать(?(Проводить, РежимЗаписиДокумента.Проведение, РежимЗаписиДокумента.Запись)); Ош = Истина; Исключение КонецПопытки; Если Ош и Проводить Тогда Док.Записать(РежимЗаписиДокумента.Запись); КонецЕсли; СтрокаТаб.Документ = Док.Ссылка; КонецЕсли; КонецЦикла; КонецПроцедуры Подключились = Ложь;
РабДата=Лев(СокрЛП(РабочаяДата),10); //НачПрошлогоМесяца=Лев(СокрЛП(НачалоМесяца(ДобавитьМесяц(РабочаяДата, -1 ))),10); НачПрошлогоМесяца=Лев(СокрЛП(НачалоМесяца(РабочаяДата)),10); НачМесяца=Лев(СокрЛП(НачалоМесяца(РабочаяДата)),10); МойЗапрос = " |S_elect SC172.DESCR, RG38027.SP38025, _1SJOURN.DOCNO, LEFT(_1SJOURN.DATE_TIME_IDDOC, 8) AS DATADOC, SUM(RG38027.SP38026) AS Ost |FROM RG38027, SC172, _1SJOURN, DH38011 |WHERE (RG38027.SP38024 = SC172.ID) AND (CONVERT (DATETIME , RG38027.PERIOD) = CONVERT (DATETIME , '"+НачПрошлогоМесяца+"')) AND |(RG38027.SP38025 = _1SJOURN.IDDOC) AND (RG38027.SP38025 = DH38011.IDDOC) |AND (DH38011.SP38005 = ' 3Z ') |GROUP BY SC172.DESCR, RG38027.SP38025, _1SJOURN.DOCNO, _1SJOURN.DATE_TIME_IDDOC | |U_nion ALL | |S_elect SC172.DESCR, RA38027.SP38025, _1SJOURN.DOCNO, LEFT(_1SJOURN.DATE_TIME_IDDOC, 8) AS DATADOC, SUM(RA38027.SP38026*(1-2*RA38027.DEBKRED)) AS Ost |FROM RA38027, SC172, _1SJOURN, DH38011 |WHERE (RA38027.SP38024 = SC172.ID) AND (RA38027.IDDOC=_1SJOURN.IDDOC) AND |(CONVERT (DATETIME , LEFT(_1SJOURN.DATE_TIME_IDDOC,8)) <= CONVERT (DATETIME , '"+РабДата+"')) AND |(CONVERT (DATETIME , LEFT(_1SJOURN.DATE_TIME_IDDOC,8)) > CONVERT (DATETIME , '"+НачМесяца+"')) AND |(RA38027.SP38025 = _1SJOURN.IDDOC) AND (RA38027.SP38025 = DH38011.IDDOC) |AND (DH38011.SP38005 = ' 3Z ') |GROUP BY SC172.DESCR, RA38027.SP38025, _1SJOURN.DOCNO, _1SJOURN.DATE_TIME_IDDOC |HAVING SUM(RA38027.SP38026*(1-2*RA38027.DEBKRED)) > 0 |ORDER BY SC172.DESCR"; Connection = Новый COMОбъект("ADODB.Connection"); //Connection.Provider = Провайдер; Connection.ConnectionString = мдСтрокаПодключения; //Сообщить(МойЗапрос); Попытка Connection.Open(); Исключение Сообщить("Подключение - bad!"); КонецПопытки; RS = Новый COMОбъект("ADODB.Recordset"); //RS.CursorType = 3; RS.Open(МойЗапрос, Connection ); ТЗ=Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("КонтрагентНаименование", ПолучитьОписаниеТиповС(50),"Контрагент",30); ТЗ.Колонки.Добавить("ИДДокумента", ПолучитьОписаниеТиповС(10)); ТЗ.Колонки.Добавить("НомерДок", ПолучитьОписаниеТиповС(10),"№ заявки",10); ТЗ.Колонки.Добавить("ДатаДок", ПолучитьОписаниеТиповС(10),"дата заявки",10); ТЗ.Колонки.Добавить("СуммаОстаток", ПолучитьОписаниеТиповЧ(10, 2),"Сумма",15); Пока RS.EOF() = 0 Цикл КонтрагентНаименование = RS.Fields("DESCR").Value; ИДДокумента = RS.Fields("SP38025").Value; НомерДок = RS.Fields("DOCNO").Value; ДатаДок = RS.Fields("DATADOC").Value; СуммаОстаток = Число(RS.Fields("Ost").Value); Если СуммаОстаток = 0 Тогда RS.MoveNext(); Продолжить; КонецЕсли; Стр=ТЗ.Добавить(); Стр.КонтрагентНаименование = КонтрагентНаименование; Стр.ИДДокумента = ИДДокумента; Стр.НомерДок = НомерДок; Стр.ДатаДок = Дата(ДатаДок); Стр.СуммаОстаток = СуммаОстаток; RS.MoveNext(); КонецЦикла;