Имя: Пароль:
1C
1С v8
вопрос по управляемому приложению
,
0 Незнайка69
 
08.08.12
12:52
Привет всем, я делаю новую конфигурацию. В которой на основании заявки делаю ПКО, мне необходимо чтобы после ввода на основании в заявке автоматически проставлялась галка оплачена. подскажите как это сделать?
1 Wobland
 
08.08.12
12:55
а факт введения на основании (даже не записи, не проведения) уже говорит о том, что оплачено?
2 Smallrat
 
08.08.12
12:56
В Модуле документа:

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
   
   Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.Заявка") Тогда
            Оплачено = Истина;
3 Незнайка69
 
08.08.12
12:57
нужно провести ПКО
4 Wobland
 
08.08.12
12:57
(2) это ты про ПКО сказал, а у ей в исходном документе хочется
5 Wobland
 
08.08.12
12:57
(3) даю пищу для размышлений: ДокументОснование
6 Avganec
 
08.08.12
12:58
(5) добавление: ПолучитьОбъект()
7 Лоботряс
 
08.08.12
12:59
В ПКО в процедуре "ПослеЗаписи" написать

Док = Основание.ПолучитьОбъект();
Док.Оплачено = истина;
Док.Записать();
8 Wobland
 
08.08.12
13:00
(7) а я за проведение
9 Avganec
 
08.08.12
13:00
(7) не забудь еще проверку надо на тип основания
10 Лоботряс
 
08.08.12
13:00
(7)+ не забудь проверить что ПКО проведен, а не просто записан....
11 Smallrat
 
08.08.12
13:00
(4) аааааа )) невнимательно прочитал

(0) сделать запрос по проведенным документам, где основание = текущий документ, на форму воткнуть галку, которая при непустом результате запроса будет истиной, в противном случае ложью.
перезаписывать документы-основания при проведении ПКО это неправильно.
12 Лоботряс
 
08.08.12
13:01
(8) Может быть...
13 Wobland
 
08.08.12
13:02
(11) чем чревато отсутствие реквизита (размышляю вслух)? не так просто будет узнать, оплачена ли заявка...
14 Wobland
 
08.08.12
13:03
а как быть с частичной оплатой?
15 Незнайка69
 
08.08.12
13:03
Спасибо разбираюсь
16 Лоботряс
 
08.08.12
13:04
(11) а когда все это делать?
17 Незнайка69
 
08.08.12
13:06
При проведении документа ПКО должна ставиться галочка Оплачено в Заявке, я добавила новый реквизит ДокументОснование, попробую так.
Спасибо большое
18 Незнайка69
 
08.08.12
13:07
Частичной оплаты быть не может
разовые услуги
19 Smallrat
 
08.08.12
13:08
(13) реквизит дублирует логику - если для данной заявки есть проведенный документ ПКО, то док считается оплаченным (частичные оплаты не учитываем )).
Само наличие реквизита уже вероятный источник ошибок (например кто-то открыл/заблокировал заявку, а другой пользователь в это время снял с проведения ПКО - в итоге будет ошибка)
(16) При СозданииНаСервере как минимум. дальше уже надо подумать - насколько актуальным надо видеть реквизит - обычно хватает этого.
20 Smallrat
 
08.08.12
13:08
+(19) *актуальным надо видеть галку то есть
21 Незнайка69
 
08.08.12
13:09
а как в заявке увидеть что она оплачена?
22 Wobland
 
08.08.12
13:10
(21) без реквизита? поискать проведённые ПКО с таким основанием
23 Smallrat
 
08.08.12
13:13
(21) примерно так (у меня правда не галка, а надпись)

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   УстановитьТекстыНадписей();
КонецПроцедуры

&НаСервере
Процедура УстановитьТекстыНадписей()
   
   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
   |    ДополнительноеСоглашение.Ссылка
   |ИЗ
   |    Документ.ДополнительноеСоглашение КАК ДополнительноеСоглашение
   |ГДЕ
   |    ДополнительноеСоглашение.Договор = &Ссылка";
   
   Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
   Результат = Запрос.Выполнить();
   Если Результат.Пустой() Тогда
       ДопСоглашения = "У этого договора нет дополнительных соглашений";
       Элементы.ДопСоглашения.Гиперссылка = Ложь;
   Иначе
       КоличествоДС = Результат.Выгрузить().Количество();
       Если КоличествоДС = 1 Тогда
           НайденноеДС = Результат.Выгрузить().Получить(0).Ссылка;
           ДопСоглашения = "Добавлено: " + Строка(НайденноеДС);    
       Иначе
           НайденноеДС = ПредопределенноеЗначение("Документ.ДополнительноеСоглашение.ПустаяСсылка");
           ДопСоглашения = "Имеется: " + Строка(КоличествоДС) + ОбщегоНазначенияКлиентСервер.ФормаМножественногоЧисла(" дополнительное соглашение", " дополнительных соглашения", " дополнительных соглашений", КоличествоДС);
       КонецЕсли;
       Элементы.ДопСоглашения.Гиперссылка = Истина;
   КонецЕсли;

КонецПроцедуры
24 Smallrat
 
08.08.12
13:14
и далее

&НаКлиенте
Процедура ДопСоглашенияНажатие(Элемент, СтандартнаяОбработка)
   СтандартнаяОбработка = Ложь;
   Если НайденноеДС <> Неопределено Тогда
       Если Не НайденноеДС.Пустая()Тогда
           ОткрытьФорму("Документ.ДополнительноеСоглашение.ФормаОбъекта", Новый Структура("Ключ", НайденноеДС));
       Иначе
           ОткрытьФорму("Документ.ДополнительноеСоглашение.ФормаСписка", Новый Структура("ОтборДоговор", Объект.Ссылка), ЭтаФорма);
       КонецЕсли;
   КонецЕсли;
   УстановитьТекстыНадписей();
КонецПроцедуры
25 Незнайка69
 
08.08.12
13:20
Спасибо за советы, я попробую сделать
26 Reset
 
08.08.12
13:28
Идеологически верно при проведении заявки делать приход в какой-л РН с измерением Заявка, при проведении ПКО - расход с этим же измерением. Факт того что заявка оплачена - отсутвие остатков в РН.
27 Smallrat
 
08.08.12
13:31
(25) :) без реквизита правда будет сложнее впихнуть галку в форму списка.
(26) да, конечно, но задача тут сведена к простому наличию подчиненного документа.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший