Имя: Пароль:
1C
1С v8
Перемещение товаров по ордеру
0 kojinandrej
 
25.11.11
14:29
Люди помогите оптимизировать. Есть код:


СкладОтбор = УправлениеПользователями.ОпределитьТекущегоПользователя();
Если ЭтотОбъект.ВидОперации = Перечисления.ВидыОперацийПеремещениеТоваров.ТоварыПродукцияПоОрдерам и Не РольДоступна("Ялта") и ЭтотОбъект.Ответственный = СкладОтбор Тогда

Ответ = Вопрос("Создать Расходный Ордер на товары?", РежимДиалогаВопрос.ДаНет);

Если Ответ = КодВозвратаДиалога.Да Тогда

ОбъектРасхода = Документы.РасходныйОрдерНаТовары.СоздатьДокумент();

ОбъектРасхода.ВидОперации = Перечисления.ВидыОперацийРасходныйОрдер.Перемещение;
ОбъектРасхода.ДокументПередачи = ЭтотОбъект.Ссылка;
ОбъектРасхода.Склад = ЭтотОбъект.СкладОтправитель;

ФормаРасхода = ОбъектРасхода.ПолучитьФорму();
ФормаРасхода.ЗаполнитьТовары(Истина);
ФормаРасхода.Открыть();

ФормаРасхода.ЗаписатьВФорме(РежимЗаписиДокумента.Проведение);
ОбъектРасхода.Движения.Записать();
ФормаРасхода.Закрыть();

КонецЕсли;

Ответ = Вопрос ("Выполнить переоценку товаров?",РежимДиалогаВопрос.ДаНет);

Если Ответ=КодВозвратаДиалога.Да Тогда

ОбъектПереоценка = Документы.ПереоценкаТоваровВРознице.СоздатьДокумент();
ОбъектПереоценка.Заполнить(ЭтотОбъект.Ссылка);

ФормаПереоценка = ОбъектПереоценка.ПолучитьФорму();
ФормаПереоценка.ПараметрОснование = ЭтотОбъект.Ссылка;
ФормаПереоценка.Открыть();

КонецЕсли;


КонецЕсли;


Как создать условие проверки что если по этому перемещению создан расходный ордер, то спрашивать про ордер не надо
1 viknik
 
25.11.11
15:03
1-й вариант: проверить, есть ли документ РасходныйОрдер с ДокументПередачи=ПеремещениюТоваров.
Но при этом не гарантируется, что имеющийся расходный ордер закрыл все кол-во по перемещению. Поэтому:
2-й вариант: Проверить остатки в регистре ТоварыКПередачеСоСкадов по ДокументПередачи=Перемещение. Если остатки равны 0, то расходный ордер не нужен.
2 kojinandrej
 
25.11.11
15:10
А Если товар не один на складе, а есть еще в остатках!
3 viknik
 
25.11.11
15:11
Посмотри, какие данные заполняются в регистр ТоварыКПередачеСоСкладов, тогда все вопросы отпадут.
4 kojinandrej
 
25.11.11
15:29
Хорошо. Есть ДоментПередачи. Как написать условие проверки если в этом списке нет этого перемещения тогда создавать расходный ордер если есть тогда не создавать. если написать простой запрос

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

Запрос.Текст ="Выбрать
   |ДокументПередачи
   |Из
   |РегистрНакопления.ТоварыКПередачеСоСкладов
   |Сгруппировать  по
   |   ДокументПередачи";
   
   Выборка = Запрос.Выполнить().Выбрать();
   
   Пока Выборка.Следующий() Цикл
       Если ЭтотОбъект.Ссылка <> Выборка.ДокументПередачи Тогда

Тогда он на каждый документ передачи не равный текущему будет создавать расходный ордер
5 viknik
 
25.11.11
15:38
Ну примерно так:

Выбрать
*
ИЗ
 РегистрНакопления.ТоварыКПередачеСоСкладов.Остаки
ГДЕ
 ДокументПередачи=&документПередачи

Выборка = Запрос.Выполнить().Выгрузить();
Если Выборка.Количество() > 0 Тогда
  СоздатьРасходныйОрдер();
КонецЕсли;
6 kojinandrej
 
25.11.11
15:43
{Документ.ПеремещениеТоваров.Форма.ФормаДокумента.Форма(1585)}: Ошибка при вызове метода контекста (Выполнить)
   Выборка = Запрос.Выполнить().Выгрузить();
по причине:

по причине:
{(4, 1)}: Таблица не найдена "РегистрНакопления.ТоварыКПередачеСоСкладов.Остаки"
<<?>>РегистрНакопления.ТоварыКПередачеСоСкладов.Остаки
7 viknik
 
25.11.11
15:44
Остатки
8 kojinandrej
 
25.11.11
15:45
{Документ.ПеремещениеТоваров.Форма.ФормаДокумента.Форма(1585)}: Ошибка при вызове метода контекста (Выполнить)
   Выборка = Запрос.Выполнить().Выгрузить();
по причине:

по причине:
{(6, 21)}: Не задано значение параметра "документПередачи"
ДокументПередачи=<<?>>&документПередачи
9 kojinandrej
 
25.11.11
15:49
Спасибо за идею апрос.Текст ="Выбрать
   |*
   |Из
   |РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки
   |ГДЕ
   |   ДокументПередачи=&документПередачи";
   Запрос.Параметры.Вставить("ДокументПередачи",ЭтотОбъект.Ссылка);
   Выборка = Запрос.Выполнить().Выгрузить();
Если Выборка.Количество() > 0 Тогда
вот так должно быть
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс