- Внешняя обработка: не обновляется уже открытая форма после изменений в табличной части
- Вызов обработки без открытия формы и получение при завершении данных
- Методика решения проблемы с открытием старой версии внешней обработки
- Причина возникновения проблемы
- Рекомендации по предотвращению возникновения проблемы
- Методика устранения проблемы
- Пустая форма при открытии обработки 1С
- Еще раз про отладку внешних печатных форм в Управляемом приложении
Внешняя обработка: не обновляется уже открытая форма после изменений в табличной части
Создана внешняя обработка. Добавляется кнопкой в документ в 1С ЗУП 3.1 в документах ДанныеДляРасчетаЗарплаты(создаются с помощью шаблонов). В открытой форме нажатие на кнопку вызывает обработку, делает изменения, но форма не обновляется. Ф-ция Сообщить выдает правильные результаты изменений.Чего-то не хватает, может быть знает кто-нибудь что еще нужно дописать? Если такой код запускаю в документе РазовоеНачисление — все работает, форма сразу обновляется и документ можно провести.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Розница 2.2.Внешняя обработка заполнения табличной части
Конфа розница 2.2, платформа 8.3.8. Как правильно заполнить ТЧ часть? Пытаюсь через Владельца.
Внешняя обработка Печать ценников: ошибка при попытке получения реквизита табличной части документа.
Хочу получить табличную часть товары документа установка цен номенклатуры. &НаКлиенте.
Обработка табличной части
Здравствуйте. Подскажите с чего начать или что нужно сделать. Есть документ, который должен.
Запрос. Условие: строка из первой табличной части равна любой строке из другой табличной части
Есть документ «РаспределениеМатериаловНаВыпуск». У этого документа имеется «Форма документа». На.
Добавлено через 1 минуту
Еще можно попробовать все перенести на клиент
и избавиться от таких вещей как
ОснРеквизит1 = ВладелецФормы.Объект;
ТЧ =ОснРеквизит1.ЗначенияПоказателей;
А все реквизиты получать через точку, т.е работать непосредтсвенно с объектом владельца формы а не его копией.
Источник
Вызов обработки без открытия формы и получение при завершении данных
(1) Идея кривая с самого начала.
Я бы сделал так:
1) перенёс всю обработку данных из модуля формы в модуль менеджера и объявил бы её экспортной функцией. Из формы вызывал бы функцию в модуле менеджера.
2) Открытие формы — отдельно. Выполнение обработки — отдельно. Выполнение обработки вызывать явным образом — из менеджера. Форма вызывается только тогда, когда надо именно посмотреть форму (изменить настройки?).
Кстати, если всё правильно сделать, можно было бы и рег.задание повесить, и вообще не запускать обработку вручную — только ради настроек.
(1) Идея кривая с самого начала.
Я бы сделал так:
1) перенёс всю обработку данных из модуля формы в модуль менеджера и объявил бы её экспортной функцией. Из формы вызывал бы функцию в модуле менеджера.
2) Открытие формы — отдельно. Выполнение обработки — отдельно. Выполнение обработки вызывать явным образом — из менеджера. Форма вызывается только тогда, когда надо именно посмотреть форму (изменить настройки?).
Кстати, если всё правильно сделать, можно было бы и рег.задание повесить, и вообще не запускать обработку вручную — только ради настроек.
(16) Клиент НЕ МОЖЕТ соединяться с SQL. Это только сервер.
Клиент НЕ МОЖЕТ записать данные в базу. Это только сервер.
В форме так или иначе ВЫЗЫВАЕТСЯ сервер. Только правильно при его вызове оставить только заглушку, вызывающую функцию в модуле менеджера. Тогда и данными можно будет управлять не только из формы, и рег.задание настроить, да и не нагружать клиента несвойственными ему функциями.
И почему я объясняю Вам такие азбучные истины?
Кто-то тут предлагал читать то, что писал автор вопроса, не Вы? 🙂
Обработка возвращает ТОЛЬКО статус. Булево. Ну, и описание ошибки. Всё.
Форма ОБЯЗАНА вызывать сервер. Так что, хватит Вам флудить.
и потом заменил
Ну, это, разумеется, если у Вас имена колонок таблицы совпадает с внешней БД.
Тогда на сервере в модуле формы, при вызове этой функции, когда заполняете МассивИмен, вместо этого создаёте пустую таблицу значений с нужной структурой.
Потом, получив результат, в форме можете его обработать и заполнять табличную часть простым ТабличнаяЧасть.Загрузить(тзТрансакции), если всё ОК, либо выводить сообщение об ошибке.
В рег.задании можно обрабатывать при успехе и отбрасывать при неудаче. Конечно, хорошо бы при этом в журнал регистрации писать.
А ещё я бы на Вашем месте озаботился переписать всё это дело в асинхронный вариант. Но это — уже долго и печально (хотя результат того стОит).
Ну, и да, я не люблю COM. Во-первых, отпадают все варианты, кроме Windows. Во-вторых, это большая «дыра» в безопасности. И да, Вы правы, я использую для таких целей внешние источники данных, там хоть как-то можно прошерстить под Linux.
Источник
Методика решения проблемы с открытием старой версии внешней обработки
В процессе разработки конфигураций иногда может возникнуть следующая ситуация.
В конфигураторе создается внешняя обработка. В режиме 1С:Предприятие (в режиме отладки или нет) она проверяется. В конфигураторе в обработку вносятся некоторые изменения. В режиме 1С:Предприятие обработка закрывается и открывается заново, для проверки внесенных изменений. Начиная с определенного момента вносимые изменения перестают появляться, то есть в режиме 1С:Предприятие открывается старая версия внешней обработки. Проблема решается только перегрузкой 1С:Предприятия.
Причина возникновения проблемы
Причина возникновения подобной проблемы заключается в самой обработке. Она возникает в том случае, если разработчик допустил возникновение циклических ссылок.
Рассмотрим ситуацию несколько подробнее. В режиме исполнения (1С:Предприятие) объект обработка существует в памяти в качестве реквизита формы обработки. При закрытии формы обработка прекращает свое существование.
Данная схема нарушается в двух случаях. На саму обработку возникла дополнительная ссылка, либо ссылка возникла на форму, в этом случае закрытие окна формы не означает уничтожение объекта — формы. Соответственно, остается в памяти и обработка.
Следует заметить, что данная ситуация не является уникальной особенность внешних обработок, просто в этом случае она проявляется наиболее явным образом. При открытии внешней обработки платформа пытается найти уже существующую и открывает старый вариант. В случае форм других объектов проблема не столь заметна, однако, как минимум, происходит потеря памяти.
Рекомендации по предотвращению возникновения проблемы
В процессе разработки следует учитывать ссылки, возникающие между различными объектами, и избегать прямых или косвенных взаимных ссылок. Например, поскольку форма ссылается на обработку (через реквизит), обработка не должна ссылаться на форму, т.е. форму нельзя помещать в реквизит обработки или нелокальную переменную ее модуля. Разумеется, нельзя допускать и ссылок объекта на самого себя, например поместить форму в ее собственный реквизит или переменную модуля.
Если «обратная связь» между обработкой и формой все же необходима, следует явным образом позаботиться о ее разрыве. Это можно сделать, например, в обработчике закрытия формы.
Методика устранения проблемы
Даже следование всем рекомендациям не может застраховать от возникновения подобной проблемы.
В первую очередь следует проанализировать алгоритм исполнения обработки на предмет циклических ссылок. Иногда источник проблемы не очевиден. Циклы могут носить достаточно сложный характер, да и возникновение проблемы можно заметить не сразу.
В этом случае можно рекомендовать следующую методику. Сначала необходимо определить момент возникновения ошибки. Следует после перегрузки 1С:Предприятия (сразу заметим, что конфигуратор перегружать не надо) открыть обработку и сразу ее закрыть. Внести в конфигураторе видимые изменения в форму и открыть обработку в 1С:Предприятии.
Если изменения не отразились, значит проблема возникает уже на этапе инициализации или открытии окна. В этом случае проблему следует искать в основном теле модулей обработки и формы, в обработчиках событий, возникающих при открытии и процедурах, вызываемых из них. Если немедленное закрытие не приводит к возникновению проблемы, следует определить, после каких интерактивных действий это происходит.
Примерно определив место возникновения проблемы, следует блоками комментировать код соответствующих процедур в модуле, и после каждой итерации проверять обработку. Разумеется нельзя забывать, что после каждого возникновения проблемы следует перегружать 1С:Предприятие.
Таким способом конкретное место возникновения обычно удается определить достаточно быстро. После чего причина возникновения цикла, в большинстве случаев, становится очевидной.
Источник
Пустая форма при открытии обработки 1С
Последняя статья рассказывала, как исправить с ошибку «Внешняя обработка не может быть прочитана текущей версией программы», а сегодня разберем следующие вопрос:
При открытии обработки вижу пустую форму.
Такое часто видят пользователи, у которых конфигурации построены на основе управляемого приложения. Узнать что такое управляемое приложение «1С:Предприятие 8.2» можно в посте 1С интерфейс.
Почему форма обработки пустая?
Конфигураций построенные на основе управляемого приложения по умолчанию запускаются в тонком клиенте, а обработка, при открытии которой мы видим пустую форму с кнопкой (как на рисунке) не имеет специального управляемого интерфейса.
Такие обработки не работают в управляемом приложении.
Решение есть
1 Создать для обработки управляемую форму. (сам улыбнулся)
2 Запустить конфигурацию в обычном режиме, об этом подробно рассказано в статье: Запуск обычного приложения в УТ 11.
Будьте внимательны, если обработка не является универсальной, то она должна быть предназначена для конкретной конфигурации иначе ….. может не открыться.
Все выше перечисленное относится не только к обработкам «1С:Предприятия 8.2», но и к отчетам.
Теперь Вы знаете, если при открытии скачанной обработки или отчета выходит пустая форма, это легко исправить.
Спасибо за внимание, с Вами был Программер.
Пожалуйста делитесь своим мнением в комментариях.
Постовой: Услуги по обслуживанию 1С, внедрению, поддержке и обучению 1С. Можно записаться на курсы 1с в Чехове.
Источник
Еще раз про отладку внешних печатных форм в Управляемом приложении
Частенько вижу рекомендации по отладке внешних печатных форм в управляемом приложении через ошибки, дополнительные обработки и т.д. и т.п. В то время как это можно сделать полностью аналогично отладке в толстом клиенте. Имеется ввиду способ — когда к внешней обработке добавляется форма где есть реквизит ссылкаНаОбъект, и эта форма вызывает уже процедуру формирования табличного документа из модуля объекта и показывает сформированный табличный документ.
Итак в модуле внешней обработки мы имеем процедуру:
Процедура стандартная, она вызывает функцию формирования табличного документа ПечатьСчетДоговор(МассивОбъектов), эту самую функцию нам и нужно вызвать из добавленой формы и показать результат.
добавляем в отчет реквизит СсылкаНаОбъект того типа что нам нужен здесь, один в один как в толстом клиенте. Создаем форму — реквизит на ней добавится автоматом. Добавляем на форме кнопку — Печать, привязываем к ней команду Печать и создаем автоматом процедуру на сервере и на клиенте.
Здесь немного уже доработано руками. Во первых процедуру на сервере заменяем на функцию. На клиенте сответственно дописываем метод Показать(). Мы же хотим увидеть сформированный табличный документ? В функции Команда1НаСервере() мы вытягиваем табличный документ — напрямую обращаемся к функции модуля ПечатьСчетДоговора(. ) — и передаем этот табличный документ на клиента, понятно что сервер нам его не покажет. РеквизитФормыВЗначение(..) нужен чтоб перегнать объект в состояние — когда его процедуры(модуля) может увидеть клиент, как пишет 1с получаем объект прикладного типа, иначе ничего не получится.
Если мы запустим обработку в таком варианте, то увидим ошибку — функция ПечатьСчетДоговора(массив1) не обнаружена. Делаем последний штрих — в модуле на сделать эту функцию экспортной.
Доработка минимальная, и займет немногим больше времени чем в толстом клиенте. Отлаженную печатную форму без всяких изменений можно добавить во внешние отчеты и обработки — она будет полностью работоспособна.
Теперь мы можем свободно отлаживать форму открыв ее через меню файл. Переходить на ошибки напрямую в конфигуратор/обработку и вставлять готовую печатную форму в дополнительные отчеты и обработки без всяких допиливаний — как есть.
Источник