Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ошибка при получении итогов при проведении документа
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
XBrut
Платформа 8.2.17.153
Конф.: Управление торговлей 10.3.21.2 (Россия)
Сочиняю самодельный документ. В обработке проведения читаю итоги из регистра накопления.
Итоги читаются так, как будто движения текущего документа записаны в регистр.
Кто-то видит ошибку в коде?

Процедура ОбработкаПроведения(Отказ, Режим)
    Движения.ТоварыНаСкладах.Очистить();    //ВОТ ТУТ ЖЕ Я ВРОДЕ БЫ ОЧИЩАЮ ДВИЖЕНИЯ
    Запрос        =Новый Запрос;
    Запрос.УстановитьПараметр("Дата",Дата);
    Запрос.УстановитьПараметр("ВсеТовары",НЕ ЗначениеЗаполнено(Номенклатура));
    Запрос.УстановитьПараметр("ВыбТовар" ,Номенклатура);
    Запрос.Текст=
    "ВЫБРАТЬ
    |    ТоварыНаСкладахОстатки.Номенклатура,
    |    ТоварыНаСкладахОстатки.Склад,
    |    ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
    |    ТоварыНаСкладахОстатки.СерияНоменклатуры,
    |    ТоварыНаСкладахОстатки.Качество,
    |    ТоварыНаСкладахОстатки.КоличествоОстаток
    |ИЗ
    |    РегистрНакопления.ТоварыНаСкладах.Остатки(
    |            &Дата,
    |            &ВсеТовары
    |                ИЛИ Номенклатура В ИЕРАРХИИ (&ВыбТовар)) КАК ТоварыНаСкладахОстатки";
    тзИт=Запрос.Выполнить().Выгрузить();
    //ДАЛЬШЕ СОЗДАЮТСЯ ДВИЖЕНИЯ ТИПА ТАК
    Движение                                 = Движения.ТоварыНаСкладах.Добавить();
    Движение.ВидДвижения                 = ВидДвиженияНакопления.Расход;
    Движение.Период                     = Дата;
    Движение.Номенклатура                     = Товар;
    Движение.Склад                     = СтрИТ.Склад;
    Движение.ХарактеристикаНоменклатуры    = СтрИТ.ХарактеристикаНоменклатуры;
    Движение.СерияНоменклатуры                 = СтрИТ.СерияНоменклатуры;            
    Движение.Качество                    = СтрИТ.Качество;
    Движение.Количество                 = МожноСписать;
КонецПроцедуры


сам нашел.
В метаданных документа поставил "Удаление движений"=Удалять автоматически.
И итоги стали читаться нормально.


 ! 

Правила, п 4,5
 
pablo
Я в подобной ситуации переписал запрос следующим образом:
    "ВЫБРАТЬ
    |    ТоварыНаСкладахОстатки.Номенклатура,
    |    ТоварыНаСкладахОстатки.Склад,
    |    ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
    |    ТоварыНаСкладахОстатки.СерияНоменклатуры,
    |    ТоварыНаСкладахОстатки.Качество,
    |    ТоварыНаСкладахОстатки.КоличествоОстаток
    |ИЗ
    |    РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладахОстатки
         Где ТоварыНаСкладахОстатки.Период<&Дата и (&ВсеТовары ИЛИ ТоварыНаСкладахОстатки.Номенклатура В ИЕРАРХИИ (&ВыбТовар))
         И Регистратор<>&Регистратор
"

И мой вариант, вероятно будет работать медленнее?
Vofka
XBrut, хоть проблема и решена кагбэ, но 5 коп вставлю. После строки
Движения.ТоварыНаСкладах.Очистить();    //ВОТ ТУТ ЖЕ Я ВРОДЕ БЫ ОЧИЩАЮ ДВИЖЕНИЯ

вставьте
Движения.Записать();


Цитата(pablo @ 23.05.13, 15:00) необходимо зарегистрироваться для просмотра ссылки
И мой вариант, вероятно будет работать медленнее?

Медленнее хотя бы за счет того, что вы к физической таблице запрос делаете. И ещё у вас там остатков то и нету, просто куча движений будет.
XBrut
Цитата
Движения.Записать();

Виноват. Это я в фрагмент кода не вставил.

В общем так понимаю, что оно там особо от платформы 7 и не отличается.
В метаданных определяем , как будут очищаться движения.
И в случае, если очистка не автоматическая, тогда очищаем в модуле проведения.
pablo
А вот если такая конструкция
    Движения.ТоварыНаСкладах.Записывать = Истина;
    Движения.ТоварыНаСкладах.Очистить();

не будет равноценна
    Движения.ТоварыНаСкладах.Очистить();
    Движения.ТоварыНаСкладах.Записать();

Vofka
pablo, у меня сейчас кателок туго варит, но по-моему нет.


Пока вы не сделали
Движения.ТоварыНаСкладах.Записать();

то в базе данных данные не поменяются.
logist
Цитата(Vofka @ 23.05.13, 16:42) необходимо зарегистрироваться для просмотра ссылки
то в базе данных данные не поменяются.

Да, но ОбработкаПроведения() в конце если Отказ = Ложь, сделает это сама, если в ней же было задано "Движения.ТоварыНаСкладах.Записывать = Истина;"
Vofka
Цитата(logist @ 23.05.13, 16:53) необходимо зарегистрироваться для просмотра ссылки
ОбработкаПроведения() в конце если Отказ = Ложь, сделает это сама, если в ней же было задано

Если сделать в обработке проведения запрос - то данные будут прежние, т.е. то, что описывает ТС.
logist
Цитата(Vofka @ 23.05.13, 17:16) необходимо зарегистрироваться для просмотра ссылки
Если сделать в обработке проведения запрос - то данные будут прежние

Да. Не обратил внимание на то, что данные надо получить в процедуре проведения.
В УНФ и УТ3, например, движения записываются еще до окончания ОбработкиПроведения отдельной процедурой, поэтому данные регистров уже можно получить до окончания проведения (используется для контроля отрицательных остатков, например). Там это организовано через "Движения.ТоварыНаСкладах.Записать();"
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.