Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Ошибка при получении итогов при проведении документа          
XBrut Подменю пользователя
сообщение 23.05.13, 13:44
Сообщение #1

Статус
**********
Группа: Пользователи
Сообщений: 1543
Спасибо сказали: 256 раз
Рейтинг: 0

Платформа 8.2.17.153
Конф.: Управление торговлей 10.3.21.2 (Россия)
Сочиняю самодельный документ. В обработке проведения читаю итоги из регистра накопления.
Итоги читаются так, как будто движения текущего документа записаны в регистр.
Кто-то видит ошибку в коде?

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


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


 ! 

Правила, п 4,5
 


Сообщение отредактировал logist - 23.05.13, 14:23

Спасибо сказали: pablo,

pablo Подменю пользователя
сообщение 23.05.13, 14:00
Сообщение #2

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 193 раз
Рейтинг: 0

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

И мой вариант, вероятно будет работать медленнее?


Signature
Правильно поставленный вопрос содержит до 90% ответа.

Vofka Подменю пользователя
сообщение 23.05.13, 14:06
Сообщение #3

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4612 раз
Рейтинг: 3748.8

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

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


Цитата(pablo @ 23.05.13, 15:00) *
И мой вариант, вероятно будет работать медленнее?

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

XBrut Подменю пользователя
сообщение 23.05.13, 14:23
Сообщение #4

Статус
**********
Группа: Пользователи
Сообщений: 1543
Спасибо сказали: 256 раз
Рейтинг: 0

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

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

В общем так понимаю, что оно там особо от платформы 7 и не отличается.
В метаданных определяем , как будут очищаться движения.
И в случае, если очистка не автоматическая, тогда очищаем в модуле проведения.

Сообщение отредактировал XBrut - 23.05.13, 14:24

pablo Подменю пользователя
сообщение 23.05.13, 15:04
Сообщение #5

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 193 раз
Рейтинг: 0

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

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



Signature
Правильно поставленный вопрос содержит до 90% ответа.

Vofka Подменю пользователя
сообщение 23.05.13, 15:42
Сообщение #6

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4612 раз
Рейтинг: 3748.8

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


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

то в базе данных данные не поменяются.

logist Подменю пользователя
сообщение 23.05.13, 15:53
Сообщение #7

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2539 раз
Рейтинг: 0

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

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


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Vofka Подменю пользователя
сообщение 23.05.13, 16:16
Сообщение #8

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4612 раз
Рейтинг: 3748.8

Цитата(logist @ 23.05.13, 16:53) *
ОбработкаПроведения() в конце если Отказ = Ложь, сделает это сама, если в ней же было задано

Если сделать в обработке проведения запрос - то данные будут прежние, т.е. то, что описывает ТС.

logist Подменю пользователя
сообщение 23.05.13, 17:07
Сообщение #9

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2539 раз
Рейтинг: 0

Цитата(Vofka @ 23.05.13, 17:16) *
Если сделать в обработке проведения запрос - то данные будут прежние

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


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 15.06.25, 22:49
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!