Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
20 сен 2021, 04:37

Отчет СКД com соединение

Автор Kirill Runets, 06 янв 2017, 17:03

0 Пользователей и 1 гость просматривают эту тему.

Kirill Runets

Ситуация такова:
   
    Есть: две УТ в которых номенклатура идентичная,
    Необходим отчет, который выводил бы остатки из двух баз (первая колонка - номенклатура; вторая колонка - остаток в первой базе; третья - остаток во второй базе)

    Я сделал обработку с кнопкой, при нажатии которой происходит подключение к другой базе через com соединение и даже выводится в сообщение (системная строка сообщений внизу окна 1с) номенклатура и остатки из другой базы.

    У меня никак не получается вывести эти данные в виде таблицы

    Возможно ли как то сделать такой отчет через скд? (Я видел там есть набор данных "объект", но как в него передать объект com - непонятно)

    Прошу вашей помощи, пересмотрел уже миллиарды ссылок




&НаКлиенте
Процедура Команда1(Команда)
   // Вставить содержимое обработчика.
    // Формируем строку подключения
   СтрокаПодключения =
       "file='D:\1с\Base\УТ'; usr='admin'; pwd='12345678';";
   V83COMConnector = Новый COMОбъект("V83.COMConnector");
   СообщениеПользователю = Новый СообщениеПользователю;

   Попытка
      ComConnection = V83COMConnector.Connect(СтрокаПодключения);
   Исключение
      СообщениеПользователю.Текст = "Ошибка подключения: " + ОписаниеОшибки();
      СообщениеПользователю.Сообщить();
      Возврат;
   КонецПопытки;
   
        Запрос = ComConnection.NewObject("Запрос");
      Запрос.Текст =
      "ВЫБРАТЬ Номенклатура.Наименование Как Наименование
          |ИЗ Справочник.Номенклатура КАК Номенклатура";
         ТЗ = ComConnection.NewObject("ТаблицаЗначений");
         ТЗ = Запрос.Выполнить().Выбрать();
         Пока ТЗ.Следующий() Цикл
            Сообщить(ComConnection.String(ТЗ.Наименование));
         КонецЦикла;
   
                КонецПроцедуры




Kirill Runets

 ВнешняяБаза  =  СOM1с.Connect(СтрокаПодключения);

   Исключение
      Предупреждение("Ошибка открытия базы!!!");
      Сообщить(ОписаниеОшибки());
      ВнешняяБаза=Неопределено;
      Возврат;
   КонецПопытки;


Запрос   =  ВнешняяБаза.NewObject("Запрос");
   Запрос.Текст = " ВЫБРАТЬ
|    Товары.Номенклатура КАК Номенклатура,
|    Товары.Вналичии Как Остаток
|   ИЗ
|    РегистрНакопления.ТоварыНаСкладах КАК Товары";


ТЗ = ВнешняяБаза.NewObject("ТаблицаЗначений");
         ТЗ = Запрос.Выполнить().Выбрать();
         
         Пока ТЗ.Следующий()
            Цикл
            Сообщить(ВнешняяБаза.String(ТЗ.Номенклатура)+ "  " + ВнешняяБаза.String(ТЗ.Остаток));
         КонецЦикла;   
      

   

sertak

Ну вам надо выполнить запрос к внешней базе, заполнить таблицу значений с кодами или наименованиями товаров (в зависимости от того, что вы выберете в качестве ключа синхронизации) и остатками. Ну а затем передать эту таблицу значений в запрос уже в своей базе либо же выполнять запрос по каждой строке, т.е. получать остатки в текущей базе для каждого товара, что не очень правильно т.зр. разработки, но менее трудоемко. Можно еще просто получить по таблице значений с каждой стороны, а затем в коде сравнивать их между собой

Сделать такое через СКД наверное можно, если в источник данных 2 типа Объект вы передадите таблицу значений, предварительно сформированную по данным внешней базы, но это не самый удобный путь. В данном случае СКД вам даст только возможность автоматического левого соединения выборок, но в нагрузку даст кучу геморроя по программной обработке всего этого.

Вообще я такие вещи сравниваю через свою же универсальную обработку: http://forum-1c.ru/index.php?topic=64686.msg175583#msg175583.
Ключом будет являться наименование или я так предполагаю в вашем случае. Но если вдруг у вас совпадают уникальные идентификаторы, то вообще отлично.

Теги: скд com отчеты ут 

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск