Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
23 ноя 2024, 15:44

Не могу определить где ошибка? Помогите.

Автор 91222, 06 дек 2012, 09:56

0 Пользователей и 1 гость просматривают эту тему.

91222

Добрый день всем!



В управление автотранспортом нужно написать что-то похожее как в бухгалтерии типа документа передача материалов в эксплуатацию. Код проведения приведен ниже. Вроде бы все работает.


Но когда делаем отмену проведения документа и добавляем в документ новые данные, почему-то запрос пустой....


Заранее спасибо.


Процедура ОбработкаПроведения(Отказ, Режим)

// регистр уатПартииТоваровНаСкладах Расход

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

Движения.уатСпецодеждаИИнвентарь.Очистить();

Для Каждого ТекСтрокаСпецодежда Из Спецодежда Цикл

Ном = ТекСтрокаСпецодежда.Номенклатура;

УчетнаяПолитика = РегистрыСведений.уатУчетнаяПолитика.ПолучитьПоследнее(Дата);

Если УчетнаяПолитика = Перечисления.СпособыОценки.ЛИФО Тогда

ПорядокСписания = "УБЫВ";

Иначе

ПорядокСписания = "ВОЗР";

КонецЕсли;

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ
| уатПартииТоваровНаСкладахОстатки.Номенклатура КАК Номенклатура,
| уатПартииТоваровНаСкладахОстатки.Партия КАК Партия,
| уатПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
| уатПартииТоваровНаСкладахОстатки.СтоимостьОстаток КАК СтоимостьОстаток,
| уатПартииТоваровНаСкладахОстатки.СтоимостьУпрОстаток КАК СтоимостьУпрОстаток,
| уатПартииТоваровНаСкладахОстатки.Склад
|ИЗ
| РегистрНакопления.уатПартииТоваровНаСкладах.Остатки(&МоментВремени, Номенклатура = &Ном) КАК уатПартииТоваровНаСкладахОстатки
|
|УПОРЯДОЧИТЬ ПО
| Партия.МоментВремени " + ПорядокСписания + "";

Запрос.УстановитьПараметр("Ном", Ном);

Запрос.УстановитьПараметр("МоментВремени", МоментВремени());

Результат = Запрос.Выполнить();

Выборка = Результат.Выгрузить();
Итого = Выборка.Итог("КоличествоОстаток");
        Выборка.Колонки.Добавить("КоличествоСписать",,"КоличествоСписать");
Кол = ТекСтрокаСпецодежда.Количество;
Если Кол <= Итого Тогда
Для каждого Строка из Выборка Цикл
Если Кол > Строка.КоличествоОстаток Тогда
Строка.КоличествоСписать = Строка.КоличествоОстаток;
    Кол = Кол - Строка.КоличествоСписать;
Иначе
Строка.КоличествоСписать = Кол;
Кол = Кол - Строка.КоличествоСписать;
КонецЕсли;
КонецЦикла;
//ТЧ = Результат.Выгрузить();
//Для каждого Строка из Выборка Цикл
// Если Строка.КоличествоСписать = 0 Тогда
// Выборка.Удалить(Строка);
// КонецЕсли;
//КонецЦикла;

//СтаршийИндексКолонок = Выборка.Колонки.Количество() - 1;

Индекс = Выборка.Количество() - 1;

Пока Индекс >= 0 Цикл

//Для Сч = 0 По СтаршийИндексКолонок Цикл

Если Выборка[Индекс].КоличествоСписать = 0 Тогда

Выборка.Удалить(Индекс);

//Прервать;

КонецЕсли;

//КонецЦикла;

Индекс = Индекс - 1;

КонецЦикла;


Для Каждого Стр Из Выборка Цикл

Движение = Движения.уатПартииТоваровНаСкладах.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Период = Дата;

Движение.Номенклатура = Стр.Номенклатура;

Движение.Склад = Стр.Склад;

    Движение.Количество = Стр.КоличествоСписать;

Движение.Партия = Стр.Партия;

    Движение.Стоимость = Стр.СтоимостьОстаток;

Движение.СтоимостьУпр = Стр.СтоимостьУпрОстаток;

КонецЦикла;

// движения по новому регистру

    Движение = Движения.уатСпецодеждаИИнвентарь.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Приход;

Движение.Период = Дата;

Движение.Номенклатура = ТекСтрокаСпецодежда.Номенклатура;

Движение.Количество =  ТекСтрокаСпецодежда.Количество;

Движение.Местонахождение = Местонахождение;

Движение.Организация = Организация;

Движение.Ответственный = Ответственный;

Движение.Склад = Склад;

Движение.ФизЛицо = ТекСтрокаСпецодежда.ФизЛицо;

Движение.СрокИспользования = ТекСтрокаСпецодежда.СрокИспользования;

Иначе

Нехватает = ТекСтрокаСпецодежда.Количество - Итого;

Сообщение = Новый СообщениеПользователю;

Сообщение.Текст = "Не хватает товара " + "'" + Стр.Номенклатура + "'" +

" количество " + Нехватает + " в наличии осталось только " + Итого;

Сообщение.УстановитьДанные(ЭтотОбъект);

Сообщение.Сообщить();

Отказ = Истина;

КонецЕсли;    
КонецЦикла;




// Вкладка СпецОснастка

Для Каждого ТекСтрокаСпецоснастка Из Спецоснастка Цикл

Ном = ТекСтрокаСпецоснастка.Номенклатура;

УчетнаяПолитика = РегистрыСведений.уатУчетнаяПолитика.ПолучитьПоследнее(Дата);

Если УчетнаяПолитика = Перечисления.СпособыОценки.ЛИФО Тогда

ПорядокСписания = "УБЫВ";

Иначе

ПорядокСписания = "ВОЗР";

КонецЕсли;

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ
| уатПартииТоваровНаСкладахОстатки.Номенклатура КАК Номенклатура,
| уатПартииТоваровНаСкладахОстатки.Партия КАК Партия,
| уатПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
| уатПартииТоваровНаСкладахОстатки.СтоимостьОстаток КАК СтоимостьОстаток,
| уатПартииТоваровНаСкладахОстатки.СтоимостьУпрОстаток КАК СтоимостьУпрОстаток,
| уатПартииТоваровНаСкладахОстатки.Склад
|ИЗ
| РегистрНакопления.уатПартииТоваровНаСкладах.Остатки(&МоментВремени, Номенклатура = &Ном) КАК уатПартииТоваровНаСкладахОстатки
|
|УПОРЯДОЧИТЬ ПО
| Партия.МоментВремени " + ПорядокСписания + "";

Запрос.УстановитьПараметр("Ном", Ном);

Запрос.УстановитьПараметр("МоментВремени", МоментВремени());

Результат = Запрос.Выполнить();

Выборка = Результат.Выгрузить();
Итого = Выборка.Итог("КоличествоОстаток");
        Выборка.Колонки.Добавить("КоличествоСписать",,"КоличествоСписать");
Кол = ТекСтрокаСпецоснастка.Количество;
Если Кол <= Итого Тогда
Для каждого Строка из Выборка Цикл
Если Кол > Строка.КоличествоОстаток Тогда
Строка.КоличествоСписать = Строка.КоличествоОстаток;
    Кол = Кол - Строка.КоличествоСписать;
Иначе
Строка.КоличествоСписать = Кол;
Кол = Кол - Строка.КоличествоСписать;
КонецЕсли;
КонецЦикла;
//ТЧ = Результат.Выгрузить();
//Для каждого Строка из Выборка Цикл
// Если Строка.КоличествоСписать = 0 Тогда
// Выборка.Удалить(Строка);
// КонецЕсли;
//КонецЦикла;

//СтаршийИндексКолонок = Выборка.Колонки.Количество() - 1;

Индекс = Выборка.Количество() - 1;

Пока Индекс >= 0 Цикл

//Для Сч = 0 По СтаршийИндексКолонок Цикл

Если Выборка[Индекс].КоличествоСписать = 0 Тогда

Выборка.Удалить(Индекс);

//Прервать;

КонецЕсли;

//КонецЦикла;

Индекс = Индекс - 1;

КонецЦикла;


Для Каждого Стр Из Выборка Цикл

Движение = Движения.уатПартииТоваровНаСкладах.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Период = Дата;

Движение.Номенклатура = Стр.Номенклатура;

Движение.Склад = Стр.Склад;

    Движение.Количество = Стр.КоличествоСписать;

Движение.Партия = Стр.Партия;

    Движение.Стоимость = Стр.СтоимостьОстаток;

Движение.СтоимостьУпр = Стр.СтоимостьУпрОстаток;

КонецЦикла;

// движения по новому регистру

    Движение = Движения.уатСпецодеждаИИнвентарь.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Приход;

Движение.Период = Дата;

Движение.Номенклатура = ТекСтрокаСпецоснастка.Номенклатура;

Движение.Количество =  ТекСтрокаСпецоснастка.Количество;

Движение.Местонахождение = Местонахождение;

Движение.Организация = Организация;

Движение.Ответственный = Ответственный;

Движение.Склад = Склад;

Движение.ФизЛицо = ТекСтрокаСпецоснастка.ФизЛицо;

Движение.СрокИспользования = ТекСтрокаСпецоснастка.СрокИспользования;

Иначе

Нехватает = ТекСтрокаСпецоснастка.Количество - Итого;

Сообщение = Новый СообщениеПользователю;

Сообщение.Текст = "Не хватает товара " + "'" + Стр.Номенклатура + "'" +

" количество " + Нехватает + " в наличии осталось только " + Итого;

Сообщение.УстановитьДанные(ЭтотОбъект);

Сообщение.Сообщить();

Отказ = Истина;

КонецЕсли;    
КонецЦикла;


КонецПроцедуры


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск