Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Блокировка товара в ТЧ
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование управляемых форм 1С 8.2
1cnovice
Всем добрый время!
Подкиньте советов, подскажите где копать..
Не судите строго, еще маладой в этом деле

Есть Регистр Накопления "БлокировкаТовара" С Измерением номенклатура и ресурсом количество
Задача состоит в том что бы пользователь мог блокировать товар в расходной накладной, который введен в табличную часть, кнопочкой на форме.

Собсна, создал я экспортную процедуру в модуле документа Расходная:

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


И потом вызываю ее в обработчике этой кнопки:
&НаКлиенте
Процедура Заблокировать(Команда)
    ЗаблокироватьНаСервере();
КонецПроцедуры

&НаСервере
Процедура ЗаблокироватьНаСервере()
    Документ=РеквизитФормыВЗначение("Объект");
    Документ.БлокировкаТовара();
    ЗначениеВРеквизитФормы(Документ,"Объект");
КонецПроцедуры


В результате проблема следующая: В регистр записывается только 1 строчка с товаром из ТЧ..
Мне кажется косяк в процедуре модуля формы в преобразовании объекта, впервые сталкиваюсь с данным методом
XBrut
Шо ж Вы набор записей в каждом проходе цикла создаёте?
Создайте процедуру обработки проведения конструктором и посмотрите як люды делають icon_beer17.gif
Vofka
Процедура БлокировкаТовара()Экспорт
    Записать();
    Движения.БлокировкаТовара.Очистить();
    Запрос=Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ
    |    РасходнаяНакладнаяПереченьТоваров.Номенклатура,
    |    РасходнаяНакладнаяПереченьТоваров.Количество
    |ИЗ
    |    Документ.РасходнаяНакладная.ПереченьТоваров КАК РасходнаяНакладнаяПереченьТоваров
    |ГДЕ
    |    РасходнаяНакладнаяПереченьТоваров.Ссылка = &Ссылка";
    Запрос.УстановитьПараметр("Ссылка",Ссылка);
    Результат=Запрос.Выполнить().Выбрать();
    НаборЗаписей=Движения.БлокировкаТовара;
    Пока Результат.Следующий() Цикл
       Движение=НаборЗаписей.ДобавитьПриход();
       Движение.Номенклатура=Результат.Номенклатура;
       Движение.Период=Дата;
       Движение.Количество=Результат.Количество;
    КонецЦикла;
    Движения.БлокировкаТовара.Записать();
КонецПроцедуры
logist
Процедура БлокировкаТовара()Экспорт
    Записать();
    Движения.БлокировкаТовара.Очистить();
    Запрос=Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ
    |    РасходнаяНакладнаяПереченьТоваров.Ссылка КАК Регистратор,
    |    РасходнаяНакладнаяПереченьТоваров.Ссылка.Дата КАК Период,
    |    ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) КАК ВидДвижения,
    |    РасходнаяНакладнаяПереченьТоваров.Номенклатура,
    |    РасходнаяНакладнаяПереченьТоваров.Количество
    |ИЗ
    |    Документ.РасходнаяНакладная.ПереченьТоваров КАК РасходнаяНакладнаяПереченьТоваров
    |ГДЕ
    |    РасходнаяНакладнаяПереченьТоваров.Ссылка = &Ссылка";
    Запрос.УстановитьПараметр("Ссылка",Ссылка);
    Результат=Запрос.Выполнить().Выгрузить();
    Движения.БлокировкаТовара.Загрузить(Результат);
    Движения.БлокировкаТовара.Записать();
КонецПроцедуры

1cnovice
Спасибо вам. Я что-то и не подумал насчет того что создается набор записей в каждом проходе цикла. Первый раз делаю набор записей вне модуля "обработка проведения"
logist
Цитата(1cnovice @ 06.06.13, 10:23) необходимо зарегистрироваться для просмотра ссылки
Первый раз делаю набор записей вне модуля "обработка проведения"

Запись движений в процедуре проведения и вне ее, как правило не отличается. Для управляемого приложения так же есть стандарты формирования движений, используя модуль менеджера объекта, ДополнительнчеСвойства объекта, и общие процедуры по записи движений.
Vofka
Цитата(logist @ 06.06.13, 10:52) необходимо зарегистрироваться для просмотра ссылки
Для управляемого приложения так же есть стандарты формирования движений

Они где-то описаны?
logist
Цитата(Vofka @ 06.06.13, 10:55) необходимо зарегистрироваться для просмотра ссылки
Они где-то описаны?

Без понятия, но на их наличие указывает использование одинакового механизма заполнения движения в разных конфигурация, в т.ч. у разных разработчиков (имеются ввиду продукты 1С:Совместимо)
A1ex_2
Цитата(1cnovice @ 05.06.13, 21:20) необходимо зарегистрироваться для просмотра ссылки
ТЗ=Запрос.Выполнить().Выгрузить();
Пока Результат.Следующий() Цикл


меня ето смущает, в Таблице значений метод "Следующий()" не доступный. естественно цыкл не будет выполнятса.
alex040269
Цитата(A1ex_2 @ 08.06.13, 8:42) необходимо зарегистрироваться для просмотра ссылки
меня ето смущает, в Таблице значений метод "Следующий()" не доступный. естественно цыкл не будет выполнятса.



ТЗ=Запрос.Выполнить().Выбрать();
1cnovice
ТЗ=Запрос.Выполнить().Выбрать();


Да эту строчку можно было бы убрать, я использовал ее что бы посмотреть лишь результат запроса
XBrut
Движения.БлокировкаТовара.Загрузить(Результат);
Движения.БлокировкаТовара.Записать();


это какой то гламур smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.