Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> COM Соединение с другой базой , Помогите / набросайте короткий пример COM 2 страниц V  < 1 2          
Profi_1C77 Подменю пользователя
сообщение 03.06.25, 15:02
Сообщение #21

Завсегдатай
****
Группа: Пользователи
Сообщений: 141
Из: Черкассы
Спасибо сказали: 32 раз
Рейтинг: 32

И еще вопрос
Попытка 
        V8BAS = СомСоединение.Connect(СтрокаСоединения);
    Исключение
        ткошибка = ОписаниеОшибки();
        
        Подключение = Неопределено;
        СомСоединение = Неопределено;
        ПодклУстановлено = Ложь;
         Возврат Неопределено;
    КонецПопытки;    
    
    
    
    // получаем ТЗ из базы BAS
    ТекстЗапроса = "
        |ВЫБРАТЬ
        |    ХозрасчетныйОстатки.Субконто1 КАК Номенклатура,
        |    ХозрасчетныйОстатки.Субконто3 КАК Склад,
        |    ХозрасчетныйОстатки.КоличествоОстатокДт КАК КоличествоОстатокДт
        |ИЗ
        |    РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаИтогов, Счет = &Счет, , ) КАК ХозрасчетныйОстатки
        |";

        
    ЗапросВнешнейБазы = V8BAS.NewObject("Запрос");
    ЗапросВнешнейБазы.Текст = ТекстЗапроса;
    
    
    // Присвоение значений переменным параметров.
    ДатаИтогов = Дата(2025, 06, 03, 00, 00, 00);
    
    V8ПланСчетов = V8BAS.NewObject("ПланыСчетов");
    
    Счет = V8ПланСчетов.Хозрасчетный.ТоварыНаСкладе;

    // Установка параметров.
    ЗапросВнешнейБазы.УстановитьПараметр("ДатаИтогов", ДатаИтогов);
    ЗапросВнешнейБазы.УстановитьПараметр("Счет", Счет);


    //ТЗОстаткиБух = ЗапросВнешнейБазы.Выполнить().Выгрузить();


V8ПланСчетов = V8BAS.NewObject("ПланыСчетов");

Счет = V8ПланСчетов.Хозрасчетный.ТоварыНаСкладе;
не отрабатывает
пытался также
| РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаИтогов, Счет.Код = "281", , ) КАК ХозрасчетныйОстатки
|";
тоже не хочет , помогите

andytg Подменю пользователя
сообщение 03.06.25, 15:24
Сообщение #22

Общительный
**
Группа: Пользователи
Сообщений: 31
Из: Киев
Спасибо сказали: 7 раз
Рейтинг: 7

Цитата(Profi_1C77 @ 03.06.25, 16:02) *
V8ПланСчетов = V8BAS.NewObject("ПланыСчетов");


не так

ЕМНИП, NewObject -- это для всевозможных таблиц значений, списков значений, запросов и т.д.

пробуйте так:

V8BAS = СомСоединение.Connect(СтрокаСоединения);
// ...
V8BAS.ПланыСчетов.Хозрасчетный.ТоварыНаСкладе  // или .НайтиПоКоду("281")

xlmel Подменю пользователя
сообщение 03.06.25, 15:26
Сообщение #23

Говорящий
***
Группа: Пользователи
Сообщений: 56
Из: Харьков
Спасибо сказали: 28 раз
Рейтинг: 30.7

Profi_1C77 @ Сегодня, 15:02 * ,
NewObject("ПланыСчетов") - это для всего, что создается через конструктор Новый в языке 1с, например, Новый запрос, Новый Структура и так далее.
Счет = V8BAS.ПланыСчетов.Хозрасчетный.ТоварыНаСкладе;
Обращение таким должно быть

Спасибо сказали: andytg,

andytg Подменю пользователя
сообщение 03.06.25, 15:28
Сообщение #24

Общительный
**
Группа: Пользователи
Сообщений: 31
Из: Киев
Спасибо сказали: 7 раз
Рейтинг: 7

Цитата(Profi_1C77 @ 03.06.25, 16:02) *
Счет = V8ПланСчетов.Хозрасчетный.ТоварыНаСкладе;

потому что вот тут у вас ком-объект в той базе, а не счет
надо
Счет = V8BAS.ПланыСчетов.Хозрасчетный.ТоварыНаСкладе;

это для вашего второго случая

Спасибо сказали: Profi_1C77,

Profi_1C77 Подменю пользователя
сообщение 03.06.25, 15:58
Сообщение #25

Завсегдатай
****
Группа: Пользователи
Сообщений: 141
Из: Черкассы
Спасибо сказали: 32 раз
Рейтинг: 32

Всем спасибо парни!
В итоге получил ТЗ которую 2 этапом засуну в отчет СКД и свяжу остатки
Код вышел примерно такой, новичкам на будущее ( это жестяк) :
&НаСервере
Функция ПолучитьТаблицуДанных(НачальнаяДата,КонечнаяДата) Экспорт
    ТЗОстаткиБух = Неопределено;
    СомСоединение = Новый COMОбъект("V83.ComConnector");    
    // параметры
    ПутьКБазе  = "***";
    Логин         = "**";
    Пароль     = "**";
    Серверная = Ложь;
    ткошибка ="";
    Подключение = Неопределено;
    СтрокаСоединения = ПутьКБазе+"Usr = """+СокрЛП(Логин)+"""; Pwd = """+СокрЛП(Пароль)+"""";
    Если НЕ Серверная Тогда                
        СтрокаСоединения = "File = """+СокрЛП(ПутьКБазе)+"""; Usr = """+СокрЛП(Логин)+"""; Pwd = """+СокрЛП(Пароль)+"""";
    КонецЕсли;  
    
    Попытка
        V8BAS = СомСоединение.Connect(СтрокаСоединения);
    Исключение
        ткошибка = ОписаниеОшибки();
        
        Подключение = Неопределено;
        СомСоединение = Неопределено;
        ПодклУстановлено = Ложь;
        Возврат ТЗОстаткиБух;
    КонецПопытки;    
    
    
    // получаем ТЗ из базы BAS
    ТекстЗапроса = "
    |ВЫБРАТЬ
    |    ХозрасчетныйОстатки.Субконто1 КАК Номенклатура,
    |    ХозрасчетныйОстатки.Субконто3 КАК Склад,
    |    ХозрасчетныйОстатки.КоличествоОстатокДт КАК Остаток
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаИтогов, Счет.Код = &КодСчета, , ) КАК ХозрасчетныйОстатки
    |";
    
    
    ЗапросВнешнейБазы = V8BAS.NewObject("Запрос");
    ЗапросВнешнейБазы.Текст = ТекстЗапроса;
    
    //// Присвоение значений переменным параметров.
    //ДатаИтогов = Дата(2025, 06, 03, 00, 00, 00);
    ЗапросВнешнейБазы.УстановитьПараметр("ДатаИтогов", КонечнаяДата);
    ЗапросВнешнейБазы.УстановитьПараметр("КодСчета", "281");
    
    Выборка = ЗапросВнешнейБазы.Выполнить().Выбрать();
    
    ТЗОстаткиБух  = Новый ТаблицаЗначений;
    ТЗОстаткиБух.Колонки.Добавить("Наименование",ОбщегоНазначения.ОписаниеТипаСтрока(100));
    ТЗОстаткиБух.Колонки.Добавить("Код",ОбщегоНазначения.ОписаниеТипаСтрока(11));
    ТЗОстаткиБух.Колонки.Добавить("Склад",ОбщегоНазначения.ОписаниеТипаСтрока(50));        
    ТЗОстаткиБух.Колонки.Добавить("Остаток",ОбщегоНазначения.ОписаниеТипаЧисло(15,3));        
    
    Пока Выборка.Следующий() Цикл
        НС = ТЗОстаткиБух.Добавить();
        НС.Наименование =  Выборка.Номенклатура.НаименованиеПолное;
        НС.Код        =  Выборка.Номенклатура.Code;
        НС.Склад   =  Выборка.Склад.Description;
        НС.Остаток =  Выборка.Остаток;
        
    КонецЦикла;    
    
    Возврат ТЗОстаткиБух;
    
    
КонецФункции

andytg Подменю пользователя
сообщение 03.06.25, 16:33
Сообщение #26

Общительный
**
Группа: Пользователи
Сообщений: 31
Из: Киев
Спасибо сказали: 7 раз
Рейтинг: 7

Цитата(Profi_1C77 @ 03.06.25, 16:58) *
    
// получаем ТЗ из базы BAS
    ТекстЗапроса = "
    |ВЫБРАТЬ
    |    ХозрасчетныйОстатки.Субконто1 КАК Номенклатура,
    |    ХозрасчетныйОстатки.Субконто3 КАК Склад,
    |    ХозрасчетныйОстатки.КоличествоОстатокДт КАК Остаток
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаИтогов, Счет.Код = &КодСчета, , ) КАК ХозрасчетныйОстатки
    |";


можно филиграннее попробовать (т.к. перебор в цикле и заполнение таблицы остатков может быть долгим, если у вас их много)

    // получаем ТЗ из базы BAS
    ТекстЗапроса = "
    |ВЫБРАТЬ
    |    ВЫРАЗИТЬ(ХозрасчетныйОстатки.Субконто1.НаименованиеПолное КАК СТРОКА(100)) КАК Номенклатура,
    |    ВЫРАЗИТЬ(ХозрасчетныйОстатки.Субконто3.Наименование КАК СТРОКА(50)) КАК Склад,
    |    ХозрасчетныйОстатки.КоличествоОстатокДт КАК Остаток
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаИтогов, Счет.Код = &КодСчета, , ) КАК ХозрасчетныйОстатки
    |";
// ну и так далее, т.е. определяем все нужные поля сразу в запросе как вам надо


далее делаем так (без циклов):

ТЗОстаткиБух = ЗначениеИзСтрокиВнутр( V8BAS.ЗначениеВСтрокуВнутр(ЗапросВнешнейБазы.Выполнить().Выгрузить()));


не пробовал, но должно работать wink.gif

Profi_1C77 Подменю пользователя
сообщение 03.06.25, 16:50
Сообщение #27

Завсегдатай
****
Группа: Пользователи
Сообщений: 141
Из: Черкассы
Спасибо сказали: 32 раз
Рейтинг: 32

andytg @ Сегодня, 17:33 * ,
Работает, да это оптимальное icon_beer17.gif

Спасибо сказали: andytg,

andytg Подменю пользователя
сообщение 03.06.25, 16:55
Сообщение #28

Общительный
**
Группа: Пользователи
Сообщений: 31
Из: Киев
Спасибо сказали: 7 раз
Рейтинг: 7

Profi_1C77 @ Сегодня, 17:50 * ,
ну и дальше ставьте проверку обазательно

Если ТипЗнч(ТЗОстаткиБух ) = Тип("ТаблицаЗначений") Тогда
        // потому что если в ком-базе запрос почему-то там не выполнился, то вернется пустая строка

....

xlmel Подменю пользователя
сообщение 04.06.25, 6:56
Сообщение #29

Говорящий
***
Группа: Пользователи
Сообщений: 56
Из: Харьков
Спасибо сказали: 28 раз
Рейтинг: 30.7

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

Спасибо сказали: andytg,

Profi_1C77 Подменю пользователя
сообщение 04.06.25, 21:48
Сообщение #30

Завсегдатай
****
Группа: Пользователи
Сообщений: 141
Из: Черкассы
Спасибо сказали: 32 раз
Рейтинг: 32

Итог , склеил строковые Номенклатура ( код) - Склад - Наименование в СКД , вообщем пока задержка до 2 мин норм

andytg Подменю пользователя
сообщение 05.06.25, 8:50
Сообщение #31

Общительный
**
Группа: Пользователи
Сообщений: 31
Из: Киев
Спасибо сказали: 7 раз
Рейтинг: 7

Profi_1C77 @ Вчера, 22:48 * ,
можете ключ для "склейки" бух. данных с управленческими строить еще в запросе в com-базе и сразу выгружать готовую колонку -- будет еще быстрее, плюс аналогичный ключ в запросе по управленческим данным уже в СКД и в этом же запросе левое соединение с бух.данными -- будет все строиться за один проход в одном запросе, не?

andytg @ Сегодня, 9:41 * ,
и групппировки по номенклатуре с суммами в com-запрос добавьте

Profi_1C77 Подменю пользователя
сообщение 05.06.25, 8:57
Сообщение #32

Завсегдатай
****
Группа: Пользователи
Сообщений: 141
Из: Черкассы
Спасибо сказали: 32 раз
Рейтинг: 32

andytg @ Сегодня, 9:50 * ,
Там в скд может быть вариант с запросам к бух остаткам и без, потому так пока удобнее;

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


2 страниц V  < 1 2
Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 13.06.25, 21:57
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!