Имя: Пароль:
1C
 
Ввод на основании
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
проверил работает и дату ставит правильную после синхр
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.