![]() |
![]() |
![]() |
|
Ввод на основании | ☑ | ||
---|---|---|---|---|
0
Dooro
18.11.08
✎
15:21
|
В форме документа есть кнопка - "Резервировать" - в свойствах
нажатие - "Ввести на основании... " нажатие объект - "ЗаказПокупателя" Самой процедуры в модуле нет. Мне нужно перед вводом нового документа произвести проверку и только потом вводить или не вводить на основаниию Как это зделать? |
|||
1
Черный всадник
18.11.08
✎
15:24
|
(0) Ктомешает заменить на свои кнопки?
|
|||
2
Dooro
18.11.08
✎
15:25
|
Дік єто моя кнопка. но процедуру я выбрал в свойствах
|
|||
3
Dooro
18.11.08
✎
15:25
|
нажатие - "Ввести на основании... "
нажатие объект - "ЗаказПокупателя" |
|||
4
luns
18.11.08
✎
15:25
|
Посмотреть на процедуру "ОбработкаЗаполнения" в модуле того дока который вводиться на основании...
|
|||
5
MSensey
18.11.08
✎
15:26
|
у тебя проверка должна работать только при вводе на основании из этой формы или вообще?
|
|||
6
Dooro
18.11.08
✎
15:26
|
можно ли перед вводом . всавить проверку мою? или ввод на основании придется вручную описывать?
|
|||
7
Черный всадник
18.11.08
✎
15:26
|
(2) Так что мешает сделать обработчик свой?
|
|||
8
MSensey
18.11.08
✎
15:27
|
Если всегда нужна проверка, то вставляй в событие формы ПередОткрытием проверку.
А основание можно получить так: Расширение формы документа ПараметрОснование (BasisParameter) Использование: Чтение и запись. Описание: Тип: Ссылка на объект-основание. Содержит ссылку на объект-основание. |
|||
9
Dooro
18.11.08
✎
15:27
|
Проверка перед открытием вводимого документа на основании не срабатывает. поэтому хотелось бы просто не вводить на основании из первого документа если проверка не выполнена
|
|||
10
Ayori
18.11.08
✎
15:28
|
Удали процедуру с кнопки, сделай новую и пиши что тебе надо
Процедура ВвестиЗаказНаОсновании() Отказ = ПроверитьДокумент(); Если Отказ Тогда Сообщить("блабла"); Иначе [операторы заполнения] КонецЕсли; КонецПроцедуры |
|||
11
Dooro
18.11.08
✎
15:29
|
Ayori это из первого документа проверка?
|
|||
12
Dooro
18.11.08
✎
15:30
|
[операторы заполнения] их нужно где то выискать
|
|||
13
Dooro
18.11.08
✎
15:37
|
Мне нужно именно до ввода документа на основании перехватить процедуру
нажатие - "Ввести на основании... " нажатие объект - "ЗаказПокупателя" проверить и по результам разрешить или не разрешить ввод на основании |
|||
14
Ayori
18.11.08
✎
15:37
|
Докустим есть два документа:
Документ1 - из которого заполняем Документ2 - который надо заполнить на основании Документа1 Действия: 1. на кнопку в Документе1 вешаем процедуру Процедура КнопкаЗарезервироватьНажатие(Элемент) Заказ = Документы.ЗаказПоставщику.СоздатьДокумент(); Заказ.Заполнить(Ссылка); КонецПроцедуры 2. в модуле документа Документа2 ищем процедуру ОбработкаЗаполнения, если нет то создаем Процедура ОбработкаЗаполнения(Основание) Контрагент = Основание.Контрагент; Организация = Основание.Организация; ........ и тд КонецПроцедуры |
|||
15
Dooro
18.11.08
✎
15:40
|
Я понял . просто не хотелось этого делать так как много таких проверок будет по другим документам. Я спросил можно ли перехватить процедуру из доку3мента основания до ввода и проверить. Что бы избежать ручного описания ввода.
|
|||
16
Ayori
18.11.08
✎
15:49
|
Если по кнопке типовой, то нет - она не ссылается на процедуры ВРОДЕ, а сразу вводит документ, заполняя его на основании процедуры описанной в его модуле.
А если сделаешь свою кнопку то нет проблем - в 1 документе на кнопку вешаешь свою процедуру, где есть проверка. |
|||
17
luns
18.11.08
✎
15:49
|
Смотри (4)
|
|||
18
Dooro
18.11.08
✎
16:02
|
Такая проблема.
Я перед открытии документа вводимого на основании написал проверку.Она работает на проверку даты на локальном компе и и на сервере.При не соответсвии - отказ открытия и посылается синхронизация времени. Когда прошла синхронизация даты . пробую открывать - он открывает .. НО датой той что была до синхронизации. Функция ПроверкаДаты() Экспорт; Норма = 0; СерверТ = Константы.ОбщийКаталог.Получить(); ПользТ = Константы.Пользователь.Получить(); ПарольТ = Константы.Пароль.Получить(); РезервСроки = Константы.СрокРезерва.Получить(); ЛокальныйГод = Формат(Год(ТекущаяДата()),"ЧГ=0"); ЛокальныйМесяц = Месяц(ТекущаяДата()); ЛокальныйДень = День(ТекущаяДата()); Попытка locator = новый COMОбъект("WBemScripting.SWbemLocator"); Serv = locator.ConnectServer(СерверТ,"root\cimv2",ПользТ,ПарольТ); items = Serv.ExecQuery("select * from win32_LocalTime"); Для каждого Стр ИЗ items Цикл ГД = Стр.year; МС = Стр.month; ДН = Стр.day; КонецЦикла; Исключение; Сообщить("Сбой проверки. Обратитесь к администратору 1с!"); Норма = 1; Результат = Истина; КонецПопытки; Если Норма <> 1 И СокрЛП(Строка(ГД)) = СокрЛП(Строка(ЛокальныйГод)) И СокрЛП(Строка(МС)) = СокрЛП(Строка(ЛокальныйМесяц)) И СокрЛП(Строка(ДН)) = СокрЛП(Строка(ЛокальныйДень)) Тогда Результат = Ложь; Иначе Сообщить("Проверка не выполнена!"); Результат = Истина; Попытка КомандаСистемы("w32tm /resync"); Исключение; КонецПопытки; КонецЕсли; Возврат Результат; КонецФункции проверка Процедура ПередОткрытием(Отказ, СтандартнаяОбработка) //Дата//// Если ПараметрыСеанса.Компьютер <> Константы.ОбщийКаталог И ЭтотОбъект.ЭтоНовый() Тогда Р = ПроверкаДаты(); Если Р = Истина Тогда СтандартнаяОбработка = Ложь КонецЕсли; Отказ = Р; КонецЕсли; Если НЕ Отказ Тогда дкФормаПередОткрытием(ЭтаФорма, Отказ, СтандартнаяОбработка); |
|||
19
Dooro
18.11.08
✎
16:04
|
Дата на новом документе который ввелся при прохождении синхронизации остается та что была при не правильной дате
|
|||
20
Dooro
18.11.08
✎
16:05
|
и я не могу выцепить где она фиксируется. ведь был отказ во вводе на основании ранее. поэтому что бы не искать все это хотел проверять до ввода а не перед открытием
|
|||
21
Ayori
18.11.08
✎
16:08
|
лови тогда как сказали в (4)
|
|||
22
Dooro
18.11.08
✎
16:11
|
ищу ОбработкаЗаполнения вводимого на основании но там общая процедура для всех документов.. буду рыться
|
|||
23
MSensey
18.11.08
✎
16:11
|
(21) интересно как он в ОбработкаЗаполнения() откажется от заполнения?
|
|||
24
Dooro
18.11.08
✎
16:13
|
Вот и я не хотел бы ломать обработку заполнения
|
|||
25
Ayori
18.11.08
✎
16:14
|
(23) отказываться я предлагал как - там же можно было и отловить; автор же спросил где отловить, ему предложили альтернативный вариант
|
|||
26
Dooro
18.11.08
✎
16:15
|
Жаль что нельзя проверить до стандартного ввода на основании. это бы сразу убило 4-х зайцев :)
|
|||
27
Ayori
18.11.08
✎
16:16
|
я в свое время искал, так и не нашел - видимо, это заложено в платформе.. или я плохо искал
|
|||
28
Ayori
18.11.08
✎
16:18
|
Погоди, а COM объект у тебя не записан
|
|||
29
Ayori
18.11.08
✎
16:19
|
ой туплю))))
|
|||
30
luns
18.11.08
✎
16:23
|
(23) Ну наверное скажет:
мЗакрыться = Истина; Возврат; А в форме перед окрытием скажет: Отказ = мЗакрыться; Как то так... |
|||
31
Dooro
18.11.08
✎
16:25
|
Ну это тоже результат. значит придется заполнять обработкой своей. А как зарегистрировать что новый документ ввелся на основании данного ,если руками писать.?
|
|||
32
Dooro
18.11.08
✎
16:26
|
протсо документОснование= Ссылка.Объект?
|
|||
33
Dooro
18.11.08
✎
16:30
|
примерно так?
Процедура РезервироватьНажатие(Элемент); ЗаказОБ = Документы.ЗаказПокупателя.СоздатьДокумент(); ЗаказОБ.ДокументОснование = ЭтотОбъект.Ссылка; ЗаказОБ.Дата = ТекущаяДата();....... |
|||
34
hhhh
18.11.08
✎
17:05
|
(18) чем писать такие офигительные процедуры на ровном месте, лучше один раз набить морду тому юзеру, который переключает дату на компьютере, а то в следующий раз он у тебя ненароком и систему противопожарной безопасности включит.
|
|||
35
Dooro
18.11.08
✎
17:21
|
hhhh это ты прав. но там ситуация не от меня зависит. и я там не контролирую процесс. по возможности 1с должна что в ее силах обеспечить правильное ведение учета. в том числе и что ее не касается.
|
|||
36
Dooro
18.11.08
✎
17:39
|
Процедура РезервироватьНажатие(Элемент);
Если ПараметрыСеанса.Компьютер <> Константы.ОбщийКаталог Тогда Р = ПроверкаДаты(); КонецЕсли; Если Р <> Истина Тогда ЗаказОБ = Документы.ЗаказПокупателя.СоздатьДокумент(); ЗаказОБ.ДокументОснование = ЭтотОбъект.Ссылка; ЗаказОБ.Дата = ТекущаяДата(); ЗаказОБ.Контрагент = ЭтотОбъект.Контрагент; ЗаказОБ.ДоговорВзаиморасчетов = ЭтотОбъект.ДоговорВзаиморасчетов; ЗаказОБ.СкладКомпании = ЭтотОбъект.СкладКомпании; ЗаказОБ.ВалютаДокумента = Справочники.Валюты.НайтиПоКоду("980"); ЗаказОБ.ПроцентПредоплаты = 0; ЗаказОБ.Автор = ПараметрыСеанса.Пользователь; ЗаказОБ.Организация = ПараметрыСеанса.Организация; ЗаказОБ.СрокПоставки = ТекущаяДата()+ 2592000; ЗаказОБ.ПодразделениеКомпании = ПараметрыСеанса.ПодразделениеКомпании; ЗаказОБ.ХозОперация = Справочники.ХозОперации.ЗаказРезервированиеПокупателя; ЗаказОБ.ТипЦен = Справочники.ТипыЦен.ОсновнойТипЦенПродажи; ЗаказОБ.ВидОплаты = перечисления.ВидыОплаты.ПроизвольнаяОплата; ЗаказОБ.КурсДокумента = ЭтотОбъект.КурсДокумента; ЗаказОБ.Товары.Загрузить(ЭтотОбъект.Товары.Выгрузить()); Форма = ЗаказОБ.ПолучитьФорму("ФормаДокумента"); Если НЕ Форма.Открыта() Тогда Форма.Открыть(); КонецЕсли; КонецЕсли; КонецПроцедуры; |
|||
37
Dooro
18.11.08
✎
17:41
|
наверное так
|
|||
38
Dooro
18.11.08
✎
17:41
|
проверил работает и дату ставит правильную после синхр
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |