2. Внешний вид обработки и назначения
1. Конфигурация ERP Управление Холдингом 2.5
Требуется разработать обработку для списка объектов установить общий реквизит cls_КодSAP вместо реквизита, который создали отдельно.
У каждого объекта этот реквизит называется по-разному, например, у справочника ВидыНоменклатуры cls_Код, ВидыРабочихЦентров cls_КодSAP так же, как и общий реквизит cls_КодSAP, СкладскиеПомещения cls_КодСАП, План видов характеристик СтатьиРасходов кл_Код.
Список объектов:
1. Справочники: ВидыНоменклатуры, ВидыРабочихЦентров, Номенклатура, Партнеры, РабочиеЦентры, РемонтныеМероприятия, СкладскиеПомещения, Склады, ХарактеристикиНоменклатуры, cls_СферыДеятельности, Организации, СтруктураПредприятия.
2. План видов характеристик: СтатьиДоходов, СтатьиРасходов.
По нажатии кнопки «ВыгрузитьСтарыеКоды» все коды выгружаются в выбранный в интерфейсе текстовый файл по полям «ВидСправочника», «cls_Код» и «ГУИД». Т.е. по Уникальным идентификаторам.
При варианте установки флага «Записать» по кнопке «Установить cls_КодSAP» устанавливается коды cls_КодSAP из источника (текстовый файл).
Предварительно можно проверить алгоритм без установки флага «Записать».
После установки общего реквизита cls_КодSAP все реквизиты cls_Код, cls_КодSAP, cls_КодСАП и кл_Код удаляем с объектов.
2. Внешний вид обработки и назначения
Установка общего реквизита cls код SAP
Процедуры и функции обработки:
#Область Установить_cls_КодSAP
&НаКлиенте
Процедура Установить_cls_КодSAP(Команда)
Если Не ЗначениеЗаполнено(ПутьКФайлуTXT) Тогда
Сообщить("Не выбрать ПутьКФайлуTXT");
Возврат;
КонецЕсли;
ФайлTXT = Новый ТекстовыйДокумент;
ФайлTXT.Прочитать(ПутьКФайлуTXT);
ОбработатьСправочники(ПутьКФайлуTXT, ФайлTXT, Записать);
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ОбработатьСправочники(ПутьКФайлуTXT, ФайлTXT, Записать)
К = 0;
ОписаниеТипаСтрока36 = ОбщегоНазначения.ОписаниеТипаСтрока(36);
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("ВидСправочника", ОписаниеТипаСтрока36);
ТЗ.Колонки.Добавить("cls_Код", ОписаниеТипаСтрока36);
ТЗ.Колонки.Добавить("ГУИД", ОписаниеТипаСтрока36);
Для НомерСтроки = 1 по ФайлTXT.КоличествоСтрок() Цикл
ТекСтрока = ФайлTXT.ПолучитьСтроку(НомерСтроки);
МассивСтрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивСлов(ТекСтрока, ";");
ВидСправочника = МассивСтрок[0];
cls_Код = МассивСтрок[1];
ГУИД = МассивСтрок[2];
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.ВидСправочника = ВидСправочника;
НоваяСтрока.cls_Код = cls_Код;
НоваяСтрока.ГУИД = ГУИД;
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТЗ.ВидСправочника КАК ВидСправочника,
| ТЗ.cls_Код КАК cls_Код,
| ТЗ.ГУИД КАК ГУИД
|ПОМЕСТИТЬ втТЗ
|ИЗ
| &ТЗ КАК ТЗ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| втТЗ.ВидСправочника КАК ВидСправочника,
| втТЗ.cls_Код КАК cls_Код,
| втТЗ.ГУИД КАК ГУИД
|ИЗ
| втТЗ КАК втТЗ";
Запрос.УстановитьПараметр("ТЗ", ТЗ);
РезультатЗапроса = Запрос.Выполнить();
таб = РезультатЗапроса.Выгрузить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
К = К + 1;
ВидСправочника = Выборка.ВидСправочника;
cls_Код = Выборка.cls_Код;
ГУИД = Выборка.ГУИД;
//Сообщить("ВидСправочника = " + ВидСправочника);
//Сообщить("cls_Код = " + cls_Код);
//Сообщить("ГУИД = " + ГУИД);
ГУИД = Новый УникальныйИдентификатор(ГУИД);
Если ВидСправочника = "СтатьиДоходов" или ВидСправочника = "СтатьиРасходов" Тогда
Ссылка = ПланыВидовХарактеристик[ВидСправочника].ПолучитьСсылку(ГУИД);
Иначе
Ссылка = Справочники[ВидСправочника].ПолучитьСсылку(ГУИД);
КонецЕсли;
Если ЗначениеЗаполнено(Ссылка) Тогда
СпрОбъект = Ссылка.ПолучитьОбъект();
СпрОбъект.cls_КодSAP = Выборка.cls_Код;
Если Записать Тогда
СпрОбъект.Записать();
КонецЕсли;
Если К >= 1 Тогда
//Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Сообщить("Обработан " + К + " элементов!");
КонецПроцедуры
#КонецОбласти
#Область ВыгрузитьСтарыеКоды
&НаКлиенте
Процедура ВыгрузитьСтарыеКоды(Команда)
Файл = Новый Файл(ПутьКФайлуTXT);
Если Не Файл.Существует() Тогда
Сообщить("Файл не существует или нет доступа к файлу тхт!");
Возврат;
КонецЕсли;
ФайлTXT = Новый ТекстовыйДокумент;
ВыгрузитьКодыСправочников(ПутьКФайлуTXT, ФайлTXT);
ФайлTXT.Записать(ПутьКФайлуTXT);
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ВыгрузитьКодыСправочников(ПутьКФайлуTXT, ФайлTXT)
К = 0;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ""ВидыНоменклатуры"" КАК ВидСправочника,
| ВидыНоменклатуры.cls_Код КАК cls_Код,
| УНИКАЛЬНЫЙИДЕНТИФИКАТОР(ВидыНоменклатуры.Ссылка) КАК ГУИД
|ИЗ
| Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
|ГДЕ
| ВидыНоменклатуры.cls_Код <> """"
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ""ВидыРабочихЦентров"",
| ВидыРабочихЦентров.cls_КодSAP,
| УНИКАЛЬНЫЙИДЕНТИФИКАТОР(ВидыРабочихЦентров.Ссылка)
|ИЗ
| Справочник.ВидыРабочихЦентров КАК ВидыРабочихЦентров
|ГДЕ
| ВидыРабочихЦентров.cls_КодSAP <> """"
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ""Номенклатура"",
| Номенклатура.cls_Код,
| УНИКАЛЬНЫЙИДЕНТИФИКАТОР(Номенклатура.Ссылка)
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.cls_Код <> """"
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ""Партнеры"",
| Партнеры.cls_КодSAP,
| УНИКАЛЬНЫЙИДЕНТИФИКАТОР(Партнеры.Ссылка)
|ИЗ
| Справочник.Партнеры КАК Партнеры
|ГДЕ
| Партнеры.cls_КодSAP <> """"
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ""РабочиеЦентры"",
| РабочиеЦентры.cls_КодSAP,
| УНИКАЛЬНЫЙИДЕНТИФИКАТОР(РабочиеЦентры.Ссылка)
|ИЗ
| Справочник.РабочиеЦентры КАК РабочиеЦентры
|ГДЕ
| РабочиеЦентры.cls_КодSAP <> """"
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ""РемонтныеМероприятия"",
| РемонтныеМероприятия.cls_Код,
| УНИКАЛЬНЫЙИДЕНТИФИКАТОР(РемонтныеМероприятия.Ссылка)
|ИЗ
| Справочник.РемонтныеМероприятия КАК РемонтныеМероприятия
|ГДЕ
| РемонтныеМероприятия.cls_Код <> """"
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ""СкладскиеПомещения"",
| СкладскиеПомещения.cls_КодСАП,
| УНИКАЛЬНЫЙИДЕНТИФИКАТОР(СкладскиеПомещения.Ссылка)
|ИЗ
| Справочник.СкладскиеПомещения КАК СкладскиеПомещения
|ГДЕ
| СкладскиеПомещения.cls_КодСАП <> """"
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ""Склады"",
| Склады.cls_КодСАП,
| УНИКАЛЬНЫЙИДЕНТИФИКАТОР(Склады.Ссылка)
|ИЗ
| Справочник.Склады КАК Склады
|ГДЕ
| Склады.cls_КодСАП <> """"
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ""ХарактеристикиНоменклатуры"",
| ХарактеристикиНоменклатуры.cls_Код,
| УНИКАЛЬНЫЙИДЕНТИФИКАТОР(ХарактеристикиНоменклатуры.Ссылка)
|ИЗ
| Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
|ГДЕ
| ХарактеристикиНоменклатуры.cls_Код <> """"
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ""cls_СферыДеятельности"",
| cls_СферыДеятельности.КодCls,
| УНИКАЛЬНЫЙИДЕНТИФИКАТОР(cls_СферыДеятельности.Ссылка)
|ИЗ
| Справочник.cls_СферыДеятельности КАК cls_СферыДеятельности
|ГДЕ
| cls_СферыДеятельности.КодCls <> """"
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ""Организации"" КАК ВидСправочника,
| Организации.кл_Код КАК cls_Код,
| УНИКАЛЬНЫЙИДЕНТИФИКАТОР(Организации.Ссылка) КАК ГУИД
|ИЗ
| Справочник.Организации КАК Организации
|ГДЕ
| Организации.кл_Код <> """"
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ""СтруктураПредприятия"",
| СтруктураПредприятия.кл_Код,
| УНИКАЛЬНЫЙИДЕНТИФИКАТОР(СтруктураПредприятия.Ссылка)
|ИЗ
| Справочник.СтруктураПредприятия КАК СтруктураПредприятия
|ГДЕ
| СтруктураПредприятия.кл_Код <> """"
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ""СтатьиДоходов"",
| СтатьиДоходов.кл_Код,
| УНИКАЛЬНЫЙИДЕНТИФИКАТОР(СтатьиДоходов.Ссылка)
|ИЗ
| ПланВидовХарактеристик.СтатьиДоходов КАК СтатьиДоходов
|ГДЕ
| СтатьиДоходов.кл_Код <> """"
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ""СтатьиРасходов"",
| СтатьиРасходов.кл_Код,
| УНИКАЛЬНЫЙИДЕНТИФИКАТОР(СтатьиРасходов.Ссылка)
|ИЗ
| ПланВидовХарактеристик.СтатьиРасходов КАК СтатьиРасходов
|ГДЕ
| СтатьиРасходов.кл_Код <> """"";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
К = К + 1;
ФайлTXT.ДобавитьСтроку("" + Выборка.ВидСправочника + ";" + Выборка.cls_Код + ";" + Выборка.ГУИД);
Если К >= 1 Тогда
//Прервать;
КонецЕсли;
КонецЦикла;
Сообщить("Обработано " + К + " элементов!");
КонецПроцедуры
&НаКлиенте
Процедура ПутьКФайлуTXTНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытияФайла.ПолноеИмяФайла = "";
ДиалогОткрытияФайла.Фильтр = "txt";
ДиалогОткрытияФайла.МножественныйВыбор = Истина;
ДиалогОткрытияФайла.Заголовок = "Выберите txt файл";
Если ДиалогОткрытияФайла.Выбрать() Тогда
МассивФайлов = ДиалогОткрытияФайла.ВыбранныеФайлы;
Для Каждого ИмяФайла Из МассивФайлов Цикл
ВыбФайл = Новый Файл(ИмяФайла);
ПутьКФайлуTXT = ИмяФайла;
КонецЦикла;
Иначе
Предупреждение("Файл не выбран!");
КонецЕсли;
КонецПроцедуры
#КонецОбласти
Специалист компании ООО "Кодерлайн"
Марс Айзатуллов
