Имя: Пароль:
1C
1C 7.7
v7: Сделать запрос на дату и время документа
0 Double_Medved
 
20.01.14
11:16
Добрый день! Простите если вопрос тупой, надо получать остатки товара при открытии документа и выделении строки, на дату и время этого документа. На момент до его проведения. Например в 10.00 было 10 шт. Потом в 12.00 Была реализация N1 на 3 шт. Потом в 15.00 была Реализация N2 на 4 шт. Надо чтобы при открытии Реализации N1 в ней показывалось "В наличии 10 шт", а в Реализации N2 "В наличии 7 шт". Потом например создают в 20.00 Реализацию N3, и пока документ новый, не записан, делают подбор - и там должно отображаться "В наличии 3шт"
Собстенно подскажите пожалуйста, как делать запрос на дату и время конкретного документа, а не на "11.12.2013"?  Период с Док.ТекущийДокумент() по Док.ТекущийДокумент()?  И как тогда быть с Реализацией в 20.00, которая еще не записана?
1 КонецЦикла
 
20.01.14
11:18
Не надо запрос, смотри ТиС

Если Выбран() = 0 Тогда // новый документ
        Если ДатаДок < ПолучитьДатуТА() Тогда // выписываемый задним числом
            РегЗаявки.ВременныйРасчет();
            РегОстатки.ВременныйРасчет(ЗаполнятьСУчетомОстатков);
            РегРезервы.ВременныйРасчет(ЗаполнятьСУчетомРезервов);
            РегОбщ.РассчитатьРегистрыПо(ДатаДок);
        КонецЕсли;
    Иначе // сохраненный документ
        Если СравнитьТА() < 1 Тогда // позиция не больше ТА
            РегЗаявки.ВременныйРасчет();
            РегОстатки.ВременныйРасчет(ЗаполнятьСУчетомОстатков);
            РегРезервы.ВременныйРасчет(ЗаполнятьСУчетомРезервов);
            РегОбщ.РассчитатьРегистрыНа(ТекущийДокумент());
        КонецЕсли;
    КонецЕсли;
2 Double_Medved
 
20.01.14
11:23
(1) Спасибо, а если у меня новый документ и его дата больше ТА? Например первый документ в понедельник - на момент его создания ТА будет на пятницу, тогда мне что сделать? рассчитать на ТА?
3 Double_Medved
 
20.01.14
12:09
Я сделал вот такую штуку, работает, но отрабатывает долго, вот хочу запросом переделать, подскажите, как сделать запрос на дату и время документа?
Функция Резервы()
    ИнфоТекст = ""; //Строка для вывода результата  
    Рег = СоздатьОбъект("Регистры");
    РегРезервы = Рег.РезервыТМЦ;
    РегРезервы.ВременныйРасчет(1);  
    Рег.Актуальность(1);
    Если Выбран() = 0 Тогда // новый документ
        Если ДатаДок <= ПолучитьДатуТА() Тогда // выписываемый задним числом      
            Рег.РассчитатьРегистрыПо(ДатаДок); //Рассчитаем на заднее число  
        Иначе //если новый документ, новое число, больше ТА
            Рег.РассчитатьРегистрыПо(ПолучитьДокументТА()); //Рассчитаем на точку актуальности     
        КонецЕсли;
    Иначе //Если открыли старый документ  
        Если ДатаДок <= ПолучитьДатуТА() Тогда // выписываемый задним числом      
            Рег.РассчитатьРегистрыНа(ТекущийДокумент()); //Рассчитаем на заднее число  
        Иначе //если новый документ, новое число, больше ТА
            Рег.РассчитатьРегистрыПо(ПолучитьДокументТА()); //Рассчитаем на точку актуальности     
        КонецЕсли;
                        
    КонецЕсли; //если это новый документ
    //Переберем все склады и посмотрим на них резервы
    Склады = СоздатьОбъект("Справочник.Склады");  
    Склады.ВыбратьЭлементы();
    Пока Склады.ПолучитьЭлемент() = 1 Цикл
        РезервПоСкладу = РегРезервы.СводныйОстаток(,Номенклатура,Склады.ТекущийЭлемент(),,,"Количество");    
        Если РезервПоСкладу <> 0 Тогда
            ИнфоТекст = ИнфоТекст + Склады.ТекущийЭлемент()+ ": " + РезервПоСкладу + " шт, ";    
        КонецЕсли;  
    КонецЦикла;  
    //Уберем последнюю запятую
    ДлинаИнфоТекст = СтрДлина(ИнфоТекст);
    ИнфоТекст = Лев(ИнфоТекст,ДлинаИнфоТекст-2);
    Если ИнфоТекст = "" Тогда
        ИнфоТекст = "нет";
    КонецЕсли;
    Если (Номенклатура.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Услуга)
        или (Номенклатура.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Работа) Тогда
        ИнфоТекст = "";
    КонецЕсли;
    Возврат ИнфоТекст;    
КонецФункции
4 КонецЦикла
 
20.01.14
12:13
Неправильно
Временный расчет нужен если не на ТА документ, см. как в (1)
Кроме того, наверное, надо какой-то фильтр наложить?
Или вся номенклатура нужна и проч.?