Изменить время документа

Тема в разделе "1C и всё что с ней связано", создана пользователем Дайнеко, 2 июн 2011.

  1. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Тема времени в 7.7 - темная для меня. Придумал с клиентом задачку, теперь не знаю как решить:
    - Пользователь записал в базу Расходную, не проводя.
    - За этим доком сегодняшним же днем записалось еще несколько таких.
    - Пользователь открывает первый и проводит (Ок жмет).

    Я хочу программно перенести док в конец дня. Опущу пункт с выяснением нужного мне времени "конца дня" - это легко. Вот теперь нужно присвоить доку 17.30. Пишу:
    УстановитьВремя(П_Час, П_Мин, П_Сек);
    А мне "Недопустимая операция". Хрена, короче говоря.

    Выходит, док сам себя передвинуть не может (разумеется, веду речь о непроведенных). Это может сторонняя сила в лице объекта "Документ". Но мне нужно сделать не Обработку, а реакцию на Ок.

    Какие мысли?

    Добавлено: P.S.
    Внутри Процедура ВводНового УстановитьВремя() отрабатывает нормально.
     
  2. User1C

    User1C Гость

    УстановитьВремя() работает тока для объектов с использованием функции СоздатьОбъект(). Как выход, можно вызвать некую обработку передав указателя на документ, где в обработчике написать Док=СоздатьОбъект("Документ"), затем найти указанный документ и менять его время методом УстановитьВремя().
     
  3. Hryv

    Hryv Гость

    А можно поинтересоваться зачем?
    В том плане, что от этого будет зависеть?
    Может стоит поискать путь в обход
     
  4. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Да, вот, понимаешь, на N-ом году эксплуатации обозначилась проблема. Ситуацию я уже написал. Поясню еще раз.
    За день несколько документов списывают товар под ноль. И тут пользователь проводит документ началом дня. Док проверяет наличие товара на свой момент времени. Итог - отрицательный остаток. При перепроведении всех документов проблема вскроется, но уже поздновато.

    Идея академически правильная. Только реализовать непросто.

    Подумав, решил реализовать на уровне проверки. Документ обнаруживает, что его проводят в голове очереди и выдает предложение пользователю изменить время. Какое-то решение лучше никакого.
     
  5. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Дайнеко, вот несколько похожая тема

    Имхо, лучше каждый док проводить не на начало дня, а на текущее время или сдвигать точку актуальности. Возможно ли что-то такое в Вашей конфе реализовать?
     
  6. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Спасибо за подсказку "ПроводитьПослеТА". Буду смотреть.

    Ты может не понял, как рождается проблема. Это не программа записывает в начало дня, а пользователь.
     
  7. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    НУ по рукам пользователю нужно надавать. Это во первых и обязательно! во вторых бы желательно, конечно, для определенного вида документов "подавить" вызов этого окошка для изменения времени или сделать так чтобы документ все равно проводился после ТА
     
  8. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    А я вот не знаю, как подавить :ya_lamo:
     
  9. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    я честно говоря тоже :gigi: но просто наверное можно как-то перехватить это событие или же просто игнорировать его значения при проведении - как та проверка в ТиСе - хоть выставляй время хоть нет - один фиг после ТА проведет...
     
  10. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Идеологически неверно считать остатки на время документа. Я уже писал об этом...
     
  11. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    По поводу "перехвата" времени. Да нечего тут перехватывать. АвтоВремяОтключить(). Я настраиваю в программе контроль за временем при создании НОВЫХ документов. Вставляет куда надо. Приходные начиная с 7.00 и остальные за ним цепочкой. Расходные: первый в текущее время, остальные опять за ним.

    А теперь, мать вашу, я злюсь :ya_lamo: , что никто меня не понимает, как происходит засада. Пользователи все, канечна, казлы. Но в данные момент он пакость делает не со зла, а так, по глупости своей природной. Еще раз:
    - 09.00 включил компьютер. Создал Расходную. Записал и не провел. Не, вот так: не провел.
    документ записался с этим временем.
    - 10.00 Создал еще 3 документа. Провел.
    документы записались после первого. Они списали товар до 0 шт..
    - 10.30 Сходил пописал и покурил.
    - 12.00 Вернулся. Ему сказали, клиент первого документа отгрузился. Пользователь открыл этот первый и провел.
    Напомню, его время 09.00. И он проверил наличие товара на это время. Товар был, документ провелся. .

    Чтобы vitfil не вскаивал со стула и не кричал.
    Отвечу, что трудов классика не читал. Вину признаю.


    Подвожу итог: товар пошел минусом. Пользователь пока все хорошо, работает и про время дока не думает. Блокировать ручную смену времени не хочу/могу, иногда опытному пользователю приходится менять время.
     
  12. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    А сейчас руки чешутся устроить опрос: Понимает ли меня человечество?
    1. Мы с тобой одной крови!
    2. Слова-то больно знакомые.
    3. Гони литру - пойму.
    4. С какой планеты, товарищ, будете?

    Я в пятницу вечером всегда такой.
     
  13. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Нет, понятно в чем проблема. Хотя все эти ТА 7-ые - не мое.
     
  14. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Дайнеко ведь можно поставить запрет на отгрузку в минус - пусть потом ГЛУПЫЙ юзверь побегает с визгами типа - "программа не дает провести документ, говоря что на складе нет товара". Это раз. Два - как предлагал User1C через СозданиеОбъекта. И три - проводить после ТА.

    Сори, если я опять чего-то не понял :ya_lamo:
     
  15. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Дайнеко
    Работайте ТОЛЬКО с актуальными остатками. Время не имеет значения...
     
  16. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Ясный пень, что проверка есть. Но она делается на время, уже присвоенное док-ту. Скажу прямо - у меня ощущение, что ты не прочитал мое описание, как создается проблема.
    Однако поставлю плюс за подсказку "ПроводитьПослеТА" умысленную или нечаянную. Проведя эксперименты с этим методом выяснил такое Наблюдение №1:
    - если документ вводится с датой = Дата ТА, то документ переносится после ТА. То что нужно! И никаких СоздатьОбъект.
    - если документ "задний", то 1С не влияет на его время. Оно остается текущее или присвоенное программно.

    Так как я теперь могу изложить целый трактат о времени, то продолжу.
    Наблюдение №2: Пока док не записан, новый, метод ПолучитьВремя() выдает 0 часов и минут.
    Наблюдение №3: УстановитьВремя() наоборот, можно применять, пока док не записан.
    Я пишу только о применении в контексте док-та.

    Мое решение вылилось в следующую схему:
    - В форме использовал методы:
    АвтоВремяТекущее();
    ПроводитьПослеТА(1,-1);

    - В процедуре ПриЗаписи() вызываю проверку
    Если НЕ(Выбран() = 1) Тогда
    УстВремя(Контекст, 17, 00);
    КонецЕсли;

    - Проц УстВремя присваивает время новому доку: (фрагмент)

    Код ( (Unknown Language)):
        //  1. Задний
    Если Конт.ДатаДок < ТекущаяДата() Тогда
    Если (Есть документы в дне ДатаДок) Тогда
    // Присвоить +1 мин к последнему
    Иначе
    // рекомендуемое 17.00
    КонецЕсли;
    //  2. Сегодняшний
    Иначе
    Если (Есть документы в дне ДатаДок) Тогда
    //  в конец, если нужно
    Макс(ТекущегоДока, ПоследнегоДока +1 мин);
    Иначе
    // остается текущее
    Возврат;
    КонецЕсли;
    КонецЕсли;
     
  17. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Предохранение совсем недурно выглядит. Но подкину еще дровишек : а вдруг твои умельцы
    и дату вперед задумают поменять ? Или на это уже их извращенной фантазии не хватит ?
     
  18. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Это ведь тоже можно запретить - проводить доки будущим числом. а если будут просто записывать - фиг с ними

    Да, такая проблема действительно имеет место быть. Можно было бы поставить проверку типа если проведен - тогда сначала распровести.
     
  19. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    О! Это один из излюбленных, самобытных приемов пользователей. В смысле, сами так придумывают. Это когда не верят в силу резервирования товара и проводят Расходную "на перед". Я им, ессесно, по мордам. Но отучаются с трудом.

    Вот не знаю, ставить ли технический запрет? Мало ли что? Нормальным пользователям ограничения мешают.
     
Загрузка...

Поделиться этой страницей