Здравствуйте.
1С:Предприятие 8.2 (8.2.19.130)
"Альфа-Авто: Автосервис+Автозапчасти, украинская версия 4.1" (4.1.14.01)
обычные формы.
Есть так сказать 2 удаленных филиала у каждого филиала от 2-х и более складов.
По специфике их работы необходимо разделить их по двум разным базам.
При этом должна быть синхронизация по всем справочникам, за исключением Контрагенты, Договора, РасчетныеСчета, Банки.
Так же в филиалах не должно быть документов другого филиала.
По сути получается как вообще сторонняя организация, но с тесными связями (это как мне
Единственно наверное общим будет Номенклатура и подобные справочники или связанные с ним.
Думал попробовать использовать РИБ, но из-за описанного выше не подходит, т.к. синхронизация РИБ по всем справочникам, тем более что РИБ для меня черный ящик, попробовал почитать - с наскоку не разобраться.
Также необходимо чтобы филиал видел общие (не раздельно по складам) остатки товаров, чтобы можно было перемещать товар с/на.
Пока есть идея сделать 2 копии и выполнить свертку каждой, а потом удалить все лишнее в каждой их них.
Синхронизацию справочников думал сделать посредством обработки через подключение к другой базе на подобии АДО (или как оно там правильно называется) - конечно здесь могут ожидать сюрпризы, т.к. пока не знаю как быстро найти все отличия в номенклатурах и определить где правильная версия, а какую нужно заменить и так по всем параметрам.
Товар другого филиала думал загружать через функционал Прайс-лист контрагента или добавить справочник(регистр) ОстаткиФилиала.
Перемещение товара между филиалами, наверное через ЗаказПоставщику (Ф1) ->ЗаказПокупателя (Ф2) -> РеализацияТоваров (Ф2) ->ПоступлениеТоваров (Ф1).
Может кто-нибудь сталкивался с таким и может дать рекомендации, как это лучше реализовать.
ИМХО - Лучше "убить время" на РИБ, чем потом постоянно "чесаться".
А почему нельзя использовать RLS?
поищите у гугла "Управление областью миграции данных в механизмах обмена данными"
В итоге выяснилось, что РИБ в Альфа-Авто не работает - на этапе создания "образа" подчиненной базы выдавало ошибку.
Об ошибке сообщил в поддержку, а они подтвердив у себя ошибку отправили разрабам.
Время исправления бага - неизвестно.
Поэтому решено делать разделение своими силами.
Предварительно база была была почищена от помеченных на удаление объектов, выполнено восстановление последовательности, тестирование и исправление и выгрузка в файл.
Из бекапа была восстановлена в отдельную папку (копия) в которой запустил Свертку базы (самописная), на выходе были получены:
ВводОстатковТоваров (в разрезе Склад)
ВводОстатковВзаиморасчетов (в разрезе Валюта, Подразделение)
ИзменениеЦен (в разрезе ТипЦены)
и куча помеченных на удаление документов.
Запущена очистка помеченных на удаление и ТиС ИБ.
Получена свернутая база.
Из нее сделана еще одна копия, а дальше индивидуальная чистка каждой базы от других подразделений.
Все вроде получилось нормально.
Следующий этап синхронизация.
Перемещение товаров решено сделать через фиктивного контрагента, через следующую цепочку:
1) Ф1.ЗаказПоставщику --->--(СОМ соединение)--->---- Ф2.ЗаказПокупателя
2) Ф2.ЗаказПокупателя --->--(на основании)--->-- Ф2.РеализацияТовара
3) Ф2.РеализацияТовара --->--(СОМ соединение)--->---- Ф1.ПоступлениеТовара
Как думаете, на сколько такая схема жизнеспособна?
А вот с получением и отображением остатков другого филиала(ов) ситуация такая.
Для хранения прайса филиала создал РегистрСведений Измерения:( НашиФилиалы; Номенклатура; ), Остаток, Цена
Через СОМ соединение подключаюсь к филиалу и запросами получаю две ТЗ (Партии и Цены), далее в цикле перебираю ТЗПартии и для текущего товара через ТЗЦена.Найти() получаю Цену.
Полученные данные записываю в Регистр.
Все работает, но как-то очень долго выполняет.
Есть предположение, что это из-за того, что каждый происходит старт и проведение транзакции.
Подскажите пожалуйста, как можно этот процесс ускорить.
Вот код
ТЗОстатки = ПолучитьОстаткиПрайс();
ТЗЦены = ПолучитьЦеныПрайс();
Для Каждого Стр Из ТЗОстатки Цикл
НайденаяСтрока = ТЗЦены.Найти(Стр.Артикул, "Артикул");
Цена = 0;
Если НайденаяСтрока = Неопределено Тогда
Иначе
Цена = НайденаяСтрока.Цена;
КонецЕсли;
//Записываем запись в регистр сведений
Набор = РегистрыСведений.ТоварыФилиалов.СоздатьНаборЗаписей();
Набор.Прочитать();
НовЗапись = Набор.Добавить();
НовЗапись.НашФилиал= пвФилиал;
НовЗапись.Номенклатура= Стр.Номенклатура;
НовЗапись.ОстатокОбщий = Стр.Остаток;
НовЗапись.ЦенаЗакупки = Цена;
Набор.Записать();
КонецЦикла;
bizisoft @ Сегодня, 15:51
,
По коду вы считываете абсолютно все имеющиеся записи регистра, и потом их же плюс новые записи записываете.
Набор = РегистрыСведений.ТоварыФилиалов.СоздатьНаборЗаписей();
Набор.Отбор.НашФилиал.Установить(пвФилиал);
Набор.Отбор.Номенклатура.Установить(Стр.Номенклатура);
Набор.Прочитать();
bizisoft @ Вчера, 22:03
,
Нашел как по другому сделать
ОбъектРегистр = РегистрыСведений.ТоварыФилиалов.СоздатьНаборЗаписей();
ОбъектРегистр.ОбменДанными.Загрузка = Истина;
СтруктураОтбора = Новый Структура();
//Измерения
СтруктураОтбора.Вставить("НашФилиал", пвФилиал);
СтруктураОтбора.Вставить("Номенклатура", Стр.Номенклатура);
//Ресурсы
СтруктураОтбора.Вставить("ОстатокОбщий", Стр.Остаток);
СтруктураОтбора.Вставить("ЦенаЗакупки", Цена);
ОбъектРегистр.Отбор.НашФилиал.Установить(СтруктураОтбора.НашФилиал);
ОбъектРегистр.Отбор.Номенклатура.Установить(СтруктураОтбора.Номенклатура);
ЗаполнитьЗначенияСвойств(ОбъектРегистр.Добавить(), СтруктураОтбора);
ОбъектРегистр.Записать(Истина);
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua