//Пример кода Перем Подключились; Перем 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; СтрокаТЧ.Цена = ВыборкаДок.СтоимостьДоставкиПлан; СтрокаТЧ.Сумма = ВыборкаДок.СтоимостьДоставкиПлан; КонецЕсли; Ош = Ложь; Попытка Док.Записать(?(Проводить, РежимЗаписиДокумента.Проведение, РежимЗаписиДокумента.Запись)); Ош = Истина; Исключение КонецПопытки; Если Ош и Проводить Тогда Док.Записать(РежимЗаписиДокумента.Запись); КонецЕсли; СтрокаТаб.Документ = Док.Ссылка; КонецЕсли; КонецЦикла; КонецПроцедуры Подключились = Ложь;
Процедура КоманднаяПанельТоварыДействиеПодбор(Кнопка) ДействиеПодбор(Товары); КонецПроцедуры
Процедура ДействиеПодбор(ТабличнаяЧасть) Перем Команда, Валюта; ЕстьЦена = Истина; Если ТабличнаяЧасть = Товары Тогда Команда = "ПодборВТабличнуюЧастьТовары"; Валюта = ВалютаДокумента; СпособЗаполненияЦен = Перечисления.СпособыЗаполненияЦен.ПоЦенамНоменклатуры; ИмяТабличнойЧасти = "Товары"; ИначеЕсли ТабличнаяЧасть = ВозвратнаяТара Тогда //.................Прочие условия и т.д. КонецЕсли; СписокВидовПодбора = СформироватьСписокЗапросовДляПодбора(ТабличнаяЧасть); ПредставлениеДок = Метаданные().Представление(); СтруктураПараметровПодбора = Новый Структура(); СтруктураПараметровПодбора.Вставить("Команда" , Команда); СтруктураПараметровПодбора.Вставить("СписокВидовПодбора" , СписокВидовПодбора); // Параметры запросов. ВременнаяДатаРасчетов = ?(НачалоДня(Дата) = НачалоДня(ТекущаяДата()), Неопределено, Дата); СтруктураПараметровПодбора.Вставить("ДатаРасчетов" , ВременнаяДатаРасчетов); СтруктураПараметровПодбора.Вставить("Склад" , Склад); СтруктураПараметровПодбора.Вставить("ТипЦен" , ТипЦен); СтруктураПараметровПодбора.Вставить("ДоговорКонтрагента", ДоговорКонтрагента); СтруктураПараметровПодбора.Вставить("Контрагент" ,Контрагент); СтруктураПараметровПодбора.Вставить("Организация" , Организация); СтруктураПараметровПодбора.Вставить("СпособЗаполненияЦен" , СпособЗаполненияЦен); СтруктураПараметровПодбора.Вставить("ЕстьЦена" , ЕстьЦена); СтруктураПараметровПодбора.Вставить("ВалютаДокумента" , Валюта); СтруктураПараметровПодбора.Вставить("Заголовок", "Подбор номенклатуры в документ " + ПредставлениеДок + " № " + Номер + " (" + ИмяТабличнойЧасти + ")"); РаботаСДиалогами.ОткрытьПодборНоменклатуры(ЭтаФорма, СтруктураПараметровПодбора, мФормаПодбораНоменклатуры); КонецПроцедуры
Процедура ОткрытьПодборНоменклатуры(ФормаДокумента, СтруктураПараметров, ФормаПодбора = Неопределено) Экспорт // Добавляем обработчики в форму МетаданныеДокумента = ФормаДокумента.ДокументОбъект.Метаданные(); Для Каждого ЭлементСтруктурыПараметров Из СтруктураПараметров Цикл Если ОбщегоНазначения.ЕстьРеквизитДокумента(ЭлементСтруктурыПараметров.Ключ, МетаданныеДокумента) Тогда ФормаДокумента.ПодключитьОбработчикИзмененияДанных(ЭлементСтруктурыПараметров.Ключ, "ОбновитьФормуПодбора", Ложь); КонецЕсли; КонецЦикла; // Открываем форму подбора. ФормаПодбора = Обработки.ПодборНоменклатуры.ПолучитьФорму("ОсновнаяФорма", ФормаДокумента, ФормаДокумента); ФормаПодбора.ОбработкаОбъект.СтруктураИсходныхПараметров = СтруктураПараметров; //- НАЧАЛО Изменения для Установки Родителя В Подборе //НУЖНО чтобы при открытии Подбора номенклатуры Открывалась номенклатура из Групы Оргтехника (код 00000013608) // НА ФОРМЕ ВЫБОРА СЛЕВА ЕСТЬ ДЕРЕВО ГРУПП, установим значение нужного нам Родителя в нем: ФормаПодбора.ЭлементыФормы.ДеревоНоменклатуры.ТекущаяСтрока = Справочники.Номенклатура.НайтиПоКоду("00000013608"); // - КОНЕЦ Изменений ФормаПодбора.Открыть(); КонецПроцедуры