В продолжение темы: КД: Передача параметров из 7.7 в 8.x
Собственно в продолжение темы: "КД: Передача параметров из 7.7 в 8.x" INFOSTART.RU
PPS. Спасибо Totoro за дополнение, есть еще один вариант передачи параметров. Иногда бывает необходимо передать параметр не для всей конвертации, а для отдельного объекта (или более того, нескольких объектов). Например, если у приемника нет реквизита для значения, а само значение нужно для выбора варианта заполнения объекта (см. счет учета в основных средствах в семерке и, скажем, в УПП). Тогда поможет такой трюк:
Если вставить в "При выгрузке" или в "После выгрузки" ПКО код:
УзелПараметра = СоздатьУзел("ЗначениеПараметра");
УстановитьАтрибут(УзелПараметра, "Имя", "СообщениеВсемуМиру");
ЗаписатьЭлемент(УзелПараметра, "Значение", "Здравствуй, Мир!");
ДобавитьПодчиненный(Приемник, УзелПараметра);
то в обработчике "После загрузки" этого ПКО параметр можно прочитать через соответствие "ПараметрыОбъекта":
НашПривет = ПараметрыОбъекта["СообщениеВсемуМиру"];
Показать
Здесь нужно прояснить несколько моментов, объясню на примере переноса плана счетов из 1С 77 в 1С 8.Х
Для ПКО "Хозрасчетный" для обработчика события "При выгрузке" напишем следующий код, где мы передадим характеристики передаваемого счета:
Во-первых, для чего тут
Это нужно для того, чтобы избежать ошибки при передаче пустой ссылки
Во-вторых, код
Обратите внимание, что я передаю лишний параметр в функции "ВыгрузитьПоПравилу", чуть позже я объясню зачем
В третьих, код
Здесь по сравнению с оригинальной статьей, я дописал "cloneNode(1)", иначе 1С 77 падала с ошибкой
Далее в том же ПКО в обработчике события "После выгрузки" напишем код
Здесь я думаю все понятно, мы на основании переданных через параметры дополнительных характеристик счета создаем счет в базе Приемник.
Осталось только разобрать почему для функции "ВыгрузитьПоПравилу" я обозначил лишний параметр (см. выше)
Здесь в модуле обработки "V77Exp.ert" после того, как мы вставили код из файла "МодульВыгрузки.txt" мы произведем несколько изменений, а именно:
Во-первых, в самом начале переобъявим функцию "ВыгрузитьПоПравилу" следующим образом:
Обратите внимание на лишний параметр "ФлагПропустить", вот его мы как раз и задействуем выше.
Во-вторых, найдем саму функцию "ВыгрузитьПоПравилу" и заменим заголовок на следующий:
Здесь все логично и понятно
И последнее, найдем в функции "ВыгрузитьПоПравилу" код, который обрабатывает обработчик события "При выгрузке", ведь именно в ней мы прописали нестандартный код для передачи параметров. Если мы оставим этот код по умолчанию, то 1С 77 будет вываливаться с ошибкой, поэтому, используя параметры "ФлагПропустить", мы обойдем этот код, вот так:
Таким образом, мы передали дополнительные характеристики счета из 1С 77 в 1С 8.Х
Спасибо и удачи всем!
PPS. Спасибо Totoro за дополнение, есть еще один вариант передачи параметров. Иногда бывает необходимо передать параметр не для всей конвертации, а для отдельного объекта (или более того, нескольких объектов). Например, если у приемника нет реквизита для значения, а само значение нужно для выбора варианта заполнения объекта (см. счет учета в основных средствах в семерке и, скажем, в УПП). Тогда поможет такой трюк:
Если вставить в "При выгрузке" или в "После выгрузки" ПКО код:
УзелПараметра = СоздатьУзел("ЗначениеПараметра");
УстановитьАтрибут(УзелПараметра, "Имя", "СообщениеВсемуМиру");
ЗаписатьЭлемент(УзелПараметра, "Значение", "Здравствуй, Мир!");
ДобавитьПодчиненный(Приемник, УзелПараметра);
то в обработчике "После загрузки" этого ПКО параметр можно прочитать через соответствие "ПараметрыОбъекта":
НашПривет = ПараметрыОбъекта["СообщениеВсемуМиру"];
Здесь нужно прояснить несколько моментов, объясню на примере переноса плана счетов из 1С 77 в 1С 8.Х
Для ПКО "Хозрасчетный" для обработчика события "При выгрузке" напишем следующий код, где мы передадим характеристики передаваемого счета:
Если Источник.Активный = 1 Тогда
Вид = "Активный"
ИначеЕсли Источник.Активный = 2 Тогда
Вид = "Пассивный"
Иначе
Вид = "Активный/Пассивный"
КонецЕсли;
УзелПараметра = СоздатьУзел("ЗначениеПараметра");
УстановитьАтрибут(УзелПараметра, "Имя", "Вид");
УстановитьАтрибут(УзелПараметра, "Тип", "Строка");
ЗаписатьЭлемент(УзелПараметра, "Значение", Вид);
ДобавитьПодчиненный(Приемник, УзелПараметра);
УзелПараметра = СоздатьУзел("ЗначениеПараметра");
УстановитьАтрибут(УзелПараметра, "Имя", "Забалансовый");
УстановитьАтрибут(УзелПараметра, "Тип", "Число");
ЗаписатьЭлемент(УзелПараметра, "Значение", Источник.Забалансовый);
ДобавитьПодчиненный(Приемник, УзелПараметра);
УзелПараметра = СоздатьУзел("ЗначениеПараметра");
УстановитьАтрибут(УзелПараметра, "Имя", "Количественный");
УстановитьАтрибут(УзелПараметра, "Тип", "Число");
ЗаписатьЭлемент(УзелПараметра, "Значение", Источник.Количественный);
ДобавитьПодчиненный(Приемник, УзелПараметра);
УзелПараметра = СоздатьУзел("ЗначениеПараметра");
_УзелСсылки = ВыгрузитьПоПравилу(Источник.Родитель(),,,,"Хозрасчетный",,,,1);
УстановитьАтрибут(УзелПараметра, "Имя", "Родитель");
УстановитьАтрибут(УзелПараметра, "Тип", "ПланСчетовСсылка.Хозрасчетный");
ДобавитьПодчиненный(УзелПараметра, _УзелСсылки.cloneNode(1));
ДобавитьПодчиненный(Приемник, УзелПараметра);
Для к = 1 По 3 Цикл
Если Источник.КоличествоСубконто() < к Тогда
Прервать;
Иначе
УзелПараметра = СоздатьУзел("ЗначениеПараметра");
_УзелСсылки = ВыгрузитьПоПравилу(Источник.ВидСубконто(к-1),,,,"ВидыСубконтоХозрасчетные",,,,1);
УстановитьАтрибут(УзелПараметра, "Имя", "ВидСубконто"+Строка(к));
УстановитьАтрибут(УзелПараметра, "Тип", "ПланВидовХарактеристикСсылка.ВидыСубконтоХозрасчетные");
ДобавитьПодчиненный(УзелПараметра, _УзелСсылки.cloneNode(1));
ДобавитьПодчиненный(Приемник, УзелПараметра);
УзелПараметра = СоздатьУзел("ЗначениеПараметра");
УстановитьАтрибут(УзелПараметра, "Имя", "Количественный"+Строка(к));
УстановитьАтрибут(УзелПараметра, "Тип", "Число");
ЗаписатьЭлемент(УзелПараметра, "Значение", Источник.Количественный);
ДобавитьПодчиненный(Приемник, УзелПараметра);
УзелПараметра = СоздатьУзел("ЗначениеПараметра");
УстановитьАтрибут(УзелПараметра, "Имя", "ТолькоОбороты"+Строка(к));
УстановитьАтрибут(УзелПараметра, "Тип", "Число");
ЗаписатьЭлемент(УзелПараметра, "Значение", Источник.ТолькоОбороты(к-1));
ДобавитьПодчиненный(Приемник, УзелПараметра);
КонецЕсли;
КонецЦикла;
ПоказатьВо-первых, для чего тут
УстановитьАтрибут(УзелПараметра, "Тип", "ПланСчетовСсылка.Хозрасчетный");
Это нужно для того, чтобы избежать ошибки при передаче пустой ссылки
Во-вторых, код
_УзелСсылки = ВыгрузитьПоПравилу(Источник.Родитель(),,,,"Хозрасчетный",,,,1);
Обратите внимание, что я передаю лишний параметр в функции "ВыгрузитьПоПравилу", чуть позже я объясню зачем
В третьих, код
ДобавитьПодчиненный(УзелПараметра, _УзелСсылки.cloneNode(1));
Здесь по сравнению с оригинальной статьей, я дописал "cloneNode(1)", иначе 1С 77 падала с ошибкой
Далее в том же ПКО в обработчике события "После выгрузки" напишем код
Если НЕ Объект.Предопределенный И ПараметрыОбъекта<>Неопределено Тогда
Объект.Родитель = ПараметрыОбъекта.Получить("Родитель");
Объект.Порядок = Объект.ПолучитьПорядокКода();
Объект.Количественный = ПараметрыОбъекта.Получить("Количественный");
Объект.Забалансовый = ПараметрыОбъекта.Получить("Забалансовый");
Вид = ПараметрыОбъекта.Получить("Вид");
Если Вид = "Активный" Тогда
Объект.Вид = ВидСчета.Активный;
ИначеЕсли Вид = "Пассивный" Тогда
Объект.Вид = ВидСчета.Пассивный;
ИначеЕсли Вид = "Активный/Пассивный" Тогда
Объект.Вид = ВидСчета.АктивноПассивный;
КонецЕсли;
Если ПараметрыОбъекта["ВидСубконто1"] <> Неопределено Тогда
Если Объект.ВидыСубконто.Количество() > 0 Тогда
ВидСубконто = Объект.ВидыСубконто[0];
Иначе
ВидСубконто = Объект.ВидыСубконто.Вставить(0);
КонецЕсли;
ВидСубконто.ВидСубконто = ПараметрыОбъекта["ВидСубконто1"];
ВидСубконто.Количественный = ПараметрыОбъекта["Количественный1"];
ВидСубконто.ТолькоОбороты = ПараметрыОбъекта["ТолькоОбороты1"];
ИначеЕсли Объект.ВидыСубконто.Количество() > 0 Тогда
Объект.ВидыСубконто.Удалить(0);
КонецЕсли;
Если ПараметрыОбъекта["ВидСубконто2"] <> Неопределено Тогда
Если Объект.ВидыСубконто.Количество() > 1 Тогда
ВидСубконто = Объект.ВидыСубконто[1];
Иначе
ВидСубконто = Объект.ВидыСубконто.Вставить(1);
КонецЕсли;
ВидСубконто.ВидСубконто = ПараметрыОбъекта["ВидСубконто2"];
ВидСубконто.Количественный = ПараметрыОбъекта["Количественный2"];
ВидСубконто.ТолькоОбороты = ПараметрыОбъекта["ТолькоОбороты2"];
ИначеЕсли Объект.ВидыСубконто.Количество() > 1 Тогда
Объект.ВидыСубконто.Удалить(1);
КонецЕсли;
Если ПараметрыОбъекта["ВидСубконто3"] <> Неопределено Тогда
Если Объект.ВидыСубконто.Количество() > 2 Тогда
ВидСубконто = Объект.ВидыСубконто[2];
Иначе
ВидСубконто = Объект.ВидыСубконто.Вставить(2);
КонецЕсли;
ВидСубконто.ВидСубконто = ПараметрыОбъекта["ВидСубконто3"];
ВидСубконто.Количественный = ПараметрыОбъекта["Количественный3"];
ВидСубконто.ТолькоОбороты = ПараметрыОбъекта["ТолькоОбороты3"];
ИначеЕсли Объект.ВидыСубконто.Количество() > 2 Тогда
Объект.ВидыСубконто.Удалить(2);
КонецЕсли;
КонецЕсли;
ПоказатьЗдесь я думаю все понятно, мы на основании переданных через параметры дополнительных характеристик счета создаем счет в базе Приемник.
Осталось только разобрать почему для функции "ВыгрузитьПоПравилу" я обозначил лишний параметр (см. выше)
Здесь в модуле обработки "V77Exp.ert" после того, как мы вставили код из файла "МодульВыгрузки.txt" мы произведем несколько изменений, а именно:
Во-первых, в самом начале переобъявим функцию "ВыгрузитьПоПравилу" следующим образом:
Функция ВыгрузитьПоПравилу(Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО = "", УзелСсылки = "", ТолькоПолучитьУзелСсылки = 0, НомерПКО = 0, ФлагПропустить = 0) Далее
Обратите внимание на лишний параметр "ФлагПропустить", вот его мы как раз и задействуем выше.
Во-вторых, найдем саму функцию "ВыгрузитьПоПравилу" и заменим заголовок на следующий:
Функция ВыгрузитьПоПравилу(Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО = "", УзелСсылки = "", ТолькоПолучитьУзелСсылки = 0,
НомерПКО = 0, ФлагПропустить = 0)
Здесь все логично и понятно
И последнее, найдем в функции "ВыгрузитьПоПравилу" код, который обрабатывает обработчик события "При выгрузке", ведь именно в ней мы прописали нестандартный код для передачи параметров. Если мы оставим этот код по умолчанию, то 1С 77 будет вываливаться с ошибкой, поэтому, используя параметры "ФлагПропустить", мы обойдем этот код, вот так:
Если (ПолучитьРеквизитПКО(НомерПКО, "ПриВыгрузке") = 1) И (ФлагПропустить = 0) Тогда
Таким образом, мы передали дополнительные характеристики счета из 1С 77 в 1С 8.Х
Спасибо и удачи всем!
По теме из базы знаний
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот