7.7 Перемещение документа

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем lagutenko, 17 июл 2008.

  1. TopicStarter Overlay
    lagutenko
    Offline

    lagutenko

    Регистрация:
    25 мар 2008
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Народ, подскажите, пож-та. Проблема следующая:
    Есть ИТРП:Производственное Предприятие. В журнале док-тов за определенный период есть 3 документа, которые подгружаются из стороннего приложения:
    Изготовление изделий, Перемещение ТМЦ, Требование-Накланая. Все они имеют одинаковый номер, время и дату.
    Мне нужно, чтобы Требование-Накланая была первой из них. Подскажите, как переместить. Заранее спасибо
  2. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    поставь время на секунду раньше :)
  3. TopicStarter Overlay
    lagutenko
    Offline

    lagutenko

    Регистрация:
    25 мар 2008
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Предлагал такой вариант ;) Требуют обработку, которая сможет в ручном режиме позволить выбрать данный док из журнала и переместить его на одну позицию вверх/вниз. Не поможешь накатать?
  4. Akulina
    Offline

    Akulina Опытный в 1С

    Регистрация:
    30 авг 2007
    Сообщения:
    87
    Симпатии:
    0
    Баллы:
    26
    У меня это сделано так.

    Код:
    Функция ПолучитьВремяДокументаЧислом(Док)
    Перем Ч,М,С;  
    Док.ПолучитьВремя(Ч,М,С);
    Возврат 3600*Ч+60*М+С;
    КонецФункции 
    
    Эта процедура привязана к кнопке в общем журнале.
    Код:
    Процедура ИзменитьВремяДокумента()
    ТекДок=ТекущийДокумент;
    Если ТекДок.Проведен()=1 Тогда
    Предупреждение("Нельзя изменять проведенный документ!"); 
    Возврат;
    КонецЕсли;
    Если ТекДок.Выбран()=0 Тогда
    Возврат;
    КонецЕсли;                 
    Меню=СоздатьОбъект("СписокЗначений");
    Меню.ДобавитьЗначение("Назад","Переместить назад");
    Меню.ДобавитьЗначение("Вперед","Переместить вперед");
    Меню.ДобавитьЗначение("ВНачало","Переместить в начало дня");
    Меню.ДобавитьЗначение("ВКонец","Переместить в конец дня");
    Вариант="";
    Если Меню.ВыбратьЗначение(Вариант,,,,1)=0 Тогда
    Возврат;
    КонецЕсли;    
    Док=СоздатьОбъект("Документ");
    НачатьТранзакцию();   
    Если Вариант="Назад" Тогда
    Док.ОбратныйПорядок(1);
    Док.ВыбратьДокументы(ТекДок.ДатаДок,СформироватьПозициюДокумента(ТекДок.ПолучитьПозицию(),-1));               
    Если Док.ПолучитьДокумент()=0 Тогда
    Возврат;
    КонецЕсли;
    Время2=ПолучитьВремяДокументаЧислом(Док);
    Если Док.ПолучитьДокумент()=1 Тогда
    Время1=ПолучитьВремяДокументаЧислом(Док);
    Иначе
    Время1=0;
    КонецЕсли;
    Время=Время2-60;
    Если Время<=Время1 Тогда
    Время=Окр((Время2+Время1)/2);
    КонецЕсли;
    Если (Время<=Время1) или (Время>=Время2) Тогда
    Предупреждение("Нет возможности переставить документ!"); 
    Возврат;
    КонецЕсли;
    ИначеЕсли Вариант="Вперед" Тогда
    Док.ОбратныйПорядок(0);
    Док.ВыбратьДокументы(СформироватьПозициюДокумента(ТекДок.ПолучитьПозицию(),1),ТекДок.ДатаДок);               
    Если Док.ПолучитьДокумент()=0 Тогда
    Возврат;
    КонецЕсли;
    Время1=ПолучитьВремяДокументаЧислом(Док);
    Если Док.ПолучитьДокумент()=1 Тогда
    Время2=ПолучитьВремяДокументаЧислом(Док);
    Иначе
    Время2=3600*23+60*59+59+1;
    КонецЕсли;
    Время=Время1+60;
    Если Время>=Время2 Тогда
    Время=Окр((Время2+Время1)/2);
    КонецЕсли;
    Если (Время<=Время1) или (Время>=Время2) Тогда
    Предупреждение("Нет возможности переставить документ!");
    Возврат;
    КонецЕсли;
    ИначеЕсли Вариант="ВНачало" Тогда
    Док.ОбратныйПорядок(0);
    Док.ВыбратьДокументы(ТекДок.ДатаДок,СформироватьПозициюДокумента(ТекДок.ПолучитьПозицию(),-1));               
    Если Док.ПолучитьДокумент()=0 Тогда    
    Возврат;
    КонецЕсли;                 
    Время2=ПолучитьВремяДокументаЧислом(Док);
    Время1=0;
    Время=Время2-60;
    Если Время<=Время1 Тогда
    Время=Окр((Время2+Время1)/2);
    КонецЕсли;
    Если (Время<=Время1) или (Время>=Время2) Тогда
    Предупреждение("Нет возможности переставить документ!");  
    Возврат;
    КонецЕсли;
    ИначеЕсли Вариант="ВКонец" Тогда
    Док.ОбратныйПорядок(1);
    Док.ВыбратьДокументы(СформироватьПозициюДокумента(ТекДок.ПолучитьПозицию(),1),ТекДок.ДатаДок);               
    Если Док.ПолучитьДокумент()=0 Тогда   
    Возврат;
    КонецЕсли;                 
    Время1=ПолучитьВремяДокументаЧислом(Док);
    Время2=3600*23+60*59+59+1;
    Время=Время1+60;
    Если Время>=Время2 Тогда
    Время=Окр((Время2+Время1)/2);
    КонецЕсли;
    Если (Время<=Время1) или (Время>=Время2) Тогда
    Предупреждение("Нет возможности переставить документ!");   
    Возврат;
    КонецЕсли;
    КонецЕсли;
    Провести=0;    
    Док.НайтиДокумент(ТекДок);
    Если Док.Проведен()=1 Тогда
    Док.СделатьНеПроведенным();
    Провести=1;    
    КонецЕсли;
    УстановитьВремяДокументаЧислом(Док,Время);    
    Док.Записать();
    Если Провести=1 Тогда
    Док.Провести();
    КонецЕсли;    
    ЗафиксироватьТранзакцию();
    КонецПроцедуры
    
    
  5. TopicStarter Overlay
    lagutenko
    Offline

    lagutenko

    Регистрация:
    25 мар 2008
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Спасибо! Буду разбираться /:)
  6. Akulina
    Offline

    Akulina Опытный в 1С

    Регистрация:
    30 авг 2007
    Сообщения:
    87
    Симпатии:
    0
    Баллы:
    26
    Забыла еще одну функцию.
    Вот.
    Код:
    Процедура УстановитьВремяДокументаЧислом(Док,Сек)
    Перем Ч,М,С;
    Ч=Цел(Сек/3600);
    Сек=Сек-Ч*3600;
    М=Цел(Сек/60);
    С=Сек-М*60;
    Док.УстановитьВремя(Ч,М,С);
    КонецПроцедуры
    

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