helpf.pro
Регистрация

v8: Модуль объекта ПередЗаписью()

Bell
17.03.2014 17:57Прочитано: 2573
Здравствуйте
КАК Очистить реквизит ДокументОбъект.КонтрагентБанковскиеСчета = Неопределено; /// ???????????

Модуль объекта документа

Код 1C v 8.х
 Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

// Процедура проверка соответствия валюты документа валютам договора, расчетного счета контрагента, банковского счета организации
УправлениеПроверкамиСервер.ПроверкаСоответствияВалютПоДокументу(ЭтотОбъект, Отказ);

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


ОбщийМодуль

Код 1C v 8.х
 Процедура ПроверкаСоответствияВалютПоДокументу(ДокументОбъект, Отказ, Сообщить = Истина) Экспорт

МетаданныеДокумента = ДокументОбъект.Метаданные();
Валюта = ДокументОбъект.Валюта;

Если ОбщегоНазначения.ЕстьРеквизитДокумента("КонтрагентБанковскиеСчета", МетаданныеДокумента) Тогда
РС = ДокументОбъект.КонтрагентБанковскиеСчета.Валюта;
Если РС <> Валюта Тогда
Если Сообщить Тогда
/// ????????
ДокументОбъект.КонтрагентБанковскиеСчета = Неопределено; /// ????????
ТекстСообщения = НСтр("ru='Валюта РАСЧЕТНОГО СЧЕТА КОНТРАГЕНТА не соответсвует ВАЛЮТЕ документа!!!'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;

КонецПроцедуры
Yandex
Возможно, вас также заинтересует
Реклама на портале
Mokey
18.03.2014 09:45Ответ № 1
А что, собственно, не получается у Вас?
Bell
18.03.2014 10:14Ответ № 2
Управляемое приложение это
При выполнении процедуры ПередЗаписью() ОБЪЕКТА ДОКУМЕНТА идет проверка, валюта документа не сходится с валютой расчетного счета контрагента то Реквизит документа КонтрагентБанковскиеСчета надо очистить.
ДокументОбъект.КонтрагентБанковскиеСчета = Неопределено; /// ????????
Изменено 18.03.14 10:15:37
Mokey
18.03.2014 13:56Ответ № 3
Я всё прекрасно понял, что и зачем проверяется, я не понял вопроса,
ДокументОбъект.КонтрагентБанковскиеСчета = Неопределено; /// ????????
вот это не отрабатывает? Так присвойте пустую ссылку!

ПыСы. Надо так и говорить, что не получается Неопределено присвоить реквизиту документа
Изменено 18.03.14 13:57:57
Jonsony
18.03.2014 14:10Ответ № 4
(2) Bell,
а так?
Код 1C v 8.2 УП
 
ДокументОбъект.КонтрагентБанковскиеСчета = "";
Bell
18.03.2014 17:09Ответ № 5
Не идет
ДокументОбъект.КонтрагентБанковскиеСчета = Неопределено;
ДокументОбъект.КонтрагентБанковскиеСчета = "";
ДокументОбъект.КонтрагентБанковскиеСчета = Справочники.КонтрагентыБанковскиеСчета.ПустаяСсылка();
Jonsony
18.03.2014 17:33Ответ № 6
(5) Bell, последнее должно было сработать
попробуй его так
Код 1C v 8.2 УП
 КонтрагентБанковскиеСчета = Справочники.КонтрагентыБанковскиеСчета.ПустаяСсылка();   


исходя их этого
https://help1c.com/faq/view/292.html
Bell
18.03.2014 18:56Ответ № 7
я напрямую ставил ЭтотОбъект.КонтрагентБанковскиеСчета = "";
в процедуру ПередЗаписью() все стирает
В этом проблема.
При открытии сообщеня еще вылетает окно предупреждения стандартное
Не удалось провести "поступление товаров 000035 от 18.03.2014"
Знаю что надо Отказ = Истина в конце поставить в ложь, тогда все стирает и окно закрывается
КАК сделать что бы окно не закрывалось и все работало ?
Mokey
19.03.2014 09:57Ответ № 8
Я извиняюсь, но так и не увидел от автора поста, какую ошибку выдаёт документ перед записью при установке
ДокументОбъект.КонтрагентБанковскиеСчета = Справочники.КонтрагентыБанковскиеСчета.ПустаяСсылка();?
Mokey
19.03.2014 09:58Ответ № 9
Отказ = Истина
у Вас устанавливается внутри условия, естественно ничего не сохранится!
Обычно Отказ выставляют в Истину тогда, когда действительно нельзя записать документ при определённых условиях, например, после проверки заполненности реквизитов или их соответствия политике...
Изменено 19.03.14 10:00:47
Bell
19.03.2014 11:31Ответ № 10
(8)
Ошибки не выдавало никакой, просто не ОЧИЩАЕТ ПОЛЕ КонтрагентБанковскиеСчета.

Все эти действия выполняются при Отказ = ЛОЖЬ
ДокументОбъект.КонтрагентБанковскиеСчета = Неопределено;
ДокументОбъект.КонтрагентБанковскиеСчета = "";
ДокументОбъект.КонтрагентБанковскиеСчета = Справочники.КонтрагентыБанковскиеСчета.ПустаяСсылка();

Проблема была о отказ = Истина, что выкидывалось стандартное окно предупреждение (Не удалось провести "поступление товаров 000035 от 18.03.2014")
Отказаться от Отказ=Истина нельзя вот и пытаюсь переделать проверку, что бы отказ = истина осталось, при этом не выкидывалось стандартное окно предупреждения, но при этом стирало поле КонтрагентБанковскиеСчета.
Изменено 19.03.14 11:32:33
Mokey
19.03.2014 14:56Ответ № 11
Делайте проверку и установку реквизита КонтрагентБанковскиеСчета в модуле ФОРМЫ документа, а в модуле объекта только проверку, потому что тут противоречие получается: с одной стороны хотим поменять реквизит, с другой стороны при изменении реквизита надо отказаться от записи документа.
Изменено 19.03.14 14:59:07
Mokey
19.03.2014 14:58Ответ № 12
И ещё, если Вы проводите документ и Отказ = Истина, то обработка проведения в любом случае выдаст предупреждение о том, что документ не удалось провести.
Bell
19.03.2014 16:43Ответ № 13
Я то же как раз к этому и прихожу
Думаю разделить на две процдеры. Одна проверяет и затирает в модуле формы, вторая проверяет в объете и останавливает запись (Хотя всегда стараюсь делать все в одной процедура, что бы проще было читать код, а не метаться из одной процедуры в другую)
спасибо, что поддержали мои сомневалющиеся мысли в этом направлении..
Изменено 19.03.14 16:46:15
Mokey
20.03.2014 11:20Ответ № 14
(13) Bell, Всё в одном флаконе - это, конечно, хорошо, но надо ещё и учитывать тот факт, что предопределённые процедуры выполняют строго определённые действия с документом. ПередЗаписью() модуля, в частности, в основном и предназначена для проверки и отмены или разрешения записи объекта в БД.
Bell
21.03.2014 10:13Ответ № 15
СПАСИБО
Подсказка: Вы можете добавить любую страничку в Избранное щелкнув по значку
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.