|
Запись в регистр без проведения документа | ☑ | ||
---|---|---|---|---|
0
Dmitry017
25.03.13
✎
21:22
|
Задача - осуществить бронирование товаров. В форме документа сделал кнопочку БронированиеТоваров и выполнил запись движений
&НаКлиенте Процедура БронированиеТоваров(Команда) // Вставить содержимое обработчика. БронированиеТоваровНаСервере(); КонецПроцедуры &НаСервере Процедура БронированиеТоваровНаСервере() //При записи движений по регистру накопления обязательно заполнение в каждой записи //поля "Регистратор". Заполнение поля будет производиться автоматически, //но если докуме6нт ещё не записан - с этим возникнут проблемы //поэтому первым делом записываем сам документ Записать(); // регистр БронированиеТоваров Приход Движения.БронированиеТоваров.Записывать = Истина; Движение = Движения.БронированиеТоваров.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Период = Дата; Движение.Номенклатура = Номенклатура; Движение.КоличествоЗабронированного = Количество; Движения.БронированиеТоваров.Записать(); КонецПроцедуры // БронированиеТоваровНаСервере() Проблема - ошибка: {Документ.РасходнаяНакладная.Форма.ФормаДокумента.Форма(48,2)}: Недостаточно фактических параметров (Записать) <<?>>Записать(); (Проверка: Сервер) Вроде бы в книжке по 1С так же написано, но у меня сейчас не работает. Что исправить? |
|||
1
ДенисЧ
25.03.13
✎
21:23
|
регистратора не прописал
|
|||
2
Адинэснег
25.03.13
✎
21:24
|
отбор где?
|
|||
3
НафНаф
25.03.13
✎
21:38
|
у тебя случайно нет Записать собственного метода у объекта или формы?
|
|||
4
Dmitry017
25.03.13
✎
21:42
|
Нету такого собственного метода. Единственное что я заметил, все эти движения надо было описывать в модуле объекта, а я описал в модуле формы. Может быть из-за этого? Это вообще сильно важно или нет?
|
|||
5
GROOVY
25.03.13
✎
21:45
|
Записать у формы имеет параметры. СП почитай, туда структуру надо передать в ней режимзаписи=запись.
|
|||
6
GROOVY
25.03.13
✎
21:45
|
(1)(2) Он же в контексте документа, там и регистратор и отборы по дефолту выставлены.
|
|||
7
НафНаф
25.03.13
✎
21:46
|
(4) движения конечно нужно делать в объекте, ну или в менеджере
|
|||
8
GROOVY
25.03.13
✎
21:46
|
Расширение управляемой формы для документа.Записать (Managed form extension for documents.Write)
Расширение управляемой формы для документа (Managed form extension for documents) Записать (Write) Синтаксис: Записать(<ПараметрыЗаписи>) Параметры: <ПараметрыЗаписи> (необязательный) Тип: Структура. Структура параметров записи, которые могут быть обработаны в обработчиках событий записи. Состав параметров произвольный. Содержит предопределенные параметры записи РежимЗаписи и РежимПроведения. Предопределенные параметры передаются в метод объекта Записать. Параметры записи можно обработать в событиях формы ПередЗаписью, ПередЗаписьюНаСервере, ПриЗаписиНаСервере, ПослеЗаписиНаСервере, ПослеЗаписи. Возвращаемое значение: Тип: Булево. Истина - успешно записан; Ложь - в противном случае. Описание: Записывает объект. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер). |
|||
9
GROOVY
25.03.13
✎
21:47
|
(7) Это приходит с опытом. Технически писать движения можно где угодно.
|
|||
10
Dmitry017
25.03.13
✎
21:50
|
(5) По поводу параметров. Теперь всё очень внимательно переписал, на Запись() перестал ругаться.
//на форме &НаКлиенте Процедура БронированиеТоваров(Команда) // Вставить содержимое обработчика. ВыполнитьБронированиеНаСервере(); КонецПроцедуры // <Описание процедуры> // // Параметры // <Параметр1> - <Тип.Вид> - <описание параметра> // <продолжение описания параметра> // <Параметр2> - <Тип.Вид> - <описание параметра> // <продолжение описания параметра> // &НаСервере Процедура ВыполнитьБронированиеНаСервере() ОбъектДокумента = ДанныеФормыВЗначение(Объект, Тип("ДокументОбъект.РасходнаяНакладная")); ОбъектДокумента.БронированиеТоваров(); ЗначениеВДанныеФормы(ОбъектДокумента, Объект); КонецПроцедуры // ВыполнитьБронированиеНаСервере() //модуль объекта Процедура ОбработкаПроведения(Отказ, Режим) //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! // регистр Количество Расход Движения.Количество.Записывать = Истина; Движение = Движения.Количество.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Номенклатура = Номенклатура; Движение.Количество = Количество; // регистр Сумма Расход Движения.Сумма.Записывать = Истина; Движение = Движения.Сумма.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Номенклатура = Номенклатура; Движение.Сумма = Стоимость; //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ КонецПроцедуры &НаСервере Процедура БронированиеТоваровНаСервере() Экспорт //При записи движений по регистру накопления обязательно заполнение в каждой записи //поля "Регистратор". Заполнение поля будет производиться автоматически, //но если докуме6нт ещё не записан - с этим возникнут проблемы //поэтому первым делом записываем сам документ Записать(); // регистр БронированиеТоваров Приход Движения.БронированиеТоваров.Записывать = Истина; Движение = Движения.БронированиеТоваров.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Период = Дата; Движение.Номенклатура = Номенклатура; Движение.КоличествоЗабронированного = Количество; Движения.БронированиеТоваров.Записать(); КонецПроцедуры // БронированиеТоваровНаСервере() |
|||
11
НафНаф
25.03.13
✎
21:50
|
(9) технически да
(8) так как же недостаточно параметров, если он необязательный? |
|||
12
Dmitry017
25.03.13
✎
21:50
|
только честно говоря, я не особо понял что существенного изменилось. Вроде бы всё то же самое только другими словами. Или я не прав? Можете подсказать?
|
|||
14
GROOVY
25.03.13
✎
21:52
|
(11) Ну вот такой он необязательно/обязательный.
ПараметрыЗаписи = Новый Структура; ПараметрыЗаписи.Вставить("РежимЗаписи", РежимЗаписиДокумента.Проведение); Записать(ПараметрыЗаписи); |
|||
15
НафНаф
25.03.13
✎
21:52
|
УФ намутили...
|
|||
16
zak555
25.03.13
✎
21:53
|
(9) ЭтотОбъект не нужен ?
|
|||
17
GROOVY
25.03.13
✎
21:54
|
(16) Нет.
|
|||
18
НафНаф
25.03.13
✎
21:55
|
(14) накуа это все было так усложнять, вопрос остался
|
|||
19
GROOVY
25.03.13
✎
21:59
|
(18) ИМХО, кто то более разумный синтаксис в УФ делал чем в объектной модели, и параметры передавать параметрами решил, а не через запятую. А другой товарищ при описании метода закопипастил описание метода "Записать()" и не учет что параметры теперь обязательные.
|
|||
20
Dmitry017
25.03.13
✎
23:15
|
Аналогичная задача - но только для нескольких документов сразу. Т.е. Имеется форма списка и там несколько документов. И их надо забронировать.
В модуле объекта документа написал: &НаСервере Процедура ВыполнитьБронирование(ТекДок) Экспорт Если ТекДок.Проведен Тогда Возврат; КонецЕсли; НаборЗаписей = РегистрыНакопления.БронированиеТоваров.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Установить(ТекДок); Движение = НаборЗаписей.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Период = ТекДок.Дата; Движение.Номенклатура = Номенклатура; Движение.КоличествоЗабронированного = Количество; НаборЗаписей.Записать(); КонецПроцедуры // ВыполнитьБронирование() Затем создал команду, БроньСнаружи, которая имеет следующие свойства: Группа: Командная панель формы.Важное Параметры: ДокументСсылка.РасходнаяНакладная А вот это находится в модуле команды: &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) //Вставить содержимое обработчика. //ПараметрыФормы = Новый Структура("", ); //ОткрытьФорму("Документ.РасходнаяНакладная.ФормаСписка", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); ВызыватьВыполнениеБронированияНаСервере(ПараметрКоманды); КонецПроцедуры // <Описание процедуры> // // Параметры // <Параметр1> - <Тип.Вид> - <описание параметра> // <продолжение описания параметра> // <Параметр2> - <Тип.Вид> - <описание параметра> // <продолжение описания параметра> // &НаСервере Процедура ВызыватьВыполнениеБронированияНаСервере(СсылкаНаДокумент) Документы.РасходнаяНакладная.ВыполнитьБронирование(СсылкаНаДокумент); КонецПроцедуры // ВызыватьВыполнениеБронированияНаСервере() В результате ошибка в процессе выполнения: {Документ.РасходнаяНакладная.Команда.БроньСнаружи.МодульКоманды(22)}: Метод объекта не обнаружен (ВыполнитьБронирование) Документы.РасходнаяНакладная.ВыполнитьБронирование(СсылкаНаДокумент); |
|||
21
grayshadow
25.03.13
✎
23:27
|
может объект не инициализирован?
вот это Процедура ВыполнитьБронирование(ТекДок) Экспорт попробуйте перекинуть в модуль менеджера |
|||
22
GROOVY
25.03.13
✎
23:28
|
В модуле объекта нафига директивы компиляции?
|
|||
23
GROOVY
25.03.13
✎
23:30
|
Зачем вообще мучать модуль объекта при групповой обработке?
(20) Та понимаешь контекст исполнения модуля объекта, от контекста исполнения модуля формы или модуля менеджера? ИМХО, нет. Надо тут подтянуть знания. |
|||
24
GROOVY
25.03.13
✎
23:31
|
Документы.РасходнаяНакладная.ВыполнитьБронирование(СсылкаНаДокумент); - так можно обратиться только к модулю менеджера.
|
|||
25
GROOVY
25.03.13
✎
23:31
|
Для обращения к процедуре в модуле объекта нужно это объект получить.
|
|||
26
НафНаф
26.03.13
✎
06:49
|
(19) "кто то более разумный синтаксис в УФ делал чем в объектной модели, и параметры передавать параметрами решил, а не через запятую"
В чем разумность? В том, что писать нужно больше, а передать чушь? Параметры передаются всегда параметрами, это как масло масляное |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |