Вопрос по программной установке времени документа Есть проведенный док, например "Отгрузка за день". У него в обработке проведения стоит АвтоВремяКонецДня(). Т.е. если Док новый, то он ставит время 23.59.59. Потом я накидываю еще доки другого вида и они становятся после него. Это ясно.(вопрос, можно ли в 77 сделать как то так, чтобы другие виды доков ставились перед Отгрузка за день".?) Если я перепровожу этот "Отгрузка за день", то он в конец не становится, а стоит там где и стоял с тем же временем с каким первый раз провелся. Вопрос, можно ли, чтобы "Отгрузка за день" становился в конец дня при любом проведение будь он новый или не новый? Спасибо! |
Можно. Для этого нужно запретить всем остальным документам становится в "конец дня". Или запретить вообще вводить документы после проведения своего любимого. Иначе никак. Исходя из "становился в конец дня при любом проведение будь он новый или не новый" |
1-VZ >Спасибо! ну насчет 1-го вопроса я так и думал, что гемор. а Насчет 2-го. неужели нет способа для документа при перепроведении занимать позиции последнего на день, на момент перепроведения его? |
2-Wanderer27 > У тебя как с логикой? Совсем-совсем плохо? Функция АвтоВремяКонецДня() ставит документ в конец списка, который существует в данный момент. И никак не умеет прогнозировать будущий состав этого списка. Тем паче, что назначать конкретную дату документа позволено как до, так и после этой даты (про искуственные ограничения упустим). И нет у этой функции параметра СписокДокументовКоторыхНельзяДвигать. Это системная функция. Библиотечная. Так что... Можно только потом перестроить очередь. И ревниво следить, чтоб этот порядок не нарушился. И как нарушится - опять перестраивать. |
2-Wanderer27 > Выбрать документы за некую дату (в обратном порядке). Пока ПолучитьДокумент()=1 Цикл Здесь РазобратьПозициюДокумента(Первый из полученных); Прервать КонецЦикла СформироватьПозициюДокумента(Твой документ, который проводится) |
Я обычно отключаю изменение времени документа при его интерактивном перепроведении. Как ввели, так и сидит, если сознательно время не изменят через распроведение |
4-DeiMos > Проще надо быть, проще. И народ к тебе потянется со страшной силой. Чтоб документ встал в конец очереди, достаточно снять его с проведения, поставить "в конец дня", а потом снова провести. |
вот по этому иногда в скульных базах встречается дататайма типа 01:07:2013:24:01:15 |
4-DeiMos >я так понял это для новых документов. Потому как я не лепил(раньше не сталкивался с этим временем) в обработке проведения ДокВсе.ОбратныйПорядок(1); ДокВсе.ВыбратьДокументы(ДатаДок,ДатаДок ); Пока ДокВсе.ПолучитьДокумент()=1 Цикл Позиция = РазобратьПозициюДокумента(ДокВсе.ПолучитьПозицию()); Прервать КонецЦикла; АвтоВремяОтключить(); СформироватьПозициюДокумента(Позиция,1); Может что-то и не так, но док при перепроведение где стоял там и стоит. :( |
Вообще, "23.59.59" - это только отображение. На самом деле, разрядность поля, где содержится время, больше, чем требуется для точности до секунды ;) Иначе в это время можно было бы поставить один-единственный документ ;) Или ликвидировать любую возможность управления очереди документов в пределах секунды. И сделать невозможным задать точку времени (для запросов, например), привязанной к документу. |
8-Wanderer27 > А если так? Не в модуль проведения, а В модуль формы - в процедуру ПриЗаписи(): ДокВсе.ОбратныйПорядок(1); ДокВсе.ВыбратьДокументы(ДатаДок,ДатаДок ); Пока ДокВсе.ПолучитьДокумент()=1 Цикл ТекДок=ДокВсе.ТекущийДокумент(); Позиция = РазобратьПозициюДокумента(ТекДок.ПолучитьПозицию() ); Прервать КонецЦикла; //АвтоВремяОтключить(); СформироватьПозициюДокумента(Позиция,1); |
Сорри, не так. Вот так: В модуль формы - в процедуру ПриЗаписи(): ДокВсе.ОбратныйПорядок(1); ДокВсе.ВыбратьДокументы(ДатаДок,ДатаДок ); Пока ДокВсе.ПолучитьДокумент()=1 Цикл ТекДок=ДокВсе.ТекущийДокумент(); Позиция = ТекДок.ПолучитьПозицию() ; Прервать КонецЦикла; //АвтоВремяОтключить(); СформироватьПозициюДокумента(Позиция,1); |
ДокВсе = СоздатьОбьект("Документ"); ДокВсе.ОбратныйПорядок(1); ДокВсе.ВыбратьДокументы(ДатаДок,ДатаДок ); Пока ДокВсе.ПолучитьДокумент()=1 Цикл ТекДок=ДокВсе.ТекущийДокумент(); Позиция = ТекДок.ПолучитьПозицию() ; Прервать КонецЦикла; //АвтоВремяОтключить(); СформироватьПозициюДокумента(Позиция,1); |
12-DeiMos >не..не работает :( |
вб.ВыбратьДокументы(док.ДатаДок, док.ДатаДок); вб.ПолучитьДокумент(); Если вб.ТекущийДокумент() <> док.ТекущийДокумент() Тогда чс = 0; мн = 0; ск = 0; вб.ПолучитьВремя(чс, мн, ск); Если ск = 0 Тогда Если мн = 0 Тогда чс = чс + 1; мн = 0; ск = 01; Иначе мн = мн + 1; ск = 01; КонецЕсли; Иначе ск = ск + 1; КонецЕсли; Если док.Проведен() = 1 Тогда док.СделатьНеПроведенным(); док.УстановитьВремя(чс, мн, ск); док.Провести(); Иначе док.УстановитьВремя(чс, мн, ск); КонецЕсли; КонецЕсли; |
14-DeiMos > Это точно хрень!...Если я провожу док на время 23.59.59 то куда еще увеличивать секунды то? Вообщем, в 77 это проблема не решается...только через задницу кроме..Овчинка выделки не стоит! |
15-Wanderer27 > Это "проблема" через задницу... Вот и "не решается". Не... делать документ там, где должен быть отчет. И не надо ссылаться, что юзер "не умеет". |
скопируй его и проведи скопированный, а старый удали |
вариант 2, при активном участии Бухты, внешняя обработка: НашДок = СоздатьОбъект("Документ.Деньги"); НашДок.НайтиДокумент(Док); чч = 0; мм = 0; сс = 0; НашДок.ПолучитьВремя(чч,мм,сс); НашДок.УстановитьВремя(чч,мм,сс-1); НашДок.Записать(); НашДок.УстановитьВремя(чч,мм,сс+1); НашДок.Записать(); |
(18) не работает ))) |
(19) распроведи сначала |
(20) распроводил позиция документа состоит из датывремени + порядкового номера документа в базе. а порядковый номер (не НомерДок, хотя может и совпадать) у записанного документа поменять - никак. |
21-Зелёный тролль > "Распровести" - мало. Вначале нужно отменить проведение, и перезаписать (с новой временной меткой). Уже [b]потом[/b] - перепровести. |
Текущее время: 09:15. Часовой пояс GMT +3. |