Есть база BAS UT , и есть база BAS бух CORP В базе УТ нужно построить отчет по остаткам товаров ( бех проблем ) + создать соединение к бух базе ( она кстати SQL ) - получить тоже остатки по 281 , выгрузить их в ТЗ и потом соединить в отчете остатков UT; Номенклатура / Склады - синхронизированы ( Код - Артикул - ШтрихКод)
1. Не не писал такое ни разу , накидайте пож пример соединения и как через объект COM пишется запрос на 281. 2. В отчете как инициализировать ТЗ с бух базы и передать его как ИсточникДанных ?
ЗапросВнешнейБазы = ВнешняяБаза.NewObject("Запрос"); ЗапросВнешнейБазы.Текст = ""; //тут текст запроса, как бы он выглядел в бухгалтерии ЗапросВнешнейБазы.УстановитьПараметр(.....); Выборка = ЗапросВнешнейБазы.Выполнить().Выбрать();
Выборка - это будет COM-объект. Если Вы сделаете ТЗ = ЗапросВнешнейБазы.Выполнить().Выгрузить(), то ТЗ - ето тоже COM-объект, если я ничего не путаю. И, если это не примитивные типы, колонки будут тоже COM-объектом. Поэтому, если Вам нужна, например, Номенклатура в Вашей Базе, нужно потом еще полученную ТЗ обработать и сопоставить её элементы элементам в Вашей Базе
Profi_1C77 @ Сегодня, 11:36
, вам, как я понимаю, надо сравнить данные управленческого учета (УТ) с бухгалтерским (КОРП), так?
ну вот и делайте как выше написали, сперва в бухии КОРП через com-объект получаете данные из УТ и кладете их в одну таблицу значений (назовем Тз1), затем закрываем подключение и удаляем com-объект за ненадобностью, затем то же самое в УТ и результат кладете в другую таблицу (Тз2), затем сравниваете эти таблицы, перед сравнением постройте в каждой из таблиц поисковый индекс (чтоб удобнее и быстрее было искать) такого примерно вида (колонку "Ключ" добавьте)
Ключ = [код].[артикул].[штрихкод]
таблицы перед добавлением индекса сворачиваем по кодам/артикулам/штрихкодам
если как вы говорите, у вас вся номенклатура синхронизирована, то проблем быть не должно
и потом сравнение двух таблиц по этому индексу -- есть / нет
ну и результат -- в отчет
TohaMonster @ Сегодня, 12:13
, колонки в ТЗ нужно делать примитивными типами (строка/число), т.е. код/артикул/наименование/количество/стоимость -- для сравнения остатков в двух базах будет достаточно
В Бухгалтерии КОРП можно создать webservice, опубликовать его на web-сервере, и опубликовать метод, который будет возвращать таблицу значений. Я везде, где мог, уходил от COM в пользу webservice. Во-первых существенно быстрее устанавливается соединение. Во-вторых запросы пишутся в родной базе, а если через COM, то приходится делать запрос в консоли запросов в одной базе, потом его переносить во вторую. Это дополнительная работа. В-третьих, при возврате через COM приходится использовать пару функций ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр, или перегонять в JSON. С JSON проблема в том, что для обработки таблицы в запросе, она должна быть типизирована. То есть надо на стороне приемника создать таблицу, заполнить ее из JSON. Касательно 2 функций - вендор не рекомендует их использовать, о причине не знаю. А проверить получится ли работать с СериализаторXDTO через COM у меня как-то руки не дошли. В webservice, если добавите пакет XDTO [необходимо зарегистрироваться для просмотра ссылки], то станет доступен тип ValueTable и сможете на стороне приемника использовать СериализаторXDTO.ПрочитатьXDTO(), а на стороне источника СериализаторXDTO.ЗаписатьXDTO(); В расширение можно добавить webservice, режим совместимости 8.3.12 вроде как позволяет это сделать.
В расширение можно добавить webservice, режим совместимости 8.3.12 вроде как позволяет это сделать
оно-то так, но как показывает отечественная практика, практически везде для бухий и подач документов в налоговые (особенно в массовом режиме) уже больше 12 лет используется что-то из серии Медок/Фредо, а оно существует только под винду (ибо написано на net framework), поэтому на буховских машинах 100% будет именно винда, так что эквилибристика с линуксами, апачами, веб-сервисами и тому подобным imho в наших условиях излишня, разве что если специально не попросят
а при взаимодействии через com надо только не забывать, что передать можно только простые типы, и в другой базе нужны будут дополнительные поиски и сопоставления (клиенты, номенклатура и т.д.), но и тут все решается поисками по ЕДРПОУ, артикулам, штрих-кодам и т.д. (которые и задаются именно простыми типами -- строка/чиало), так что в итоге не проблема
Цитата(xlmel @ 28.05.25, 10:13)
Касательно 2 функций - вендор не рекомендует их использовать, о причине не знаю.
если это про ЗначениеВСтрокуВнутр(), то в мануалах написано, что оставлено только для совместимости с клюшками (как по мне, отличная функция, крайне удобная и нужная )
andytg @ Сегодня, 13:12
, так я не возражаю, каждый ищет то, что ему удобнее. У меня 4 базы на Винде, которые должны обмениваться данными и все реализовано через веб-сервисы. Можно было сделать через COM, но открытие COM обычно в 5-7 раз медленнее, чем веб-сервис. И сделаны аналогичные отчеты, которые собирают данные из разных баз и удалось добиться разумных времен ожидания
тут соглашусь для случая, когда com на разных серверах, удаленных друг от друга в нашем случае тоже 4 базы (3 бух корп и 1 типа управленческая унф), обмен идет из унф в бух, на com в пределах локалки 100 мбит -- соединение за пару секунд в роли "серверов" -- i7 3770k и i5 2320, винда, postgresql а вот если базы находятся в разных местах и соединение через интернет -- тогда соглашусь, да, com сильно тупит, веб-сервис наверное будет быстрее (не пробовал, лень переписывать )
у вас время жизни подключения равно времени жизни вашей функции, которая возвращает булево значение, а само подключение закрывается после отработки функции
в этом случае надо зарегистрировать comcntrl.dll в системе (причем, если их несколько, то надо именно от нужной версии платформы)
Цитата(Profi_1C77 @ 03.06.25, 13:18)
Я код потом код перенесу ""правильно" " мне важно что что б Подключение было
можете не переносить, а обернуть в структуру и засунуть во временное хранилище, потом доставать и использовать, адрес хранилища запоминать -- так работает и ком-объект существует между вызовами функций до момента закрытия, когда необходимо
[необходимо зарегистрироваться для просмотра ссылки]
V7 = _V7.Connect(СтрокаСоединения);
_СтруктураCOM = Новый Структура; _СтруктураCOM.Вставить("COMОбъект", V7); _КонтейнерCOM = ПоместитьВоВременноеХранилище(_СтруктураCOM, Новый УникальныйИдентификатор);
upd: можете через com+ [необходимо зарегистрироваться для просмотра ссылки] у меня так зарегистрирована 8.5 (для тестов) и 8.3 с ней прекрасно работает, т.к. ком-коннекторы разных версий v83.ComConnector и v85.ComConnector
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!