Имя: Пароль:
1C
 
Где хранить КомКоннектор для упр. форм?
0 Курцвейл
 
20.12.16
12:24
Задался вопросом - все работает. Но бывает что нужно обновить данные из другой БД.
В обычных формах этот вопрос легко решался.
А как и куда лучше/правильнее поместить КомКоннект?
Необходимо чтобы в то время, пока форма УФ открыта, не создавать каждый раз коннект.
1 Cool_Profi
 
20.12.16
12:24
ХЗ, например
Или общий модуль с кешированием значений
2 Курцвейл
 
20.12.16
12:25
(1) Коннект сериализуется? Как его туда поместить?
3 Cool_Profi
 
20.12.16
12:28
(2) В ХЗ на сервере вроде хранится. Правда, не долго.
4 Курцвейл
 
20.12.16
12:30
(3) Имеется ввиду временное хранилище?
5 Cool_Profi
 
20.12.16
12:32
(4) Ну да... )))
6 Курцвейл
 
21.12.16
04:11
Апну что-ли.
Может есть какое-то еще решение.
7 rphosts
 
21.12.16
04:23
Ну сделай неопределенного типа реквизит формы и попробуй в него и создавать сразу коннектор
8 vi0
 
21.12.16
05:40
&НаКлиенте
Перем КомКоннектор1;
9 Живой Ископаемый
 
21.12.16
08:03
2(3)Почему не долго? Пока форма открыта. Или в том плане что сам КомКоннектор может скиснуть? Ну тогда нужно периодически его дергать
10 Fedor-1971
 
21.12.16
09:01
(7) лишнее, достаточно переменной как в (8) она не передаётся на сервер с контекстом и не обнуляется между серверными вызовами, и живёт пока есть форма. Наверно, придётся написать код закрытия коннекта в ПриЗакрытии

(9) думается, что гемора с временным хранилищем побольше чем с локальной переменной (как минимум записать/прочитать). Использовать временное хранилище имеет смысл если нужно передавать коннектор между формами, даже нагляднее получится, чем с глобальной экспортной переменной.
11 DmitrO
 
21.12.16
09:08
(0) правильный ответ на этот вопрос: в кеше.
Надо сделать функцию общего модуля с повторно возвращаемыми значениями, которая будет создавать и возвращать соединение к базе.
12 Курцвейл
 
21.12.16
09:12
(11) Можно поподробнее?
В общем модуле нельзя использовать переменные.
Поэтому коннект каждый раз будет создаваться и возвращаться.
Или в какой-то момент будет возвращаться кеш?
Чем это отличается от использования кеша Обработки, Отчета?
13 DmitrO
 
21.12.16
09:12
На клиенте в переменной модуля его конечно тоже можно хранить, но как правило соединение с базой нужно на сервере, а не на клиенте. Ясен пень этот объект не передать с клиента на сервер.
14 kortun
 
21.12.16
09:14
(10) ну и зачем переменная на клиенте нужна, все действия как правило на сервере выполняются?
15 Курцвейл
 
21.12.16
09:15
Речь конечно же о сервере.
16 DmitrO
 
21.12.16
09:16
(12)Да что тут подробнее то? какие переменные, почитай документацию. Если у модуля стоит НаВремяСеанса, то первый раз функция отработает, создаст объект и вернет его, а второй вызов этой функции в том же сеансе не будет отрабатывать тело функции а сразу вернет объект, который возвращался при первом вызове в этом сеансе.
17 Курцвейл
 
21.12.16
09:20
(16) Допустим класс КомОбъект действительно так написан, что может быть сериализован и помещен в кеш.

Но речь идет о внешнем отчете и вносить изменения в типовую конфигурацию не хочется.
18 h-sp
 
21.12.16
09:21
(17) пользуйтесь вебсервисами уже. Нафига вам этот коннект сдался?
19 vi0
 
21.12.16
09:22
(15) а чем тебя клиент не устроит?
ты какие действия будешь делать с этой базой?
20 DmitrO
 
21.12.16
09:24
(16)+ далее, при если произойдет отказ сервера кластера на котором работал сеанс, сеанс будет перемещен на другой сервер в кластере, а эта функция (при ее вызове), снова отработает полностью. Для этого все и делалось.

(17)нет, он не написан так, он не сериализуется, но это не значит, что он не может быть помещен в кеш.

Кеш, это память а не диск, а вот хранилище значений это память, но обязательно сериализуемая для перемещения сеанса на другой сервер при отказе.
21 Fedor-1971
 
21.12.16
09:33
(14) Всё зависит от задачи, данные подготавливаются на сервере, а передаются через коннектор и наоборот.
Пример, как к файловой БД с сервера подключишься, если на сервере не установлен клиент и доступ к ней есть только у локального пользователя?

(11) Есть недостаток - если понадобится 2 коннектора (для второго вызова вернётся Коннектор1), и после закрытия коннектора - не факт, что не получишь "мёртвый" коннектор из кеша. Вся проблема в том, что рулит жизнью кеша сама платформа, а не программер и когда она решит передёрнуть коннектор не известно.
22 Fedor-1971
 
21.12.16
09:35
21+ возможно, что про повторно возвращаемые значения у меня несколько гнутое представление. Но ещё со студенчества помню "В ответственной системе функции с кешированием возвращаемого значения опасны из-за невозможности определения момента обновления кеша"
23 DmitrO
 
21.12.16
09:49
(17)>>Но речь идет о внешнем отчете и вносить изменения в типовую конфигурацию не хочется.

А это от того, что писатели платформы далеки от того, для чего они это пишут.

Функциональность кеширования возвращаемых значений функций надо было делать не свойствами общего модуля, а директивами компиляции. Но им ведь по барабану, им конфигурации не писать, они не пользуются своим шедевром, такого полно в платформе.
24 DmitrO
 
21.12.16
09:56
(21) если нужно именно два, делай две разных функции. Как он может стать мертвым, только если его сеанс принудительно отцепят? Но тогда обычное и хранение его (в обычных формах например) пострадает также точно.
Если произойдет очистка повторно получаемых значений (есть такая функция в языке), то функция снова отработает полностью, все будет хорошо.
25 DmitrO
 
21.12.16
10:01
(22)а с недостаточным управлением кешем, это да у платформы проблемы, нет программной частичной очистки, эта та же проблема, что описана в (23). Им "по барабану".
26 kortun
 
21.12.16
10:02
(0) если речь о разовом вызове в пределах какой то процедуры, то я делал так

Соединение = ПолучитьСоединение();
ПеренестиДокументыПоступления(Соединение);
ПеренестиДокументыРеализации(Соединение);

в них могло быть что-то типа

Процедура ПеренестиДокументыПоступления(Соединение)

Для Каждого // тут цикл по контрагентам
Контрагент = НайтиСоздатьКонтрагента(ТекКонтрагент, Соединение);
КонецЦикла;

КонецПроцедуры
27 Oftan_Idy
 
21.12.16
10:05
(0) Никак.
В любом случае будет создаваться каждый раз новое соединение, иначе будет постоянно зависать.
Размещай в серверной части
28 Живой Ископаемый
 
21.12.16
10:11
2(10) Временное Хранилище нужно чтобы сохранять комконнектор между серверными вызовами, чтобы каждый раз не инициализировать его.
Хранить можно кстати в параметре сеанса.
29 Fragster
 
гуру
21.12.16
10:28
вроде бы с 8.3.4 или 8.3.5 во временное хранилище (как и в хранилище значения для параметра сеанса) можно помещать только сериализуемые данные
30 Курцвейл
 
21.12.16
10:41
Мда, пока что выход такой - получаю данные с другой БД и помещаю в таблицу значений.
Перед созданием нового коннекта - проверяю наличие необходимых данных в ТЗ. Если они есть, соединение не создают, отдаю данные из ТЗ, иначе соединяю.
Единственный минус, что в другой БД может не быть данных за какой-то период и в моей тз тоже.
Пока что так. :)

Позже проверю другие варианты, включая кеш.
Ситуация с ОбщемМодулем тоже интересная. Большой минус - невозможно реализовать во внешней обработке.
31 Локи-13
 
21.12.16
10:57
(30) что за сатанизм?

Если требуется регулярное получение данных из другой БД, то на лицо необходимость в нормальном обмене.
32 Cool_Profi
 
21.12.16
10:58
(31) Отчёт по складам, продажам, с привязкой к кадровым данным.
склады и продажи - в торговле, кадровые данные - в зупе.
33 Локи-13
 
21.12.16
11:03
(32) Так, и в чем проблема засосать в торговлю кадровые данные?
34 Cool_Profi
 
21.12.16
11:04
(33) Да к то ж тебе даст в базу, с которой работает 500 человек, лить такие данные, как номер паспорта или реальный оклад?
35 Локи-13
 
21.12.16
11:07
(34) Вообще не вижу проблемы сейчас.
Давно с 1С работаешь?
36 Cool_Profi
 
21.12.16
11:07
(35) Нет. Всего 15 лет.
37 Fedor-1971
 
21.12.16
11:27
(34) а они там надо? и прямо через комконнектор и в реальном времени? такие данные не меняются каждые 5 мин, тем более, что достаточно РС со связкой Пользователь Склада = Физ.лицо (или сотрудник) из ЗУПа, на который можно опереться при передаче данных в ЗУП (в ситуации: "насчитали такому продавцу столько премии" вместо ссылки из "Склада" выгружаем, то чему она соответствует в ЗУП)
38 Cool_Profi
 
21.12.16
11:28
(37) Нет. Никто не позволит лить данные кадрового учёта в торговлю.
Им там нечего делать.
39 Локи-13
 
21.12.16
11:31
(38) Товарищ, то как хранятся данные дело только программиста.
Пользователю все равно откуда он получает одни и те же данные.

Если ты этот отчет формируешь в УТ - то считай данные есть в УТ.
40 Cool_Profi
 
21.12.16
11:32
(39) Вот именно. А программист иногда учитывает ещё и объёмы данных и общую нагрузку на систему.
Хотя, может, это только я один такой уникум.
41 Локи-13
 
21.12.16
11:35
(40) Да однозначно уникум. Использовать комконнектор и думать о нагрузке... сочетание не сочетаемого.
42 don_Rumata
 
21.12.16
11:38
(41) Да ладно, какая нагрузка от него? А вот лишние данные, если они не нужны в базе, на самом деле не нужны
43 Cool_Profi
 
21.12.16
11:38
(41) Что лучше - раз в месяц поднять коннектор, или каждый день лить обмены?
44 Локи-13
 
21.12.16
11:41
(43) Раз в месяц лить обмен через ком-коннектор
45 senior
 
21.12.16
11:43
А че насчет веб-сервисов?
46 Fedor-1971
 
21.12.16
11:44
(38) вот и я про то же, не надо гонять данные между системами. Лишнее это.
(40) тут, конечно, локальному программеру виднее что менее затратно по ресурсам: через коннект всасывать данные для неких манипуляций (с риском что их увидит тот кому не положено) или сохранить ссылки для выгрузки (обмена) данных. Данные хранятся в своей песочнице (с соответствующим доступом), а обмен их актуализирует (с нужной периодичностью)
(42) а они лишние? - значит они в БД не надо и без коннектора и с ним.
(43) в твоём варианте: коннектор понадобится при каждом формировании, например, отчёта
(44) логично, но через файл - универсальнее (всё зависит от построенной системы)
47 Cool_Profi
 
21.12.16
11:44
(44) Ещё раз - зачем все эти данные в торговле?
И место занимают, и безопасность снижается.
48 Cool_Profi
 
21.12.16
11:44
(46) отчёт формируется один раз в месяц.
49 Fedor-1971
 
21.12.16
11:49
(45) нужен Веб-сервер и обеспечение его безопасности
(47) да не надо их хранить целиком, и показывать в отчёте то же не сильно нужно. Для Кадров - ЗУП, для информации - Торговля. Ситуация формирования неких отчётов используя 2 базы крайне ненормальная. Тогда уж лучше сделать управленческую БД с соответствующим доступом и загрузкой нужной информации.
(48) и? Есть гарантия что, например, начальник не захочет сформировать его по желанию левой пятки?
50 Cool_Profi
 
21.12.16
11:50
(49) Отчёт не для начальника.
Да и вообще, давайте абстрагируемся от зупа.
Есть совершенно сторонняя БД (не 1с). Данные из неё нужны очень постоянно (там ведётся учёт производства).
Как будем обходиться без коннектора?
51 Курцвейл
 
21.12.16
11:56
Ну если Вам интересно - БП и ЗУП. Из ЗУП нужны среднесписочные численности по подразделениям.
52 Курцвейл
 
21.12.16
12:00
(50) Да никак.
А вот более специфичная ситуация. Есть WMS, есть 1С, надо регулярно сравнить между ними остатки. И показывать расхождение.
53 Локи-13
 
21.12.16
12:02
Господа, если есть внешняя БД, то ADODB в помощь.

А там уже на ваше усмотрение, сохранять данные или нет.
54 Fedor-1971
 
21.12.16
12:02
(50) имея структуру - Внешние данные или ADODB. Не хотим прямого подключения - обмен через файл.
Опять же - что нам в ней нужно? Объём выпуска, нормы выработки работников, отметки ОТК, этап тех.процесса?
Вот прямо все данные из оной БД нужны для отчёта в 1С? В такой постановке вопроса без конкретики по задаче и инфраструктуре - абстрактные рассуждения "Мне больше нравится (удобнее, менее затратно) ..."
(51) для чего? выгрузка для гос.отчётности, тем более бухи имеют доступ в обе конфигурации - один раз руками внесут.
55 Cool_Profi
 
21.12.16
12:04
(54) АДО давно перестала работать через COM?
"что нам в ней нужно" - отметки о продукции, вышедшей с линии. Отметки о загрузке станков. О их производительности. Об их поломках.
56 Курцвейл
 
21.12.16
12:05
(54) Для более детальной расшифровки статей затрат "Оплата труда" и "Страховые взносы", включая в этой расшифровке и среднюю ЗП по подразделению.
57 Локи-13
 
21.12.16
12:08
вернемся в началу темы, в чем проблема создавать каждый раз новый коннект?
58 Fedor-1971
 
21.12.16
12:11
(52) у WMS, обычно, есть некий интерфейс и смотря что он умеет на то и опираемся (возможно и через веб-интерфейс)
(55) так тебе виднее, что быстрее, что сохранить "для сверки", например, станок простаивал, отметка есть и сохранена в 1С, некто ушлый меняет его режим на "работал" и толку от оптимального хранения без дублирования?
(56) а зачем это формировать прямо из БП?
(57) в постановке задачи (50) - надо данные подключись, а не держи открытым коннект до посинения (может он и не понадобится)
59 senior
 
21.12.16
12:13
(52) Внешние Источники
60 Cool_Profi
 
21.12.16
12:13
(58) Це не дублирование, а формирование документов по учёту производства.
61 Fedor-1971
 
21.12.16
13:03
(60) Вот! а как ты для них получишь информацию и насколько оптимально её вложишь в документы зависит от постановки задачи и возможностей производственной системы
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.