8.х Запись документа

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

  1. TopicStarter Overlay
    st88
    Offline

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.725
    Симпатии:
    28
    Баллы:
    54
    На форме документа есть кнопка ОК и Записать. нажимаю записать, документ записывается, но тут же (хотя я нечего не делаю) появляется в заголовке звёздочка - признак модифицированности (хотя нечего не делаю с этим документом) и при закрытии опять требует записать. как это исправить?!

    ну точнее я так понимаю это из-за процедуры ПриЗаписи() которая выполняет неск действий?!

    можно ли решить проблему, написав в конце этой процедуры - модифицированнойсть =ложь?! или это будет не правильно?
  2. Dmitriy_76
    Offline

    Dmitriy_76 Опытный в 1С Команда форума

    Регистрация:
    26 мар 2011
    Сообщения:
    2.174
    Симпатии:
    13
    Баллы:
    29
    значит что то меняется после того как записал. ищи в коде.
    скорее всего в ПослеЗаписи()

    либо в подписках на события....
  3. TopicStarter Overlay
    st88
    Offline

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.725
    Симпатии:
    28
    Баллы:
    54
    [sub]В ПослеЗаписи() всё глухо, ничего туда не писал и в форме не определял это событие, сейчас проверил..[/sub]
    [sub]ещё варианты?[/sub]
  4. Annie
    Offline

    Annie Опытный в 1С Команда форума

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    Правильно понимаете...

    А зачем? Лень повторно записать? Либо же если это не критично, то код в ПриЗаписи() вынести в ПередЗаписью(), как вариант.
    Если вы отключите признак Модифицированности, то измененные данные не сохранятся (если ошибаюсь, поправьте меня) :smile:
    У вас ПриЗаписи() в Модуле Объекта?
  5. TopicStarter Overlay
    st88
    Offline

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.725
    Симпатии:
    28
    Баллы:
    54
    Дело не в лени, а в :

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

    И чтобы напечатаь, недостаточно ему получается просто записи, приходится закрывать документ, потом заново открывать и только тогда печатать, а если просто нажать записать то ...(то то что писал в первом посту...(...).

    2. "вынести в ПередЗаписью(), как вариант" - мне кажется критично, ибо там идёт борьба за абонентов..)

    3. в модуле формы...) у меня всё там.. :blush:
    4. "Если вы отключите признак Модифицированности, то измененные данные" - а если в конце в самом напишу, когда поидее всё уже изменено и готово к записи, или нет...?
  6. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Покажите, что у Вас в процедуре "При записи".
    Вся проблема в том, что Вы там что-то меняете (какие-то реквизиты документа).
    Почему Вы это делаете в событии "При записи"??? В этом событии документ уже всё - записан. А Вы раз и поменяли что-то. Естественно, программа перед завершением транзакции видит, что что-то изменилось и спрашивает, а что делать-то с этими изменениями???
    Если надо дозаполнить или изменить какие-то реквизиты документа при его записи, для этого используется событие "Перед записью".
  7. TopicStarter Overlay
    st88
    Offline

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.725
    Симпатии:
    28
    Баллы:
    54
    Ну кинул всё тело в процедуру Передзаписью (), вроде пашет, но насколько корректно теперь...?

    вот что там было:
    /// надо проверить, вдруг пока мы подбирали абонентов в ведомость, их кто-то уже занял!
    Если ЭтоНовый() тогда
    Если Ведомость.Количество() > 0 Тогда
    Для Каждого СтрокаВедомость Из Ведомость Цикл
    АбонентВыб = СтрокаВедомость.Абонент.ПолучитьОбъект();
    Если АбонентВыб.ФлагЗанятости = ИСТИНА Тогда
    Предупреждение("Выбранный абонент: " +АбонентВыб+ " - уже занят другой ведомостью");
    Отказ = истина;
    Возврат;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    КонецЕсли;
    ///
    Если состояниеДокумента = "Открыт" и менятьФлаг = истина Тогда
    ////меняем
    Для Каждого СтрокаВедомость Из Ведомость Цикл
    АбонентВыб = СтрокаВедомость.Абонент.ПолучитьОбъект();
    АбонентВыб.ФлагЗанятости = ИСТИНА;
    АбонентВыб.Записать();
    КонецЦикла;
    Конецесли;
    Если состояниеДокумента = "Архив" и менятьФлаг = истина Тогда

    Для Каждого СтрокаВедомость Из Ведомость Цикл
    АбонентВыб = СтрокаВедомость.Абонент.ПолучитьОбъект();
    АбонентВыб.ФлагЗанятости = ЛОЖЬ;
    АбонентВыб.Записать();
    КонецЦикла;
    Конецесли;
    Работы.Очистить(); /// чтобы не хранить лишние данные!!!

    зы: нифига не работает кнопка на форуме, вставить 1с код..!(
  8. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    А в чем видите некорректность?
    Повторюсь, для корректировки или дозаполнения реквизитов во время записи документа используется именно событие "Перед записью". Т.к. запись тут еще не произошла. Вы что-то меняете, далее происходит запись, и все Ваши изменения с успехом записываются.
  9. TopicStarter Overlay
    st88
    Offline

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.725
    Симпатии:
    28
    Баллы:
    54
    ладно, пока оставлю так. спасибо за подсказку!

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