Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Вопрос по программной установке времени документа (http://forums.kuban.ru/f1040/vopros_po_programmnoj_ustanovke_vremeni_dokumenta-4552227.html)

Wanderer27 26.07.2013 12:14

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

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

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

VZ 26.07.2013 12:23

Можно. Для этого нужно запретить всем остальным документам становится в "конец дня".
Или запретить вообще вводить документы после проведения своего любимого.
Иначе никак. Исходя из "становился в конец дня при любом проведение будь он новый или не новый"

Wanderer27 26.07.2013 12:31

1-VZ >Спасибо! ну насчет 1-го вопроса я так и думал, что гемор.

а Насчет 2-го. неужели нет способа для документа при перепроведении занимать позиции последнего на день, на момент перепроведения его?

VZ 26.07.2013 12:47

2-Wanderer27 > У тебя как с логикой? Совсем-совсем плохо?
Функция АвтоВремяКонецДня() ставит документ в конец списка, который существует в данный момент. И никак не умеет прогнозировать будущий состав этого списка. Тем паче, что назначать конкретную дату документа позволено как до, так и после этой даты (про искуственные ограничения упустим).
И нет у этой функции параметра СписокДокументовКоторыхНельзяДвигать.
Это системная функция. Библиотечная.
Так что...
Можно только потом перестроить очередь. И ревниво следить, чтоб этот порядок не нарушился. И как нарушится - опять перестраивать.

DeiMos 26.07.2013 12:47

2-Wanderer27 >
Выбрать документы за некую дату (в обратном порядке).
Пока ПолучитьДокумент()=1 Цикл
Здесь РазобратьПозициюДокумента(Первый из полученных);
Прервать
КонецЦикла

СформироватьПозициюДокумента(Твой документ, который проводится)

USSR 26.07.2013 13:12

Я обычно отключаю изменение времени документа при его интерактивном перепроведении. Как ввели, так и сидит, если сознательно время не изменят через распроведение

VZ 26.07.2013 13:22

4-DeiMos > Проще надо быть, проще. И народ к тебе потянется со страшной силой.
Чтоб документ встал в конец очереди, достаточно снять его с проведения, поставить "в конец дня", а потом снова провести.

101 26.07.2013 13:26

вот по этому иногда в скульных базах встречается дататайма типа

01:07:2013:24:01:15

Wanderer27 26.07.2013 13:30

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

СформироватьПозициюДокумента(Позиция,1);
Может что-то и не так, но док при перепроведение где стоял там и стоит. :(

VZ 26.07.2013 13:33

Вообще, "23.59.59" - это только отображение. На самом деле, разрядность поля, где содержится время, больше, чем требуется для точности до секунды ;)
Иначе в это время можно было бы поставить один-единственный документ ;) Или ликвидировать любую возможность управления очереди документов в пределах секунды. И сделать невозможным задать точку времени (для запросов, например), привязанной к документу.

DeiMos 26.07.2013 13:58

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

СформироватьПозициюДокумента(Позиция,1);

DeiMos 26.07.2013 13:59

Сорри, не так.
Вот так:

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

СформироватьПозициюДокумента(Позиция,1);

DeiMos 26.07.2013 14:00

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

СформироватьПозициюДокумента(Позиция,1);

Wanderer27 26.07.2013 14:28

12-DeiMos >не..не работает :(

DeiMos 26.07.2013 14:40

вб.ВыбратьДокументы(док.ДатаДок, док.ДатаДок);
вб.ПолучитьДокумент();
Если вб.ТекущийДокумент() <> док.ТекущийДокумент() Тогда
чс = 0; мн = 0; ск = 0;
вб.ПолучитьВремя(чс, мн, ск);
Если ск = 0 Тогда
Если мн = 0 Тогда
чс = чс + 1; мн = 0; ск = 01;
Иначе
мн = мн + 1; ск = 01;
КонецЕсли;
Иначе
ск = ск + 1;
КонецЕсли;
Если док.Проведен() = 1 Тогда
док.СделатьНеПроведенным();
док.УстановитьВремя(чс, мн, ск);
док.Провести();
Иначе
док.УстановитьВремя(чс, мн, ск);
КонецЕсли;
КонецЕсли;

Wanderer27 26.07.2013 15:17

14-DeiMos > Это точно хрень!...Если я провожу док на время 23.59.59 то куда еще увеличивать секунды то?
Вообщем, в 77 это проблема не решается...только через задницу кроме..Овчинка выделки не стоит!

VZ 26.07.2013 15:41

15-Wanderer27 > Это "проблема" через задницу... Вот и "не решается".
Не... делать документ там, где должен быть отчет.
И не надо ссылаться, что юзер "не умеет".

qweqwe123123 27.07.2013 13:30

скопируй его и проведи скопированный, а старый удали

qweqwe123123 27.07.2013 14:13

вариант 2, при активном участии Бухты, внешняя обработка:

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

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

НашДок.УстановитьВремя(чч,мм,сс+1);
НашДок.Записать();

qweqwe123123 27.07.2013 14:18

(18) не работает )))

Чучундер 27.07.2013 14:22

(19) распроведи сначала

qweqwe123123 27.07.2013 14:51

(20) распроводил

позиция документа состоит из датывремени + порядкового номера документа в базе. а порядковый номер (не НомерДок, хотя может и совпадать) у записанного документа поменять - никак.

VZ 29.07.2013 10:19

21-Зелёный тролль > "Распровести" - мало. Вначале нужно отменить проведение, и перезаписать (с новой временной меткой). Уже [b]потом[/b] - перепровести.


Текущее время: 09:15. Часовой пояс GMT +3.