[РЕШЕНО] Дополнительные внешние обработки табличных частей

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем nbIpKuH_BaH9I, 11 апр 2015.

  1. n.s.gnedash
    Offline

    n.s.gnedash Опытный в 1С Команда форума

    Регистрация:
    15 авг 2010
    Сообщения:
    1.358
    Симпатии:
    5
    Баллы:
    29
    попробуй отладить саму обработку, а не как внешнюю, может там что получится , что-то вроде такого наверно подойдет
  2. TopicStarter Overlay
    nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.979
    Симпатии:
    397
    Баллы:
    104
    Прикрепляю все 4.
    Чуть позже займусь.

    Вложения:

  3. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    На текущий момент такой ошибки у себя не наблюдаю.

    Порядок.
    1. Загружаю 2 обработки заполнения ТЧ в конфигурацию.
    2. Далее создаю документ ПТиУ. Не записывая запускаю эту обработку заполнения. Ну загрузить ничего не могу, файла у меня нет для загрузки. Закрываю окно обработки. Закрываю документ поступления без сохранения.
    3. Создаю документ Возврат товаров. Не записывая запускаю обработку заполнения ТЧ.
    Все открывается без ошибок.
    Пробовал в разных вариациях. И закрывая документы из которых вызывается обработка и нет.

    Платформа 8.2.19. Файловый вариант БД.


    Возможность попробовать на 8.3 будет только вечером.
    --- Объединение сообщений, 6 май 2015 ---
    Но мне кажется я знаю откуда ошибка.
    --- Объединение сообщений, 6 май 2015 ---
    Воспроизвести ошибку смог только загрузив по подписанной красным на скриншоте кнопке вообще левую обработку (она естественно без процедуры Инициализировать())
    upload_2015-5-6_13-33-28.png
    Последнее редактирование: 6 май 2015
    nbIpKuH_BaH9I нравится это.
  4. TopicStarter Overlay
    nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.979
    Симпатии:
    397
    Баллы:
    104
    Гружу только через зеленую кнопку :) Это на разных компах и на разных релизах платформы.
  5. TopicStarter Overlay
    nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.979
    Симпатии:
    397
    Баллы:
    104
    Саш, попробуй у себя на других документах. Ничего не меняй, просто загрузи нормально как и надо обработки. Потом создай документ Инвентаризации, а потом возврат и отпишись о результате.
  6. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Запускаются они без ошибок.
  7. TopicStarter Overlay
    nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.979
    Симпатии:
    397
    Баллы:
    104
    Именно в такой последовательности?
  8. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Сначала инвентаризация, потом возврат.
  9. TopicStarter Overlay
    nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.979
    Симпатии:
    397
    Баллы:
    104
    ХМ. Вообще тогда мозг разрывается. Попробую чуть позже удалить их физически и заново добавлю.
  10. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Подтверждаю необычное поведение платформы на 8.3.5.1517 и 8.3.6.1977.
    На 8.2.19 нормально.

    Но. Есть как обычно одно "НО".
    Дело в коде.
    1С-цы конечно тоже хороши, но код обработки надо переписать.
    Все дело в теле процедуры Инициализировать.
    Вот это:
    Код:
    Процедура Инициализировать(Объект, ИмяТабличнойЧасти, ТабличноеПоле) Экспорт
    
        мОбъект = Объект;
        мФорма = ЭтотОбъект.ПолучитьФорму("Форма");
        мФорма.ОткрытьМодально();
    
    КонецПроцедуры
    
    надо переписать.

    Чтобы понять о чем я, надо написать например так:
    Код:
    Процедура Инициализировать(Объект, ИмяТабличнойЧасти, ТабличноеПоле) Экспорт
    
        мОбъект = Объект;
        мФорма = ЭтотОбъект.ПолучитьФорму("Форма");
        мФорма.ОткрытьМодально();
        мФорма = Неопределено;
    
    КонецПроцедуры
    
    или например так
    Код:
    Процедура Инициализировать(Объект, ИмяТабличнойЧасти, ТабличноеПоле) Экспорт
    
        мОбъект = Объект;
        ЭтотОбъект.ПолучитьФорму("Форма").ОткрытьМодально();
    
    КонецПроцедуры
    
    Причина (ну я в 1С не работаю, далее исключительно предположения). Вероятно в платформе 8.3 1С-цы работали с памятью, и что-то поменяли в подсчете циклических ссылок. Глобальная переменная мФорма инициализированна в коде, и вероятно теперь на 8.3.5 считается активной при закрытии обработки. Форма остается висеть в памяти. При последующих вызовах обработок заполнения ТЧ, уже внутри платформы происходит вероятно следующее: процесс создания обработки ищет в памяти форму привязанную к временному файлу, если находит ее в памяти то не пытается создать новую а берет из памяти. Но в памяти сама обработка уже "повреждена" - модуль уничтожен (при закрытии обработки в предыдущем вызове), а форма висит. В итоге, поскольку в конфигурациях создание всех обработок заполнения ТЧ привязано к созданию временного файла с одинаковым именем PrnForm.tmp, после этого вообще ни одна не может корректно создаться. Естественно до перезапуска платформы.


    З.Ы. Резюме
    Переписать обработку, сейчас она написана плохо.
    Объект формы (переменную мФорма) не надо использовать в нескольких местах, она вообще не нужна.
    ОткрытьМодально() - и так может возвращать результат.
    Процедура ЧтениеXML() ничего не должна делать с формой. Она должна возвращать истина или ложь, все. А все действия с формой должны выполняться исключительно в процедуре Инициализировать() либо в самой форме (из самой формы же можно вызвать Закрыть() и передать возвращаемым значением статус выполнения обработки).
    nbIpKuH_BaH9I нравится это.
  11. TopicStarter Overlay
    nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.979
    Симпатии:
    397
    Баллы:
    104
    Согласен, перепишу.
    Мне нужно именно модальное окно формы.
    Согласен, перепишу.
    Спасибо огромное за тесты и за потраченное время.

Поделиться этой страницей