|
8.3. Непонятка с табличными частями. | ☑ | ||
---|---|---|---|---|
0
Target1025
06.11.20
✎
18:42
|
Пишу внешнюю обработку, которая должна править документ Премии. В премиях есть таблица Начисления, где проставляются результаты; и есть таблица РаспределениеПоТерриториямУсловиямТруда, которая, в общем случае стыкуется "один-в-один", но вот туда результаты не пишутся. Сложность в том, что отладить невозможно, т.к. обработка внешняя.
Код выглядит так: ВладелецФормы.Модифицированность = Истина; РаспределениеПоТерриториямУсловиямТруда = ВладелецФормы.Объект.РаспределениеПоТерриториямУсловиямТруда; Для Каждого Стр из ВладелецФормы.Объект.Начисления Цикл Стр.Результат = МассивДанных[Инд]; НомерТекСтроки = Стр.номерСтроки; Сообщить("НомерТекСтроки = " + НомерТекСтроки); Отбор = новый Структура; Отбор.Вставить("ИдентификаторСтроки",НомерТекСтроки); Строки = РаспределениеПоТерриториямУсловиямТруда.НайтиСтроки(Отбор); Сообщить("Строки.Количество = " + Строки.КОличество()); Если Строки.Количество() = 1 Тогда Для Каждого Стр2 Из Строки Цикл Сообщить("Стр2.результат="+Стр2.результат); Стр2.результат = МассивДанных[Инд]; Сообщить("Стр2.результат="+Стр2.результат); КонецЦикла; КонецЕсли; Инд = Инд + 1; Конеццикла; Стр2.результат меняется, пишется примерно так: НомерТекСтроки = 152 Строки.Количество = 1 Стр2.результат=0 Стр2.результат=30 737 Но вот в дальнейшем, в документе, таблица начислений имеет проставленный из массива результат, а таблица распределений - нет. Голову, сломал, не могу понять, что некорректно |
|||
1
GreyK
06.11.20
✎
18:51
|
(0) В чём трудности отладки внешнего файла обработки? Прав нет?
|
|||
2
SleepyHead
гуру
06.11.20
✎
18:56
|
(0) Ну так посмотри, как в форме пересчитываются результаты распределения по территориям, сделай так же или похоже.
|
|||
3
Target1025
06.11.20
✎
18:57
|
(1) Когда работает подключенная внешняя обработка, я могу достучаться до таблиц через ВладельцаФормы и правлю таблицы на клиентской части кода, когда я запускаю её отдельно, мне нужно обрабатывать объект на серверной части, то есть код получается разный.
|
|||
4
Target1025
06.11.20
✎
18:57
|
(2) Попробую.
|
|||
5
DrZombi
гуру
06.11.20
✎
22:05
|
(0) Бред сивой кобылы...
|
|||
6
DrZombi
гуру
06.11.20
✎
22:12
|
+(0) По пунктам:
1. Создаете себе расширение, для отладки внешних обработок (если конфа на поддержке) 2. В справочник "ДополнительныеОтчетыИОбработки" добавить реквизиты: 2.1 СОГ_ПолныйПутьДляОтладки - Полный путь к отладке (строка) 2.2 СОГ_ИспользоватьОтладку - Булево, признак того, что отладка 3. В общий модуле "ДополнительныеОтчетыИОбработки", нужно править одну лишь функцию "СОГ_ПодключитьВнешнююОбработку" (код приложил ниже в топике) 4. Настроить на своем ПК, удаленный доступ, т.к. отладка возможно только так. Пример пути к обработке: \\ВашПК\ОбщийДоступДляСервера\Отладка ЗУП\ВашаОтбработка.epf 5. В конфигураторе так же открыть сетевой путь: \\ВашПК\ОбщийДоступДляСервера\Отладка ЗУП\ВашаОтбработка.epf 6. Не забудь, настроить доступ к своему сетевому ресурсу от сервера. |
|||
7
DrZombi
гуру
06.11.20
✎
22:14
|
+(0)Код: В общий модуле "ДополнительныеОтчетыИОбработки", функция "СОГ_ПодключитьВнешнююОбработку"
В комментариях "//+" и "//-", то что не типовое от 1с :) &Вместо("ПодключитьВнешнююОбработку") Функция СОГ_ПодключитьВнешнююОбработку(Ссылка) Экспорт //+ //СОГ_ДопФункции.ПроверитьВерсиюИсполняемогоКода("3.0.83.25"); //пропустил... маленький приоритет //- СтандартнаяОбработка = Истина; Результат = Неопределено; ИнтеграцияПодсистемБСП.ПриПодключенииВнешнейОбработки(Ссылка, СтандартнаяОбработка, Результат); Если Не СтандартнаяОбработка Тогда Возврат Результат; КонецЕсли; // Проверка корректности переданных параметров. Если ТипЗнч(Ссылка) <> Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки") Или Ссылка = Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка() Тогда Возврат Неопределено; КонецЕсли; // Подключение #Если ТолстыйКлиентОбычноеПриложение Тогда ИмяОбработки = ПолучитьИмяВременногоФайла(); ХранилищеОбработки = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ХранилищеОбработки"); ДвоичныеДанные = ХранилищеОбработки.Получить(); ДвоичныеДанные.Записать(ИмяОбработки); Возврат ИмяОбработки; #КонецЕсли Вид = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Вид"); Если Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет Или Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда Менеджер = ВнешниеОтчеты; Иначе Менеджер = ВнешниеОбработки; КонецЕсли; //+ Попытка Если ТипЗнч(Ссылка) = Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки") Тогда ПараметрыЗапуска = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "БезопасныйРежим, ХранилищеОбработки, СОГ_ПолныйПутьДляОтладки, СОГ_ИспользоватьОтладку"); Если ПараметрыЗапуска.СОГ_ИспользоватьОтладку = Истина и НЕ ПустаяСтрока(ПараметрыЗапуска.СОГ_ПолныйПутьДляОтладки) Тогда АдресВоВременномХранилище = СокрЛП(ПараметрыЗапуска.СОГ_ПолныйПутьДляОтладки); //Указывать сетевой путь, т.к. обработка запускается с Сервера... пФайл = Новый Файл(АдресВоВременномХранилище); Если НЕ (пФайл.Существует() и пФайл.ЭтоФайл()) Тогда //Нет файла, либо не доступен... АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ПараметрыЗапуска.ХранилищеОбработки.Получить()); КонецЕсли; Иначе АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ПараметрыЗапуска.ХранилищеОбработки.Получить()); КонецЕсли; Иначе //- ПараметрыЗапуска = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "БезопасныйРежим, ХранилищеОбработки"); АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ПараметрыЗапуска.ХранилищеОбработки.Получить()); //+ КонецЕсли; Исключение //Добавлено в исключение, чтобы восстановить работоспособность... ПараметрыЗапуска = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "БезопасныйРежим, ХранилищеОбработки"); АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ПараметрыЗапуска.ХранилищеОбработки.Получить()); КонецПопытки; //- Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме"); ИспользуютсяПрофилиБезопасности = МодульРаботаВБезопасномРежиме.ИспользуютсяПрофилиБезопасности(); Иначе ИспользуютсяПрофилиБезопасности = Ложь; КонецЕсли; Если ИспользуютсяПрофилиБезопасности Тогда МодульРаботаВБезопасномРежимеСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежимеСлужебный"); БезопасныйРежим = МодульРаботаВБезопасномРежимеСлужебный.РежимПодключенияВнешнегоМодуля(Ссылка); Если БезопасныйРежим = Неопределено Тогда БезопасныйРежим = Истина; КонецЕсли; Иначе БезопасныйРежим = ПолучитьФункциональнуюОпцию("СтандартныеПодсистемыВМоделиСервиса") Или ПараметрыЗапуска.БезопасныйРежим; Если БезопасныйРежим Тогда ЗапросРазрешений = Новый Запрос( "ВЫБРАТЬ ПЕРВЫЕ 1 | ДополнительныеОтчетыИОбработкиРазрешения.НомерСтроки, | ДополнительныеОтчетыИОбработкиРазрешения.ВидРазрешения |ИЗ | Справочник.ДополнительныеОтчетыИОбработки.Разрешения КАК ДополнительныеОтчетыИОбработкиРазрешения |ГДЕ | ДополнительныеОтчетыИОбработкиРазрешения.Ссылка = &Ссылка"); ЗапросРазрешений.УстановитьПараметр("Ссылка", Ссылка); ЕстьРазрешений = Не ЗапросРазрешений.Выполнить().Пустой(); РежимСовместимости = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "РежимСовместимостиРазрешений"); Если РежимСовместимости = Перечисления.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.Версия_2_2_2 И ЕстьРазрешений Тогда БезопасныйРежим = Ложь; КонецЕсли; КонецЕсли; КонецЕсли; ЗаписатьПримечание(Ссылка, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Подключение, БезопасныйРежим = ""%1"".'"), БезопасныйРежим)); //+ Если Не ПустаяСтрока(АдресВоВременномХранилище) и Не ЭтоАдресВременногоХранилища(АдресВоВременномХранилище) Тогда ИмяОбработки = Менеджер.Создать(АдресВоВременномХранилище,Ложь); ИмяОбработки = ИмяОбработки.Метаданные().Имя; Иначе //- ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , БезопасныйРежим, ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений()); //+ КонецЕсли; //- Возврат ИмяОбработки; КонецФункции |
|||
8
DrZombi
гуру
06.11.20
✎
22:15
|
+(0) отладка нормально робит :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |