Версия для печати темы (https://pro1c.org.ua/index.php?s=2dc32771d28264c39d13cc6d3732942e&showtopic=51524)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Можно ли зайти в базу на сервере из другой конфигурации.

Автор: Gigi 14.04.19, 15:41

Всем привет!
Гууу… даже в выходные дни вынужден работать… и даже в такое время нет покоя.. Это потому что охота отмучиться и забыть… И просто поскорее избавиться
Так вот, проблема такая. И попытаюсь коротко изложить. Если получиться ....что чаще не получается … согласен ))))) И если и на этот раз опять не получилось коротко то опять и тут БОЛЬШИЕ ИЗВИНЕНИЯ ЗА ТАКОЙ ОПЯТЬ ГИГАНТСКИЙ РАЗМЕР. Но это что бы удобнее было знать в деталях суть вопроса.
Представите, что есть две базы. Одна серверная … т.е. рабочая … а другая файловая на ПК.
Обе базы содержат одни и те же данные. Но при этом одна из них первая урезанная, а вторая полная.
Имею ввиду то, что конфигурация у серверной рабочей базы сильно урезана. Почти все возможности есть только по юр лицам. А во всем остальном это просто сухие данные справочников и документов без каких либо созданных форм, отчетов, очень удобных для загрузки данных и прочих целей обработок и т.д. Т.е. только сухие данные. Не отчетов не удобных для работы форм … ничего вообще. Короче в этом полная бездарщина. Хотя в том, как база в корне выстроена тут полная противоположность бездарщине. Потому что копия той же базы с теми же данными но уже в файловом варианте …загруженная уже из другой конфигурации … навороченной ….. с гибкими алгоритмами расчета, те же данные считает по нулям.
Но это фаилово-серверная ситуация. А вопрос в том, как я сам буду с этим работать с той рабочей базой, конфигурация которой урезана. Ибо работаю ведь не только программистом, но начальником технической статистики.
И тут вопрос решил следующим образом ...
Понаписал кучу строк кода для получения всех данных из базы серверной в базу файловую. И вопрос был решен. Т.е. в итоги я сам пользуюсь не рабочим вариантом базы правильно выстроенной, но очень не удобной и практически не возможной работать с ней, которая на сервере, а файловым, навороченным и удобным )) естественно ))
И как получать данные из урезанной базы на сервере в файловую с этим нормально. Файловая база с каждым месяцем пополняется новыми данными от рабочей серверной.
Но я просто хочу сделать еще удобнее.
А именно войти в базу, которая на сервере через другую конфигурацию. Т.е. не через ту с которой синтезируется база на сервере с урезанной конфигурацией, а войти через не урезанный и полный вариант конфигурации.
Вот как хотел.
И для этой цели я понасодавал кучу внешних обработок … т.е. множество фишек из полного варианта конфигурации сохранил виде внешних обработок. И открывал эти внешние обработки из тонкого клиента серверной базы. И они все абсолютно нормально работают и не где не ошибаются. Ибо ведь данные базы одни и те же. Но все дело в том, что этих разных внешних обработок стало куча. И открывать каждую отдельно для своей части работы стало очень не удобно. Поэтому нужно просто всю ту навороченную конфигурацию в целом создать как внешнюю обработку и зайти в базу на сервере через нее. И так что бы данные базы так же отобразить из другой конфигурации.
И не важно как зайти.. через файл/открыть обработку или иным способом.
Поэтому вопрос в том МОЖНО ЛИ ТАК СДЕЛАТЬ?
Только если опять и тут нельзя то не рубите сразу… ))))) …и не будьте жестоки )))
Потому, что буду сильно расстроен если так. )))))
И тогда напрасно столько в деталях описал… относительно того что нужно.
Тогда как может задуманное не реализуемо ибо такой возможности опять и тут просто нет.
И поэтому буду признателен …и это без иронии. Если кто подскажет варианты решения вопроса.

Автор: Gigi 15.04.19, 8:42

Gigi @ Вчера, 15:41 * ,
Позволяет ли система 1С так сделать или нет?

Автор: andr_andrey 15.04.19, 9:08

Gigi @ Сегодня, 9:42 * ,
Много текста, а смысл витиевато ускользает. С вероятностью 50% можно отвечать - "да".

Автор: Vofka 15.04.19, 9:11

Полностью осознать написанное у меня не получилось, но если проблема в этом

Цитата(Gigi @ 14.04.19, 16:41) *
Но все дело в том, что этих разных внешних обработок стало куча. И открывать каждую отдельно для своей части работы стало очень не удобно.

то можно создать 1 внешнюю обработку, куда напихать весь функционал и работать с ней одной, а не с кучей разных.

Автор: Bernet 15.04.19, 9:25

Меня укачивает от такого количества текста :-)


Если вопрос в том можно ли отобразить данный одной базы через другую - да, можно. Делать либо соединение через COM и выводить нужные данные, либо писать какой-то веб-сервис, либо делать файловые загрузки-выгрузки.
Вариантов масса - вопрос для чего и какой объем данных

Автор: Petre 15.04.19, 9:25

QUOTE (Gigi @ 14.04.19, 15:41) *
без каких либо созданных форм, отчетов, очень удобных для загрузки данных и прочих целей обработок и т.д.

Даже если вы в этих формах, отчетах и обработках пишите столько же кода, как и текста в сообщениях на форуме, вряд ли это хоть сколько отразится на статистике базы. Основной вес несут "сухие данные": справочники, документы, движения этих документов и прочие данные (статистику таблиц можно увидеть в sql sms, например, или воспользовавшись соответствующей обработкой, коих в нете полно).

Как бы там ни было, есть функционал automation сервера и внешнего соединения.

Автор: Gigi 15.04.19, 9:58

andr_andrey @ Сегодня, 9:08 * ,

Цитата(andr_andrey @ 15.04.19, 9:08) *
Много текста, а смысл витиевато ускользает. С вероятностью 50% можно отвечать - "да".

Гууу ... спасибо за "да" ... хоть и на 50%
Цитата(Vofka @ 15.04.19, 9:11) *
то можно создать 1 внешнюю обработку, куда напихать весь функционал и работать с ней одной, а не с кучей разных.

Да можно... не вопрос. Но как?
Во первых внешняя обработка че то сильно ограничена. Там че то не увидел модули.... только формы ЧТ и макеты.
Во вторых. На пример форма для рабочего стола ... сохрани ее как внешнюю обработку. И потом открыл через обработку из урезанной.
Все нормально работает ... макеты отчетов отображают данные. Но это только при нажатии кнопок.
Но стоит открыть открыть объект дин. списка. которая есть в этой общей форме появляться форма урезанная ... т.е. та которая есть у базы на сервере.
Просто нужно что бы обработка все объекты дин. списка списка при открытии отображали не те родные с базой формы, а совсем другие.
Так что вопрос в том, реализуемо ли это? Если да то, как? Т.е. в каком русле двигаться?
Во внешнюю обработку всю конфигурацию как запихнешь? И как сделаешь так что бы уже в другой базе на отображала свои формы а не те которые у урезанной...
Вот в чем вопрос..

Цитата(Vofka @ 15.04.19, 9:11) *
Меня укачивает от такого количества текста :-)

Да ... правильно... согласен ... не стоило так кочегарить ))) Ну извините )) .... Это просто дурное влияние работы... перегрева ... аж в выходные дни. Ладно извините ))
Цитата(Bernet @ 15.04.19, 9:25) *
Если вопрос в том можно ли отобразить данный одной базы через другую - да, можно. Делать либо соединение через COM и выводить нужные данные, либо писать какой-то веб-сервис, либо делать файловые загрузки-выгрузки.
Вариантов масса - вопрос для чего и какой объем данных

А вот это интересный вариант. Думаю он больше устраивает..
Отлично! Услышал что можно...
Но тормозить не будет?

Gigi @ Сегодня, 9:39 * ,
Если несколько решений то давайте возьмем один из них.
Допустим форма общая где для простоты примера всего один единственный дин. список.
Объекты этого списка в работающей базе не имеют созданную форму. Тогда как в другой файловой конфе она есть.
Так вот, как отобразить тот же объект в другой форме?
Если просто добавить ее во внешнюю обработку то как сделать что бы она появилась при открытии объекта?




Автор: Bernet 15.04.19, 10:09

Gigi @ Сегодня, 10:58 * ,
Чтоб вы понимали - любой из перечисленных мной способов предполагает запросы к базе, т.е. вам с какой-то периодичностью надо вытягивать данные с той базы. Естественно, чем больше данных надо выгружать тем больше и время обмена. По сути то, что вы хотите - есть обмен между двумя базами по какому-то расписанию

Автор: Gigi 15.04.19, 10:39

Цитата(Petre @ 15.04.19, 9:25) *
Вряд ли это хоть сколько отразится на статистике базы.

Это я знаю...
А на счет текста сообщения ... Да ладно слушайте ... ? Просто изложил детально... Что бы было понятно для каких целей.

Цитата(Petre @ 15.04.19, 9:25) *
Как бы там ни было, есть функционал automation сервера и внешнего соединения.

Тоже вариант.
Но .... короче с всем этим нужно вообще разобраться ...

Цитата(Bernet @ 15.04.19, 10:09) *
Чтоб вы понимали - любой из перечисленных мной способов предполагает запросы к базе, т.е. вам с какой-то периодичностью надо вытягивать данные с той базы. Естественно, чем больше данных надо выгружать тем больше и время обмена. По сути то, что вы хотите - есть обмен между двумя базами по какому-то расписанию

Стоп ... дело в том, что так я уже сделал.
И это и указанно в том самом не малом сообщении за которое меня тут так корят ))))
Так что с обменом все нормально. Через ком объект ... стерилизация ... десериализация и прочие очень удобные возможности.
Просто одну конфу из другой базы в целом использовать для другой. Вот как ... без обмена.
Но думаю это проблематично. Потому что в 1С конфа и база плотно синтезируются. И база при открытии какого то объекта ссылается на те формы которые есть в этой базе. Естественно.
А как объект при открытии отобразить в какую то стороннюю форму. Которая в самой базе отсутствует?
Короче... с этим нужно разбираться.

Автор: Bernet 15.04.19, 10:54

Gigi @ Сегодня, 11:39 * ,

Цитата
Просто одну конфу из другой базы в целом использовать для другой.

Без обменов - только COM-соединение с базой, но это все будет достаточно сложно, т.к. придется писать код на получение каких-то данных, их временное хранение где-то или вывод куда-то, их изменение и запись. При большом количестве объектов этот будет немалый гемор.

P.S. опять же, это по сути своей тот же обмен, пусть даже и без записи во вторую базу. А просто взять и "наложить" данные одной базы на другую - нельзя.

Автор: Gigi 15.04.19, 11:14

Gigi @ Сегодня, 10:39 * ,
Поэтому ладно ... для этой темы лучше объявить тайм-аут ...
Потому что нужно сперва как следует разобраться со всеми предложенными тут вариантами решений.
Что бы вообще понять какой подходит в большей степени.
И если будут вопросы то продолжу тему.
И буду признателен ...

Вообще все таки как было бы супер если человек имел бы телепатические способности. В таком случае не было бы и такой необходимости вообще кому то что то даже объяснять.... Тем более так детально.
Зачем это... когда смысл переноситься из одной головы в другую .. )) Но к сожалению нет такой способности так что придется излагать.

Пока!

Цитата(Bernet @ 15.04.19, 10:54) *
Без обменов - только COM-соединение с базой, но это все будет достаточно сложно, т.к. придется писать код на получение каких-то данных, их временное хранение где-то или вывод куда-то, их изменение и запись. При большом количестве объектов этот будет немалый гемор.

Я так и знал... Ну да ... 1С тут не при чем. Дело в том, что это на самом деле сложно... целый гем... система 1С не для таких вещей сделана. Не для такого просто изврата которое сало нужно избалованному мальчику. И она не рассчитана на какие то капризны.
А то что захотел это знаю что уже просто каприз. Видишь ли ... отобразить все данные из других форм.
Понятно... !
Но я все таки попытаюсь ... и еси будут вопросы ... продолжу тему!
Всем спасибо!
Пока!

Автор: Vladal 16.04.19, 9:51

Цитата(Vofka @ 15.04.19, 9:11) *
то можно создать 1 внешнюю обработку, куда напихать весь функционал и работать с ней одной, а не с кучей разных.

Сам так делаю. Всякие "эксперименты" - на форме более 30 кнопок для разных вещей.
Чтобы не таскать за собой 30+ внешних обработок, всё в одной.
Какие-то одноразовые, какие-то просто понять алгоритм или пример работы чего-то.

Автор: Gigi 16.04.19, 17:15

Опять всем привет..
Я частично решил вопрос... вопрос только отражения данных ... и пока без процедуры перезаписи объекта из внешней обработки.
И отображение с использованием если не целиком всю конфу то хотя бы, сделал главное .
Что бы значения реквизитов объекта дин. списка при открытии отобразились на форму внешней обработки
Вот что...
Ну а как при нажатии Записать/Провести это потом..
Поэтому говорить ничего не буду... а лишь скину только код... и вы сами поймете ЧТО И КАК МНЕ БЫЛО НУЖНО!
И жаль что от вас уважаемые я так и не дождаться этого ... Что бы в ответ вы мне скинули только код и ничего больше.
И код такой же детальный и понятный как у меня прямо щас ...
А вместо этого что я слыша? Вы не понимаете уважаемые, что я так детально объясняю потому, что нужен готовый код и ничего больше.
В таком случае помогли бы мне таким образом просто время сэкономить. И за это был бы благодарен вдвойне...
Вот простое решение


//========= Нужное для задачи в общем модуле урезанной конфигурации 
// ==== ПОЛЕНИЛСЯ СОКРАЩАТЬ ФУНКЦИИ ...

//Обработка=SubFx_ВнешняяОбработка.Получить(ИмяФайла);
Функция Получить(ИмяФайла) Экспорт
    дд = Новый ДвоичныеДанные(ИмяФайла);
    АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(дд);
    ИмяОбр = ВнешниеОбработки.Подключить(АдресВоВременномХранилище,,);    
    Возврат ИмяОбр;
КонецФункции

//стрРеквизиты=FxSub_МетаДанные.Реквизиты("МетаданныеГруппа","МетаданныеИмя");
Функция Реквизиты(МетаданныеГруппа,МетаданныеИмя) Экспорт
    Реквизиты=Новый Структура();
    //============================================
    Если МетаданныеГруппа="Справочники" или МетаданныеГруппа="Справочник"  Тогда
        МетаданныеГруппа="Справочники";
        Идентификатор="Код";
        ОсновнойРеквизит="Наименование";
    ИначеЕсли МетаданныеГруппа="Документы" или МетаданныеГруппа="Документ"  Тогда
         МетаданныеГруппа="Документы";
        Идентификатор="Номер";
        ОсновнойРеквизит="Дата";
    ИначеЕсли МетаданныеГруппа="РегистрыСведений" или МетаданныеГруппа="РегистрСведений" Тогда
        МетаданныеГруппа="РегистрыСведений";
        Идентификатор=Неопределено;
        ОсновнойРеквизит=Неопределено;
    Иначе
        Возврат Реквизиты;
    КонецЕсли;
    //============================================
    МетаданныеИсточника=Метаданные[МетаданныеГруппа][МетаданныеИмя];
    //============================================
    Если Идентификатор=Неопределено тогда
        Для Каждого Измерение Из МетаданныеИсточника.Измерения Цикл
        Реквизиты.Вставить(Измерение.Имя,Измерение.Представление());
        КонецЦикла;
    //--------------------------------------------
        Для Каждого Ресурс Из МетаданныеИсточника.Ресурсы Цикл
        Реквизиты.Вставить(Ресурс.Имя, Ресурс.Представление());
        КонецЦикла;
    //--------------------------------------------
        Для Каждого Реквизит Из МетаданныеИсточника.Реквизиты Цикл
        Реквизиты.Вставить(Реквизит.Имя, Реквизит.Представление());
        КонецЦикла;
    //--------------------------------------------
    Иначе
    //--------------------------------------------
        Для Каждого Реквизит Из МетаданныеИсточника.Реквизиты Цикл
        Реквизиты.Вставить(Реквизит.Имя, Реквизит.Представление());
        КонецЦикла;
    //--------------------------------------------    
    КонецЕсли;
    //============================================
    Возврат Реквизиты;
КонецФункции

//стрРеквизитыЗначения=FxSub_МетаДанные.ССЫЛКА_ПолучитьЗначения(ОбъектСсылка,РеквизитИлиРеквизиты);
Функция ССЫЛКА_ПолучитьЗначения(ОбъектСсылка,стрРеквизиты) Экспорт
//Если ОбъектСсылка=Неопределено тогда Возврат Неопределено КонецЕсли;
стрРеквизитыЗначения=Новый Структура();
Если ОбъектСсылка.Пустая() Тогда Возврат стрРеквизитыЗначения; КонецЕсли;
//======================================
    Для Каждого Элемент Из стрРеквизиты Цикл
    Реквизит=Элемент.Ключ;
        Значение=ОбъектСсылка[Реквизит];
    стрРеквизитыЗначения.Вставить(Реквизит,Значение);
    КонецЦикла;
//======================================    
Возврат стрРеквизитыЗначения;    
КонецФункции


//==========Форма внешней обработки с динамическими списками взятая из рабочего стола.

&НаКлиенте
Процедура ДинСписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка=Ложь;
//===================================
ПолноеИмяФайла="D:\ЧерномЭнСбыть\1Cv8_БАЗА\Обработки\ПОЛЕЗНЫЙ_ОТПУСК_Акт.epf";
//===================================
Обработка=SubFx_ВнешняяОбработка.Получить(ПолноеИмяФайла);
ПараметрыОткрытия = Новый Структура("КлючВарианта", "");
Уникальность = "ВнешняяОбработка." + Обработка + "/КлючВарианта.";
Форма = ПолучитьФорму("ВнешняяОбработка." + Обработка + ".Форма",,Неопределено,Уникальность);
//===================================
СсылкаНаДокумент=Элементы["ДинСписок"].ТекущаяСтрока;
Форма.Объект.ДокСсылка=СсылкаНаДокумент;
//===================================
Форма.ОткрытьМодально();
КонецПроцедуры

//========== Форма документа сохраненная под тип объекта: "ВнешняяОбработка.ИмяФромыДокумента"
//===========К которому был добавлен всего один реквизит Ссылки на объект, на пример с именем: "ДокСсылка"

&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если Объект.ДокСсылка.Пустая()=Ложь Тогда
стрРеквизиты=FxSub_МетаДанные.Реквизиты("Документы","ИмяДока");
стрРеквизитыЗначения=FxSub_МетаДанные.ССЫЛКА_ПолучитьЗначения(Объект.ДокСсылка,стрРеквизиты);
    Для каждого Элемиент из стрРеквизитыЗначения цикл
    Реквизит=Элемиент.Ключ;
    Значение=Элемиент.Значение;
    Попытка //На всякий пожарный... для начального теста... пока не всем элементам полей формы указал путь к данным
        Объект[Реквизит]=Значение;
    Исключение
    КонецПопытки;
    КонецЦикла;
КонецЕсли
КонецПроцедуры


И все дела ... правда пришлось повозиться...
И главное говорил что каприз.... Но каприз нужный ...и может совсем не каприз а необходимость.
Ладно ... по поводу темы кода есть еще маленький вопросик.. но это позже...

Пока!

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua