|
Записать документ 8.2 | ☑ | ||
---|---|---|---|---|
0
padaril
13.10.11
✎
12:19
|
Не могу записать документ.
Объект.Записать(); - не хочет Пытался получить объект: ЭтотОбъект = Объект.Ссылка.ПолучитьОбъект(); ЭтотОбъект.Записать(); Еще не установлена ссылка. |
|||
1
ДенисЧ
13.10.11
✎
12:20
|
не хочет - это очень подробное описание ошибки... Мы сразу поняли, что ей надо. Но тебе не скажем.
|
|||
2
luckyluke
13.10.11
✎
12:20
|
(0) Что за объект? Почему не хочет? Как создавал?
|
|||
3
ponaroshku
13.10.11
✎
12:21
|
(0)
что делаешь?:) |
|||
4
PCcomCat
13.10.11
✎
12:22
|
Объект.Записать(РежимЗаписиДокумента.Записать); ?????
|
|||
5
PCcomCat
13.10.11
✎
12:24
|
"Пытался получить объект:
ЭтотОбъект = Объект.Ссылка.ПолучитьОбъект(); ЭтотОбъект.Записать();" - Это вообще на грани фантастики - изменять можно только объект, а ссылки можно читать. |
|||
6
Vakhrin
13.10.11
✎
12:24
|
(4) по умолчанию
|
|||
7
padaril
13.10.11
✎
12:25
|
Суть задачи - ввод на основании с проверкой наличия уже существующего введенного на основании документа. Понимаю, что делаю через задницу - но все же. Более нормального пути не нашел еще. Сначала пробовал в обработке заполнения вводимого на основании документа - но столкнулся с другими препятствиями и решил пойти так.
&НаКлиенте Процедура Реализация(Команда) СсылкаНаДокумент = СозданиеОткрытиеРеализации(); ОткрытьЗначение(СсылкаНаДокумент); КонецПроцедуры &НаСервере Функция СозданиеОткрытиеРеализации() ЭтотОбъект = Объект.Ссылка.ПолучитьОбъект(); ЭтотОбъект.Записать(); ЗапросНаличия = Новый Запрос("ВЫБРАТЬ | РеализацияТоваров.Ссылка |ИЗ | Документ.РеализацияТоваров КАК РеализацияТоваров |ГДЕ | РеализацияТоваров.Основание = &Основание"); ЗапросНаличия.УстановитьПараметр("Основание", Объект.Ссылка); ВыборкаНаличия = ЗапросНаличия.Выполнить().Выбрать(); Если ВыборкаНаличия.Следующий() Тогда СсылкаНаДокумент = ВыборкаНаличия.Ссылка; Иначе НовДок = Документы.РеализацияТоваров.СоздатьДокумент(); НовДок.Дата = ТекущаяДата(); НовДок.Контрагент = Объект.Контрагент; НовДок.Основание = Объект.Ссылка; Для Каждого ТС Из Объект.ТабличнаяЧасть1 Цикл НоваяСтрока = НовДок.Товары.Добавить(); НоваяСтрока.Количество = ТС.Количество; НоваяСтрока.Номенклатура = ?(ЗначениеЗаполнено(ТС.НоменклатураЗамена), ТС.НоменклатураЗамена, ТС.Номенклатура); НоваяСтрока.ЕдиницаИзмерения = ТС.Номенклатура.ЕдиницаИзмерения; НоваяСтрока.СуммаВсего = ТС.Сумма; НоваяСтрока.Цена = ТС.Цена; КонецЦикла; НовДок.Записать(); СсылкаНаДокумент = НовДок.Ссылка; КонецЕсли; Возврат СсылкаНаДокумент; КонецФункции |
|||
8
padaril
13.10.11
✎
12:27
|
Объект.Записать();
{Документ.Заказ.Форма.ФормаДокумента.Форма(56)}: Метод объекта не обнаружен (Записать) Объект.Записать(); |
|||
9
PCcomCat
13.10.11
✎
12:27
|
Объект откуда берется?
|
|||
10
PCcomCat
13.10.11
✎
12:28
|
(8) Я тоже по тексту не пойму, какой объект нужно записать.
|
|||
11
padaril
13.10.11
✎
12:32
|
Объект нужно записать тот, на основании которого создается реализация.
Иначе в запрос параметром передается пустая ссылка, и находит реализации с основанием - пустая ссылка |
|||
12
Mort
13.10.11
✎
12:33
|
А все оттого что открытие формы нового документа производится через задний проход.
|
|||
13
padaril
13.10.11
✎
12:33
|
Метод, конечно через голову, может кто-нибудь знает как это можно реализовать в обработке заполнения реализации?
|
|||
14
PCcomCat
13.10.11
✎
12:34
|
Где это все происходит? В модуле формы Заказа?
|
|||
15
Vakhrin
13.10.11
✎
12:35
|
&НаКлиенте
Процедура Реализация(Команда) Записать(); СсылкаНаДокумент = СозданиеОткрытиеРеализации(); ОткрытьЗначение(СсылкаНаДокумент); КонецПроцедуры &НаСервере Функция СозданиеОткрытиеРеализации() ЗапросНаличия = Новый... и т.д. |
|||
16
padaril
13.10.11
✎
12:35
|
Перед заполнением необходимо проверить, есть ли уже созданный на основании (реадизовано запросом), и если есть - открыть найденный документ а текущий не открывать, если нет - обычное заполнение.
|
|||
17
PCcomCat
13.10.11
✎
12:36
|
(16) Это уже все поняли! А ОБЪЕКТ - это у тебя что?
|
|||
18
padaril
13.10.11
✎
12:37
|
&НаКлиенте
Процедура Реализация(Команда) Записать(); ... Спасибо! Не проснулся еще =) Все же, может лучше делать через обработку заполнения? |
|||
19
padaril
13.10.11
✎
12:37
|
(17) Объект - Это заказ.
|
|||
20
padaril
13.10.11
✎
12:38
|
На основании заказа создать реализацию.
|
|||
21
PCcomCat
13.10.11
✎
12:38
|
Судя по тексту (телепатируем), то засада здесь:
ЭтотОбъект = Объект.Ссылка.ПолучитьОбъект(); - убрать нафиг!!! ЭтотОбъект.Записать(); |
|||
22
PCcomCat
13.10.11
✎
12:39
|
+(21) Или как в (15) просто
Записать(); |
|||
23
unregistered
13.10.11
✎
12:40
|
&НаКлиенте
Функция ЗаписатьДокумент(Действие) Если Модифицированность ИЛИ ПроверкаНовыйНаСервере() Тогда ЗаписатьНаСервере(РежимЗаписиДокумента.Запись); КонецЕсли; Возврат Истина; КонецФункции // ЗаписатьДокументОтменивПроведение() &НаСервере Функция ПроверкаНовыйНаСервере() Об = РеквизитФормыВЗначение("Объект"); Возврат Об.ЭтоНовый(); КонецФункции // ПроверкаНовыйНаСервере() &НаСервере Процедура ЗаписатьНаСервере(Режим) Об = РеквизитФормыВЗначение("Объект"); Об.Записать(Режим); ЗначениеВРеквизитФормы(Об, "Объект"); КонецПроцедуры // ЗаписатьНаСервере() |
|||
24
unregistered
13.10.11
✎
12:41
|
(22) Записать() на клиенте? А разве это возможно?
|
|||
25
Mort
13.10.11
✎
12:42
|
Какая жесть. Записывать то накуа?
|
|||
26
padaril
13.10.11
✎
12:43
|
Да, с этим разобрался!
Сделал как в (15). Можно ли это реализовать в обработке заполнения документа реализация? |
|||
27
PCcomCat
13.10.11
✎
12:44
|
(24) Телепатия - это сила! Все происходит в модуле формы документа.
|
|||
28
padaril
13.10.11
✎
12:49
|
Думал сделать так: в реализации добавить реквизит ОтказОткрытия,
при проверке на наличие уже созданного на основании - ОтказОткрытия = Истина, и в ПередОткрытием условие: Отказ = ОтказОткрытия. Но! Как тогда в обработке заполнения открыть найденный документ? Из сервера ведь невозможно открыть форму тонкого клиента. |
|||
29
PCcomCat
13.10.11
✎
12:51
|
(26) ОбработкаЗаполнения(Источник, Основание, Отказ).
|
|||
30
padaril
13.10.11
✎
13:01
|
(29) Если бы...
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) 8.2 |
|||
31
padaril
13.10.11
✎
13:15
|
Так как же правильно реализовать проверку при создании на основании на наличие уже созданного документа? Никто не сталкивался с такой необходимостью?
|
|||
32
padaril
13.10.11
✎
13:44
|
Как в обработке заполнения вместо заполняемого документа открыть уже созданный?
|
|||
33
Wingless
13.10.11
✎
13:56
|
(32) Делай проверку в обработкезаполнения, отказ передавай в ПриСозданииНаСервере через ДополнительныеСвойства.
|
|||
34
padaril
13.10.11
✎
14:09
|
Ок, передам отказ в ПриСозданииНаСервере, но где и как смогу открыть созданный ранее документ выявленный проверкой?
|
|||
35
vmv
13.10.11
✎
14:11
|
(34) на клиенте, ссылки можно передавать в массиве с кллиента на сервер и обратно, ваш КО
|
|||
36
padaril
13.10.11
✎
14:18
|
Все же пройдя процедуру ОбработкаЗаполнения, документ создается. А отказ в процедуре ПриСозданииНаСервере лишь его не откроет. Было бы идеально установить эту проверку до создания нового документа Реализация и попадания в процедуру ОбработкаЗаполнения. Но как?!
|
|||
37
Vakhrin
13.10.11
✎
14:34
|
&НаКлиенте
Процедура СоздатьНаОсновании(Команда) Записать(); НовыйОбъект = СоздатьНаОснованииНаСервере(); НовыйОбъект.ПолучитьФорму().Открыть(); КонецПроцедуры &НаСервере Функция СоздатьНаОснованииНаСервере() // тут можно проверку на уже существующий // с возвратом полученного объекта/ссылка для открытия НовыйОбъект = Документы.РеализацияТоваров.СоздатьДокумент(); НовыйОбъект.Заполнить(Объект.Ссылка); НовыйОбъект.Дата = ТекущаяДата(); НовыйОбъект.УстановитьНовыйНомер(); Возврат НовыйОбъект; КонецФункции |
|||
38
Wingless
13.10.11
✎
14:38
|
(37)
>>НовыйОбъект.ПолучитьФорму().Открыть(); Круто. Как сам думаешь, это будет работать? |
|||
39
Vakhrin
13.10.11
✎
14:40
|
(38) даже проверил )
|
|||
40
padaril
13.10.11
✎
14:44
|
В итоге сделал вот так:
&НаКлиенте Процедура Реализация(Команда) Записать(); СсылкаНаДокумент = СозданиеОткрытиеРеализации(); Если СсылкаНаДокумент = Неопределено Тогда ОткрытьФорму("Документ.РеализацияТоваров.Форма.ФормаДокумента", Новый Структура("Основание", Объект.Ссылка)); Иначе ОткрытьЗначение(СсылкаНаДокумент); КонецЕсли; КонецПроцедуры &НаСервере Функция СозданиеОткрытиеРеализации() ЗапросНаличия = Новый Запрос("ВЫБРАТЬ | РеализацияТоваров.Ссылка |ИЗ | Документ.РеализацияТоваров КАК РеализацияТоваров |ГДЕ | РеализацияТоваров.Основание = &Основание"); ЗапросНаличия.УстановитьПараметр("Основание", Объект.Ссылка); ВыборкаНаличия = ЗапросНаличия.Выполнить().Выбрать(); Если ВыборкаНаличия.Следующий() Тогда СсылкаНаДокумент = ВыборкаНаличия.Ссылка; Иначе СсылкаНаДокумент = Неопределено; КонецЕсли; Возврат СсылкаНаДокумент; КонецФункции |
|||
41
padaril
13.10.11
✎
14:45
|
но на форме (упр. прил) вкладка "Создать на основании" и рядом кнопка "Создать Расход".
Поэтому и хотел все прописать иначе. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |