Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 дек 2024, 22:37

Команда Документа

Автор Новенькая, 23 окт 2013, 16:24

0 Пользователей и 1 гость просматривают эту тему.

Новенькая

Есть команда "печать" в документе. Необходимо провести документ, если он непроведен перед печатью и перепровести, если были какие-либо изменения.
При таком раскладе:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

Если Не ДокументПроведен(ПараметрКоманды) Тогда
  ТекстВопроса = "Для печати документ должен быть проведен. Продолжить?";
  КодВозврата = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ОКОтмена);
  Если КодВозврата = КодВозвратаДиалога.ОК Тогда
   ПровестиДок(ПараметрКоманды);
  Иначе
   Возврат;
  КонецЕсли;
КонецЕсли;
ТабДок = Новый ТабличныйДокумент;
Печать(ТабДок, ПараметрКоманды);
  ТабДок.Показать();

КонецПроцедуры
&НаСервере
Функция ДокументПроведен(ПараметрКоманды)

Док = ПараметрКоманды.ПолучитьОбъект();
  Док.Прочитать();
Если Док.Модифицированность() ИЛИ Док.Проведен ТОгда
  Возврат Истина;
Иначе
  Возврат Ложь;
КонецЕсли;

КонецФункции
&НаСервере
Процедура ПровестиДок(ПараметрКоманды)
НачатьТранзакцию();
Попытка
  Док = ПараметрКоманды.ПолучитьОбъект();
  Док.Записать(РежимЗаписиДокумента.Проведение);
  Док.Прочитать();
  ЗафиксироватьТранзакцию();
Исключение
  ОтменитьТранзакцию();
КонецПопытки;

КонецПроцедуры

при попытке изменить что либо в форме документа после печати, вылетает ошибка : "Данные были изменены или удалены другим пользователем". Как правильно реализовать этот механизм?

Besart

команду печать вынесите в модуль формы и используйте в процедуре ПровестиДок()
ДокОбъект = РеквизитФормыВЗначение(Объект);
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
ЗначениеВДанныеФормы(ДокОбъект, Объект);

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск