INFOSTART EVENT 2018 EDUCATION

Второй тур голосования за доклады.
Окончание 5 сентября.

Бобрышов Александр | Ведущий программист | ООО "Проф ИТ"

«Как организовать консолидацию данных из трёх десятков предприятий не привлекая программистов на местах?»

Давайте представим, что у нас есть "зоопарк" из разных конфигураций 1С, от разных организаций одного холдинга, занимающихся совершенно непохожей деятельностью (от промышленного производства до туристической деятельности). Бухгалтерские данные должны стекаться из этих предприятий в управляющую компанию, учет в которой ведется в системе, принципиально отличающейся от 1С. Некоторые дочерние организации работают на решениях без штатных программистов и находятся за 1000+ км. Я расскажу, какую архитектуру и технологии выбрать для такого обмена. Как наладить выгрузку данных по одной кнопке без изменения конфигурации предприятия. Как создавать и модифицировать правила обмена для разных предприятий из офиса управляющей компании. Как следить за состоянием обмена из единого центра управления.

Конвертация данных. Произвольная иерархия справочника

Обмен - Перенос данных из 1C8 в 1C8

11
Источник: Бухгалтерский учет ред. 4.5 платформы 7.7. Приемник: Бухгалтерия предприятия 3.0. Задача: При загрузке справочника «Номенклатура» в приемнике, все элементы поместить в папку «Товары» с сохранением имеющейся иерархии в 7.7.

К примеру, такая задача может возникнуть, когда справочник необходимо разбить по папкам в зависимости от счетов в 7.7. Элементы 10-го счета нужно поместить в папку «Материалы», а элементы счета 41 в папку «Товары».

Решение: Создать ПКО «Номенклатура». В ПКС «Родитель» в процедуре «Перед выгрузкой» прописать следующее:

Это означает, что если у текущего элемента в момент выгрузки нет родителя, то значит выгрузка дошла до элемента самого верхнего уровня и что необходимо указать свою иерархию. Необходимо создать ПКО «Номенклатура_Родитель» с пустым источником и приемником справочник Номенклатура.

Т.к. мы знаем, что это группа, то достаточно создать 2 ПКС «Наименование» и «ЭтоГруппа». В процедуре «Перед выгрузкой» указать значение наименования как

А в ПКС «ЭтоГруппа»:

Также в ПКО «Номенклатура» необходимо указать поля поиска «Наименование, Родитель, ЭтоГруппа». Дальше уже по мере необходимости.

Ну и результат будет уже такой, как и задумали.

 

 

11

См. также

Комментарии
Сортировка: Древо
1. Marik 58 10.04.18 08:17 Сейчас в теме
Думаю не будет работать это решение

1. Поиск идет по наименованию - не лучшее решение
2. Предполагаю что уникальность кодов в справочнике Приемник установлен в "во всем справочнике", т.е., придется еще генерировать код "Автоматически генерировать код или номер, если не задан". Это значит мы отказываемся от поиска по коду, которая априори лучшее решение.

Вот мое решение, чуть другое, но проблема таже
1. Есть 1С Бухгалтерия 77, в котором есть 3 справочника: Товары,Номенклатура,Материалы
2. Есть 1С Бухгалтерия 81., в котором есть только ОДИН справочник Номенклатура
3. Надо из семерки перебросит элементы всех трех справочников с сохранением иерархии каждой из них в восьмерку в определенные папки (Товары в ТОВАРЫ, Материалы в МАТЕРИАЛЫ и т.д.)

1. Указываем ПКО для справочников Товары,Материалы,Номенклатура, где приемником будет выступать один на всех справочник Номенклатура. ПКС оставляем в удобном виде, а именно: поиск по коду,родителю и группе


2. В каждом ПКС для каждого ПКО для кода и родителя прописываем следующее:
для кода

чтобы привести длину и формат кода под длину и формат кода приемника

для родителя

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

ну сам код для процедуры УстановитьКод


И последнее, чтобы не было коллизей, я в обязательном порядке делаю перенумерацию в справочниках Источника, чтобы не было пересечений в Приемнике
вот код
	Счетчик = 99;
	Спр = СоздатьОбъект("Справочник.Номенклатура");
	Спр.ВыбратьЭлементы();
	Пока Спр.ПолучитьЭлемент()=1 Цикл
		Счетчик = Счетчик+1;
		Рез = Строка(Счетчик);
		Пока СтрДлина(Рез)<7 Цикл
			Рез = "0"+Рез;
		КонецЦикла;
		Спр.Код = Рез;
		Спр.Записать();
	КонецЦикла;
	
	Счетчик = 299;
	Спр = СоздатьОбъект("Справочник.Материалы");
	Спр.ВыбратьЭлементы();
	Пока Спр.ПолучитьЭлемент()=1 Цикл
		Счетчик = Счетчик+1;
		Спр.Код = Счетчик;
		Спр.Записать();
	КонецЦикла;

	Счетчик = 799;
	Спр = СоздатьОбъект("Справочник.Товары");
	Спр.ВыбратьЭлементы();
	Пока Спр.ПолучитьЭлемент()=1 Цикл
		Счетчик = Счетчик+1;
		Спр.Код = Счетчик;
		Спр.Записать();
	КонецЦикла
Показать


здесь я раскидываю записи в каждом справочнике в своем уникальном диапазоне, так чтобы в Приемнике они не затерли уже существующие записи. Таким образом можно надежно перебросить записи разных справочников в один справочник и в указанную группу
MSK_Step; sergio199; +2 Ответить
2. Marik 58 10.04.18 08:22 Сейчас в теме
Поправка - я хотел сказать, что решение не универсальное, а не
не будет работать
3. MSK_Step 21 11.04.18 11:30 Сейчас в теме
Больше таких статей на инфостарте, полезно, кратко, наглядно - все по делу. ++
Оставьте свое сообщение