Вход | Регистрация

1С:Предприятие ::

Метки:

Объясните, как такое могло получиться?

Я
   Таня
 
01.02.04 - 12:06
Я вроде бы написала, чтобы документ записывался в начало дня, а он записывается на 10 минут раньше документа, из которого берет данные.

вот что у меня написано:
ТовЧек.ВыбратьДокументы(ДатаНачала, ДатаКонца);
Пока ТовЧек.ПолучитьДокумент() =1 Цикл
Перемещение.Новый();
Перемещение.ДатаДок = ТовЧек.ДатаДок;
Если ТовЧек.ДатаДок = ДатаНачала Тогда
   //???

Иначе 
    Перемещение.АвтоВремяНачалоДня();
КонецЕсли;
Перемещение.Отдел = ТовЧек.Отдел;
    ТовЧек.ВыгрузитьТабличнуюЧасть(ТЗ,"Товар,Количество,Стоимость");
    Перемещение.ЗагрузитьТабличнуюЧасть(ТЗ);
    Перемещение.Записать();
    Перемещение.Провести();
КонецЦикла;

Там где знаки вопросиков, там я пыталась как раз сделать так, чтобы Перемещение записывалось на позицию раньше документа Товарный Чек. У меня это не получилось, оставила пока пустое место.

то есть получилось как раз то что я хотела, но как это получилось, если я использовала АвтоВремяНачалоДня() не понимаю.
 
  Рекламное место пустует
   skunk
 
1 - 01.02.04 - 12:17
Получилось у тебя так потому что товчек у тебя лежал на начало дня в начале выборки документов.

То есть
У тебя получилось следующее

ТовЧек 01.01.2004 время НачалоДня

Задаешь выборку ТовЧеки за период (01.01.04 по .....//неважно но скорее всего ДатаНачала = ДатаКонец

Дале Создаешь перемешние с датой равной ТовЧек.Дата или 01.01.04 и устанавливаешь время на начало дня
есстествено он упадет раньше ТовЧека

Создай Два ТовЧека этим днем и натрави свою обработку в журнале будешь иметь следующее


Перемещение 0002
Перемещение 0001
ТовЧек      0001
ТовЧек      0002
   Таня
 
2 - 01.02.04 - 12:39
один у меня записан 12.01.04 на 01:58:05
а другой на 18.01.04 на 22:58:55
После обработки в журнале получается следующая картина:
12.01 01:57:55 - Перемещение
12.01 01:58:05 - Товарный чек
18.01 22:58:45 - Перемещение
18.01 22:58:55 - Товарный чек


После того, как ввела второй документа Товарный чек на 12.01 получилось следующее:
12.01 01:57:45 - Перемещение
12.01 01:57:55 - Перемещение
12.01 01:58:05 - Товарный чек
12.01 01:58:15 - Товарный чек

А как мне сделать чтобы все таки Перемещение записывалось непосредственно перед Товарным чеком, из которого оно берет данные?
   skunk
 
4 - 01.02.04 - 12:44
что типа

Время = ТовЧек.GetTime();

изгольнуться лучше всего отнять 1 секунду

Премещение.SetTime(Время);
   WhiteCat
 
5 - 01.02.04 - 13:36
(4) Не всегда поможет, если например время чека равно 00:00:00, тогда будет облом
   Таня
 
6 - 01.02.04 - 14:23
Я отняла 10 секунд.
    ТовЧек.ВыбратьДокументы(ДатаНачала, ДатаКонца);
    Пока ТовЧек.ПолучитьДокумент() =1 Цикл
        Час = 0;
        Минута=0;
        Секунда=0;
        Перемещение.Новый();
        Перемещение.ДатаДок = ТовЧек.ДатаДок;
        ТовЧек.ПолучитьВремя(Час,Минута,Секунда);
        Секунда = Секунда -10;
        Перемещение.Отдел = ТовЧек.Отдел;
        ТовЧек.ВыгрузитьТабличнуюЧасть(ТЗ,"Товар,Количество,Стоимость");
        Перемещение.ЗагрузитьТабличнуюЧасть(ТЗ);
        Перемещение.Записать();
        Перемещение.УстановитьВремя(Час,Минута,Секунда);
        Перемещение.Провести();
    КонецЦикла;

Теперь вроде бы нормально проводится, вот только у меня другой вопрос возник, как из обработки открывать новый период оперативных итогов?
Чтобы после проведения всех документов, автоматом открывался новый месяц?
А то у меня на следующий месяц не хочет обработка выполняться, потому как "нельзя обращаться к результам запроса после ТА" :(
   skunk
 
7 - 01.02.04 - 14:39
(5)Исключительная ситуация, должна быть предусмотрена разработчиком и решаться им от конкретных условий и ТЗ.

(6)Судя по всему у тебя трайд, тогда при проведение дока делаешь так

док.провести(режим)

<Режим> - необязательный параметр. Число: 0 - проводить документ без сдвига ТА; 1 - проводить непроведенный документ реальным временем (со сдвигом ТА); 2 - перепроводить проведенный документ реальным временем (со сдвигом ТА); 3 - проводить любой (непроведенный, проведенный) документ реальным временем (со сдвигом ТА). Значение по умолчанию - 0.
   Таня
 
8 - 01.02.04 - 14:50
А могут быть два документа записанные на одно число и на одно время? У меня такие документы получились.
   Таня
 
9 - 01.02.04 - 14:54
А посмотрите, я правильно последовательность восстановила? и вообще...


Перем Запрос, ТекстЗапроса,ДатаПрихода, ДатаКонца, ДатаНачала, ПрихНакл, Перемещение,ТовЧек;
//*****************************************************

Процедура ПриОткрытии()
    гл12Месяцев(ВыбМесяц); 
    ВыбМесяц.ТекущаяСтрока(ВыбМесяц.НайтиЗначение(Формат(ДатаМесяц(ТекущаяДата()),"Ч(0)2")));
КонецПроцедуры
//*****************************************************

Процедура Обработка()
    ТЗ = СоздатьОбъект("ТаблицаЗначений");
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса ="
    |Период с ДатаНачала по ДатаКонца;
    |Товар = Регистр.ПродажиТоваров.Товар;
    |Поставщик = Регистр.ПродажиТоваров.Поставщик;
    |Количество = Регистр.ПродажиТоваров.Количество;
    |Сумма = Регистр.ПродажиТоваров.Сумма;
    |Функция  ИтогоКоличество = Сумма(Количество);
    |Функция ИтогоСумма = Сумма(Сумма);
    |Группировка Поставщик;
    |Группировка Товар;";
    
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;
    
    Пока Запрос.Группировка("Поставщик") = 1 Цикл
        ПрихНакл.Новый();
        ПрихНакл.ДатаДок = ДатаПрихода;
        ПрихНакл.АвтоВремяНачалоДня();
        ПрихНакл.Поставщик = Запрос.Поставщик;
        Пока Запрос.Группировка(2) = 1 Цикл
            ПрихНакл.НоваяСтрока();
            ПрихНакл.Товар = Запрос.Товар;
            ПрихНакл.Количество = Запрос.ИтогоКоличество;
            Средняя = Запрос.ИтогоСумма/Запрос.ИтогоКоличество;
            ПрихНакл.ЦенаЗакупки = Средняя-Средняя*Запрос.Поставщик.Комиссионные.Получить(ДатаПрихода)/100;
            ПрихНакл.Стоимость = ПрихНакл.Количество*ПрихНакл.ЦенаЗакупки;
        КонецЦикла;
        ПрихНакл.Записать();
        ПрихНакл.Провести();
    КонецЦикла; 
    
    ТовЧек.ВыбратьДокументы(ДатаНачала, ДатаКонца);
    Пока ТовЧек.ПолучитьДокумент() =1 Цикл
        Час = 0;
        Минута=0;
        Секунда=0;
        Перемещение.Новый();
        Перемещение.ДатаДок = ТовЧек.ДатаДок;
        ТовЧек.ПолучитьВремя(Час,Минута,Секунда);
        Секунда = Секунда -10;
        Перемещение.Отдел = ТовЧек.Отдел;
        ТовЧек.ВыгрузитьТабличнуюЧасть(ТЗ,"Товар,Количество,Стоимость");
        Перемещение.ЗагрузитьТабличнуюЧасть(ТЗ);
        Перемещение.Записать();
        Перемещение.УстановитьВремя(Час,Минута,Секунда);
        Перемещение.Провести();
    КонецЦикла;
    ТовЧек.ВыбратьДокументы(ДатаНачала,ДатаКонца);
    Пока ТовЧек.ПолучитьДокумент() = 1 Цикл
        ТовЧек.Провести(,1);
    КонецЦикла;
    Док =  СоздатьОбъект("Документ"); 
    Док.ВыбратьДокументы(ДатаНачала,ДатаКонца);
    Пока Док.ПолучитьДокумент() = 1 Цикл
        Если Последовательность.ТовДокументы.ПринадлежитПоследовательности(Док) = 1 Тогда
            Док.Провести();
        КонецЕсли;
    КонецЦикла;
    Константа.ПризнакОбработки.Установить(ДатаКонца+1,0);    
    УстановитьТАпо(КонМесяца(ДатаКонца+1));
КонецПроцедуры
//*****************************************************

Процедура Выполнить()
    
    ДатаПрихода =Дата(НомерГода,ВыбМесяц.ТекущаяСтрока(),01);
    ДатаКонца =  КонМесяца(ДатаПрихода);
    ДатаНачала = ДатаПрихода;   
    
    ПрихНакл = СоздатьОбъект("Документ.ПриходнаяНакладная");
    Перемещение = СоздатьОбъект("Документ.Перемещение");
    ТовЧек = СоздатьОбъект("Документ.ТоварныйЧек");    
    
    
    Если Константа.ПризнакОбработки.Получить(ДатаПрихода) = 1 Тогда
       Если Вопрос("За выбранный месяц обработка Закупка уже выполнялась!
       |Документы /Приходная накладная/ и /Перемещение товаров/ за выбранный месяц будут удалены.
        |Продолжить?", "Да+Нет") =  "Да" Тогда
            ПрихНакл.ВыбратьДокументы(ДатаНачала,ДатаКонца);
            Пока ПрихНакл.ПолучитьДокумент() = 1 Цикл
                ПрихНакл.Удалить(1)
            КонецЦикла;
            Перемещение.ВыбратьДокументы(ДатаНачала,ДатаКонца);
            Пока Перемещение.ПолучитьДокумент() = 1 Цикл
                Перемещение.Удалить(1)
            КонецЦикла;
        Иначе
            СтатусВозврата(0);
            Возврат;    
        КонецЕсли;
    КонецЕсли;
        Обработка();
    Константа.ПризнакОбработки.Установить(ДатаПрихода,1);    
КонецПроцедуры
   skunk
 
10 - 01.02.04 - 14:54
наверное может, если у тебя получилось, по логике вроде ни чего страшного, ведь это поля не критические
 
  Рекламное место пустует
   skunk
 
11 - 01.02.04 - 15:01
запускаешь, смотришь результат если все окей то значит гуд и юзаешь обработку


Список тем форума
Рекламное место пустует   Рекламное место пустует
Здесь можно задать вопрос "Как сделать?" и получить кучу ответов, что тебе это делать не надо. Ymryn
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует