Здравствуйте. Избитая вроде тема, но все таки спрошу. Необходимо наладить обмен данными между старой ТИС и Комплексной. Причем часть документов и справочников в одну сторону, часть в обратную. Вот думаю как лучше это организовать. В идеале (для оперативности) хотелось бы при проведении (или перепроведении дока) выгружать и записывать в другую базу.Но у нас такой беспредел, что документ может быть записан и проведен сегодня, потом снят с проводки, поменян номер на другой и перемещен на другую дату. Так же ковыряются и в "заднем числе" что тоже нагружает. Конечно, можно запретить редактирование и все под подпись менять, но это можно охренеть тогда. Хотелось бы разрешить ковырятся в документах скажем недельной давности. Подскажите, на основе чего будет правильнее такое организовать?
Честно, никогда не юзал. Но гугл сообщает о геморах постоянных других юзеров.
А в чем смысл работы в двух базах с разными конфигурациями?
одна под торговлю заточена, вторая для бухов
если доступ к обоим базам возможен с одной машины, и такой обмен нужно делать постоянно, то лучше чем ОЛЕ не придумаете, можно будет работать из одной базы сразу с двумя.
Подсказка: УРБД.
Таблица 1supdts содержит список ИД измененных объектов данных.
Каждую из двух баз сделать центральной. Для каждой создать базу - только приемник.
Настроить мирацию объектов данных как надо (для каждой миграция чего надо только в эту самую периферийку - как будто в другую базу данных).
Когда надо - читать из 1supdts список "чего надо вігружать", "раскручивать" по ID объектов до примитивных значений реквизитов и в нужном формате выгружатью Каковую выгрузку - загружать в приемник. И чистить 1supdts. Плюс опциональн (и возможно) крутить в прочих урбд-кишочках маркеры-номра-признаки выполненных обменов.
А в-общем, задача далеко не тривиальная. Хотя и вполне решаемая. Лично я - делал, по каковой причине с этими глупостями сюда и вылезаю.
//+++++++++++++++++++++++OLE-подключение+++++++++++++++++++++++++++++++++++++
Процедура ПриНачалеРаботыСистемы()
БазаИсточник = СоздатьОбъект("V77.Application");
Путь=Строка("D:\1C_Base\Копия(2)\");
Пользователь=глПользователь;
пароль="";
Открыта = БазаИсточник.Initialize(БазаИсточник.RMTrade, "/D" + СокрЛП(Путь) + " /N" + Пользователь + "/P" + Пароль, "");
Если Открыта = 0 Тогда
Предупреждение("Ошибка открытия информационной базы 2");
Иначе
Сообщить("База 2 доступна");
КонецЕсли
Cthulhu @ 25.03.16, 21:54 ,
УРБД только для того, чтобы получить список изменённых объектов?
Alex007, В процедурах "ОбработкаПроведения" и "ПриЗаписи" делайТЕ запись в каталог файла, в котором "ЗначениеВСтрокуВнутр".
СделайТЕ пользователя робот, который постоянно запущен и мониторит каталог. Появился файл, через ОЛЕ - Конвертацию передал его приемнику. И в приемнике использовать Блокировка()
Установить/прочитать режим блокировки.
Если при вызове метода параметр <ВклВыкл> не задан, то возвращается режим блокировки до выполнения метода.
Число: 1 - заблокирован; 0 - свободен.
Если при вызове метода параметр <ВклВыкл> задан, то возвращается результат выполнения метода блокировки.
Число: 1 - успешно; 0 - не получилось.
! | http://pro1c.org.ua/index.php?act=announce&id=2: 1 |
V..I..P @ Сегодня, 18:20 ,
Минусик имеется тут. Если юзверь поменял номер к примеру, то все, куку? Необходимо ID какой-то прописывать тогда всем докам и что-то ему присваивать в ВводНового()? И еще , почему УРБД рассматривал- юзер может от нечего делать х-раз просто открыть и записать док и в этом случае получим кучу ненужных файлов и оле-переносов, а урбд по итогу одну запись сделает в АПДЕЙТС. Но гемора с этим уриб конечно в разы...
Alex007, Из ЗначениеВСтрокуВнутр() можно получить УИД объекта и хранить в реквизите базы приемника.
В таблицах УРБД хранится ссылка на объект, там нет изменений для этого объекта.
А вот для проверки изменений, я думаю понадобится что-то типа "РигистрСведений" и в каждой форме документа/справочника в процедурах "ПриЗаписи()" создать гл. процедуру в которой нужно сравнить Объект и Ссылку на отличия.
Была такая наработка на просторах 1СРР.ру. Как называется, не помню. Но что-то типа Детальное логирование объектов в Access
Alex007, ЗначениеВСтрокуВнутр() для элемента, документа, перечисления есть уникальный идентификатор. ничего думать не нужно, уже все придумали за вас.
Создать один справочник "Соответствие объектов", в нем колонки: строка "УИД объекта"(Это если объект пришел из вне), Неопределенно "Объект". В обоих реквизитах отбор по реквизиту и сортировку.
Вот вам и отпадает связка Номер Дата Тип дока. И свое колесо с ИД для документа
У нас розница меняется когда заблагорассудится главбуху. А в оптовой торговле только ночью через регламентные задания. Меняться следует одним видом объекта тлько в одну сторону. В крайнем случае поставить приоритет. Или сложный приоритет. К примеру, если сегодня на филиале и в центральной базе меняли один и тот же док, то цб затрет филиальную. А если менялась только на филиале, то она затрет цб-шную. Вобщем вариантов миллион.
Что-то никак не хочет ОЛЯ со мной подружиться). Но все равно докручу, хотя бы ради собственного развития что-ли уже. Пока мучаюсь с этим всем, понаписывал параллельно обработок обмена через ДБФ- в принципе работает, но хочется "жити по-новому" так сказать)). Вот какая закавыка сейчас донимает- не могу найти док. по ОЛЕ. "ОлеСчет - Не выбран документ" и все тут, хотя он есть. Что не так подскажите?
Док=СоздатьОбъект("Документ");
олеДок=БазаИсточник.CreateObject("Документ");
Док.ВыбратьДокументы(ДатаОтчета);
олеДок.ВыбратьДокументы(ДатаОтчета);
Пока Док.ПолучитьДокумент()=1 Цикл
Если (Док.Вид()= "Счет") тогда
олеДок.НайтиПоНомеру(Док.НомерДок,ДатаОтчета,"Счет");
олеСчет=ОлеДок.ТекущийДокумент();
олеКл.НайтиПоКоду(Док.Контрагент.Код,0);
олеСчет.Контрагент=олеКл.ТекущийЭлемент();
//.........................................
олеСчет.Записать();
Сообщить("Обновлен"+олеСчет.ПредставлениеВида()+" №"+СокрЛП(олеСчет.НомерДок)+" от "+Шаблон("[олеСчет.ДатаДок]"));
Нужно получить Вид полученного документа из цикла, создать такой объект, потом ПолучитьДокумент().
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua