К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Вопрос по программной установке времени документа

Гость
0 - 26.07.2013 - 12:14
Есть проведенный док, например "Отгрузка за день". У него в обработке проведения стоит АвтоВремяКонецДня(). Т.е. если Док новый, то он ставит время 23.59.59.
Потом я накидываю еще доки другого вида и они становятся после него. Это ясно.(вопрос, можно ли в 77 сделать как то так, чтобы другие виды доков ставились перед Отгрузка за день".?)

Если я перепровожу этот "Отгрузка за день", то он в конец не становится, а стоит там где и стоял с тем же временем с каким первый раз провелся.

Вопрос, можно ли, чтобы "Отгрузка за день" становился в конец дня при любом проведение будь он новый или не новый?
Спасибо!



Гость
1 - 26.07.2013 - 12:23
Можно. Для этого нужно запретить всем остальным документам становится в "конец дня".
Или запретить вообще вводить документы после проведения своего любимого.
Иначе никак. Исходя из "становился в конец дня при любом проведение будь он новый или не новый"
Гость
2 - 26.07.2013 - 12:31
1-VZ >Спасибо! ну насчет 1-го вопроса я так и думал, что гемор.

а Насчет 2-го. неужели нет способа для документа при перепроведении занимать позиции последнего на день, на момент перепроведения его?
Гость
3 - 26.07.2013 - 12:47
2-Wanderer27 > У тебя как с логикой? Совсем-совсем плохо?
Функция АвтоВремяКонецДня() ставит документ в конец списка, который существует в данный момент. И никак не умеет прогнозировать будущий состав этого списка. Тем паче, что назначать конкретную дату документа позволено как до, так и после этой даты (про искуственные ограничения упустим).
И нет у этой функции параметра СписокДокументовКоторыхНельзяДвигать.
Это системная функция. Библиотечная.
Так что...
Можно только потом перестроить очередь. И ревниво следить, чтоб этот порядок не нарушился. И как нарушится - опять перестраивать.
Гость
4 - 26.07.2013 - 12:47
2-Wanderer27 >
Выбрать документы за некую дату (в обратном порядке).
Пока ПолучитьДокумент()=1 Цикл
Здесь РазобратьПозициюДокумента(Первый из полученных);
Прервать
КонецЦикла

СформироватьПозициюДокумента(Твой документ, который проводится)
Гость
5 - 26.07.2013 - 13:12
Я обычно отключаю изменение времени документа при его интерактивном перепроведении. Как ввели, так и сидит, если сознательно время не изменят через распроведение
Гость
6 - 26.07.2013 - 13:22
4-DeiMos > Проще надо быть, проще. И народ к тебе потянется со страшной силой.
Чтоб документ встал в конец очереди, достаточно снять его с проведения, поставить "в конец дня", а потом снова провести.
Гость
7 - 26.07.2013 - 13:26
вот по этому иногда в скульных базах встречается дататайма типа

01:07:2013:24:01:15
Гость
8 - 26.07.2013 - 13:30
4-DeiMos >я так понял это для новых документов. Потому как я не лепил(раньше не сталкивался с этим временем) в обработке проведения
ДокВсе.ОбратныйПорядок(1);
ДокВсе.ВыбратьДокументы(ДатаДок,ДатаДок );
Пока ДокВсе.ПолучитьДокумент()=1 Цикл
Позиция = РазобратьПозициюДокумента(ДокВсе.ПолучитьПозицию() );
Прервать
КонецЦикла;
АвтоВремяОтключить();

СформироватьПозициюДокумента(Позиция,1);
Может что-то и не так, но док при перепроведение где стоял там и стоит. :(
Гость
9 - 26.07.2013 - 13:33
Вообще, "23.59.59" - это только отображение. На самом деле, разрядность поля, где содержится время, больше, чем требуется для точности до секунды ;)
Иначе в это время можно было бы поставить один-единственный документ ;) Или ликвидировать любую возможность управления очереди документов в пределах секунды. И сделать невозможным задать точку времени (для запросов, например), привязанной к документу.
Гость
10 - 26.07.2013 - 13:58
8-Wanderer27 >
А если так?
Не в модуль проведения, а
В модуль формы - в процедуру ПриЗаписи():
ДокВсе.ОбратныйПорядок(1);
ДокВсе.ВыбратьДокументы(ДатаДок,ДатаДок );
Пока ДокВсе.ПолучитьДокумент()=1 Цикл
ТекДок=ДокВсе.ТекущийДокумент();
Позиция = РазобратьПозициюДокумента(ТекДок.ПолучитьПозицию() );
Прервать
КонецЦикла;
//АвтоВремяОтключить();

СформироватьПозициюДокумента(Позиция,1);
Гость
11 - 26.07.2013 - 13:59
Сорри, не так.
Вот так:

В модуль формы - в процедуру ПриЗаписи():
ДокВсе.ОбратныйПорядок(1);
ДокВсе.ВыбратьДокументы(ДатаДок,ДатаДок );
Пока ДокВсе.ПолучитьДокумент()=1 Цикл
ТекДок=ДокВсе.ТекущийДокумент();
Позиция = ТекДок.ПолучитьПозицию() ;
Прервать
КонецЦикла;
//АвтоВремяОтключить();

СформироватьПозициюДокумента(Позиция,1);
Гость
12 - 26.07.2013 - 14:00
ДокВсе = СоздатьОбьект("Документ");
ДокВсе.ОбратныйПорядок(1);
ДокВсе.ВыбратьДокументы(ДатаДок,ДатаДок );
Пока ДокВсе.ПолучитьДокумент()=1 Цикл
ТекДок=ДокВсе.ТекущийДокумент();
Позиция = ТекДок.ПолучитьПозицию() ;
Прервать
КонецЦикла;
//АвтоВремяОтключить();

СформироватьПозициюДокумента(Позиция,1);
Гость
13 - 26.07.2013 - 14:28
12-DeiMos >не..не работает :(
Гость
14 - 26.07.2013 - 14:40
вб.ВыбратьДокументы(док.ДатаДок, док.ДатаДок);
вб.ПолучитьДокумент();
Если вб.ТекущийДокумент() <> док.ТекущийДокумент() Тогда
чс = 0; мн = 0; ск = 0;
вб.ПолучитьВремя(чс, мн, ск);
Если ск = 0 Тогда
Если мн = 0 Тогда
чс = чс + 1; мн = 0; ск = 01;
Иначе
мн = мн + 1; ск = 01;
КонецЕсли;
Иначе
ск = ск + 1;
КонецЕсли;
Если док.Проведен() = 1 Тогда
док.СделатьНеПроведенным();
док.УстановитьВремя(чс, мн, ск);
док.Провести();
Иначе
док.УстановитьВремя(чс, мн, ск);
КонецЕсли;
КонецЕсли;
Гость
15 - 26.07.2013 - 15:17
14-DeiMos > Это точно хрень!...Если я провожу док на время 23.59.59 то куда еще увеличивать секунды то?
Вообщем, в 77 это проблема не решается...только через задницу кроме..Овчинка выделки не стоит!
Гость
16 - 26.07.2013 - 15:41
15-Wanderer27 > Это "проблема" через задницу... Вот и "не решается".
Не... делать документ там, где должен быть отчет.
И не надо ссылаться, что юзер "не умеет".
Гость
17 - 27.07.2013 - 13:30
скопируй его и проведи скопированный, а старый удали
Гость
18 - 27.07.2013 - 14:13
вариант 2, при активном участии Бухты, внешняя обработка:

НашДок = СоздатьОбъект("Документ.Деньги");
НашДок.НайтиДокумент(Док);
чч = 0; мм = 0; сс = 0;
НашДок.ПолучитьВремя(чч,мм,сс);
НашДок.УстановитьВремя(чч,мм,сс-1);

НашДок.Записать();

НашДок.УстановитьВремя(чч,мм,сс+1);
НашДок.Записать();
Гость
19 - 27.07.2013 - 14:18
(18) не работает )))
20 - 27.07.2013 - 14:22
(19) распроведи сначала
Гость
21 - 27.07.2013 - 14:51
(20) распроводил

позиция документа состоит из датывремени + порядкового номера документа в базе. а порядковый номер (не НомерДок, хотя может и совпадать) у записанного документа поменять - никак.
Гость
22 - 29.07.2013 - 10:19
21-Зелёный тролль > "Распровести" - мало. Вначале нужно отменить проведение, и перезаписать (с новой временной меткой). Уже потом - перепровести.


К списку вопросов






Copyright ©, Все права защищены