Версия для печати темы (https://pro1c.org.ua/index.php?s=b385b338c25c527d78ca8d029c843135&showtopic=54259)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Как изменить реквизит ВыбратьПериод в 1с 7.7 конф 7.7.003

Автор: ZUBR 22.09.19, 16:04

Здравствуйте!
Элементарный вопрос, на который я сам не найду ответа. Есть документы РасходнаяНакладная. В этот документ я ввел дополнительный реквизит ДатаВыдачи. Сама расходная на ремонтные работы может быть создана и заполнена, скажем, в конце августа, и это будет дата документа, а выдан отремонтированный аппарат может быть, скажем, в начале сентября. Дата выдачи проставляется в дополнительном реквизите ДатаВыдачи, имеющим тип Дата. Реквизит ВыбратьПериод подбирает документы по дате создания документа. Мне же нужно, чтобы он подбирал по дате выдачи (дополнительный реквизит ДатаВыдачи). Как это сделать? Спасибо!

 Расх = СоздатьОбъект("Документ.РасходнаяНакладная");
        Расх.ВыбратьДокументы(НачДата,КонДата);
          
      Пока Расх.ПолучитьДокумент()=1 Цикл
       ...............................................................

Автор: andrew76 22.09.19, 17:00

ZUBR @ Сегодня, 19:04 * ,

Надо ставить в цикле условие отбора по этому реквизиту.

ВыбратьДокументы(<Дата1>,<Дата2>)
Назначение:
Открыть выборку документов в интервале дат.
Возвращает:
1 - если действие выполнено и в выборке есть хотя бы один документ;
0 - если действие не выполнено или в выборке нет ни одного документа.
Параметры:
<Дата1> - дата, документ или позиция начала выборки документов. Если данный параметр опущен, то выборка начинается с самого первого существующего в системе документа.
<Дата2> - дата, документ или позиция конца выборки документов. Если данный параметр опущен, то выборка заканчивается самым последним существующим в системе документом.


andrew76 @ Сегодня, 19:51 * ,


Расх = СоздатьОбъект("Документ.РасходнаяНакладная");
Расх.ВыбратьДокументы();
Пока Расх.ПолучитьДокумент()=1 Цикл
       Если Расх.ДатаВыдачи=НужнаяДата Тогда
              //нужные действия
       КонецЕсли;
КонецЦикла;

Автор: ZUBR 22.09.19, 17:30

andrew76 @ Сегодня, 18:00 * , Этот вариант я обдумывал. Он не подходит по следующей причине. Предположим, документ датирован 28 августа. А дата выдачи 4 сентября. Я в отчете указываю период с 1 по 30 сентября(месяц). А поскольку реквизит "период" работает по дате документов, то данный документ вообще не попадет в отчет. За август он не попадет в отчет из-за того, что аппарат еще не был выдан, а за сентябрь из-за того, что дата документа не попадет в рамки периода. Мне нужно, чтобы дата периода обращалась к дате выдачи, а не дате создания документа.

Автор: andrew76 22.09.19, 17:50

ZUBR @ Сегодня, 20:30 * ,

Так в "техничке" и пишут же ,что если даты периодов не указывать в качестве аргументов,то в выборку попадут все существующие документы в системе.А внутри цикла будете анализировать нужный реквизит ДатаВыдачи.Только если доков много , то 1с их будет обрабатывать медленно.

Расх.ВыбратьДокументы();
НачДата=Дата('01.09.19');
КонДата=Дата('30.09.19');

Расх.ВыбратьДокументы();

Пока Расх.ПолучитьДокумент()=1 Цикл
    Если (Расх.ДатаВыдачи>=НачДата) и (Расх.ДатаВыдачи<=КонДата) тогда              
        //чего то надо сделать
    КонецЕсли;
КонецЦикла;

Автор: ZUBR 22.09.19, 18:00

andrew76 @ Сегодня, 18:50 * ,
ну, это понятно. Можно вообще обойтись без реквизита ЗадатьПериод. Просто ввести два поля для ввода, а в цикле прописать условия с нужной датой.

Автор: andrew76 22.09.19, 18:02

ZUBR @ Сегодня, 21:00 * ,

Ну так отож...

Автор: Макс1С 22.09.19, 23:21

andrew76 @ Вчера, 19:02 * ,
если про тот же запрос тогда нужно убрать из запроса строчку Период - её мы не переучим смотреть в другое поле; добавить поле с этим реквизитом и добавить условия

|ДатаВыдачи = Документ.РасходнаяНакладная.ДатаВыдачи;
.......
|Условие ((ДатаВыдачи <= КонДата)
|Условие ((ДатаВыдачи >= НачДата)

Автор: Sharzem 23.09.19, 7:18

44000000.gif
Виборкою чи запитом при таких умовах... це жах. Якщо воно так Вам конче потрібно - створіть новий документ, назвіть його "Видача видаткових накладних", він підпорядкується Видатковій (вим) накладній (ним) і з ним далі вже працюйте... Тоді Ви зможете отримати необхідний Вам функціонал без спотворювання форми самої Видаткової накладної, а також будувати звіти на тему: хто, коли, з ким, де, кому видав ТМЦ по видатковій накладній.

1. На сьогодні Ви постійно теліпаєте Видаткову накладну, змінюєте реквізити, перепроводжуєте.
2. Той реквізит про який йде мова, краще діставати прямим запитом, але при величезній кількості документів це все одно буде займати час.

Краще, на мою думку, створити новий документ.

Автор: andrew76 23.09.19, 13:00

Интересно , на какой максимальный промежуток времени отличается ДатаВыдачи от ДатыДокумента этой накладной ? Месяц,2 месяца,Год ? Если знать это интервал,то можно подсократить количество перебираемых документов:

Расх.ВыбратьДокументы(НачДата-30 , КонДата+30);      //месяц
Расх.ВыбратьДокументы(НачДата-60 , КонДата+60);      //2 месяца
Расх.ВыбратьДокументы(НачДата-365,КонДата+365);    //год

Автор: ZUBR 24.09.19, 16:40

andrew76 @ Вчера, 14:00 * ,
Этот вариант не подходит, поскольку мне не нужны документы с прошлого месяца, выданные в прошлом месяце. Хотя, если с условием по дате выдачи в цикле, тогда вариант неплохой. Но бывает по-всякому. Бывает и полгода. Один аппарат год не забирали))) Хочется абсолютной точности.)))

Автор: andrew76 24.09.19, 17:42

Цитата(ZUBR @ 24.09.19, 19:40) *
Хотя, если с условием по дате выдачи в цикле, тогда вариант неплохой.


Конечно , используйте только в паре с условием.

Автор: mut 25.09.19, 10:02

Можно еще извратиться с Графой отбора smile.gif
Писать дату в отбор, потом перебирать даты в периоде и по каждой дате делать выборку по отбору.

Автор: ZUBR 29.09.19, 14:20

Снова здравствуйте. Я вот решил обойти проблему с датами путем изменения даты проведенного документа на момент выдачи. Прописал все в модуле формы в процедуре Видати. Но система не желает сохранять документ с измененной датой. При перепроведении пишет предупреждение "Изменена дата проведенного документа!" И не закрывает документ и не перепроводит, пока не отменишь изменение даты. Где- то есть предохранитель. Я не могу найти. Если кто знает, подскажите, где он зашит и можно ли это ограничение отменить или обойти. Спасибо!

Автор: andrew76 29.09.19, 16:08

Добрый вечер.У этого документа нет подчиненных документов ? Лучше перед этим скопируйте всю базу в архив,чтобы была копия на всякий случай.
Сначала сделайте документ не проведённым. Для этого, щелкните на нем правой кнопкой мыши и выберите соответствующую команду : "Cделать не проведённым" . Значок документа изменится - он будет без пиктограммы "птичка-галочка" слева. Теперь открывайте документ, меняйте дату на нужную и проводите.

Автор: andrew76 29.09.19, 18:15

Если документов много , то придется делать примерно такую обработку:


Док = СоздатьОбъект("Документ.РасходнаяНакладная");
Док.ВыбратьДокументы(НачПериода,КонПериода);
Пока Док.ПолучитьДокумент() = 1 Цикл
        Если Док.Проведен() = 1 Тогда
               Док.СделатьНеПроведенным();
               Док.ДатаДок=нужнаяДата;
               Док.Провести();
               Док.Записать();
        КонецЕсли;
КонецЦикла;


Автор: ZUBR 29.09.19, 21:54

andrew76 @ Сегодня, 19:15 * ,
я вот хочу отменить проведение документа в процедуре формы:

Процедура Выдать()
СтатусЗаказа = Перечисление.Статусы.Выдан;
    
  ТекущийДокумент().СделатьНеПроведенным();
    ДатаВыд = ТекущаяДата();
    ДатаДок = ТекущаяДата();    
    Форма.кнВыдать.Доступность(0);
    Форма.кнПодбор.Доступность(0);
    Форма.ДатаВыд.Доступность(0);
    Форма.СтатусЗаказа.Доступность(0);
    Форма.ДатаДок.Доступность(0);
    Записать();

КонецПроцедуры

Но мне пишет сообщение, что документ не выбран... Можно ли это сделать ?

Sharzem @ 23.09.19, 8:18 * , я не хочу створювати новий документ, тому що мені треба, щоб дані табличної частини оброблялись так, як вони обробляються зараз в ВидатковійНакладній. Реквізити її я практично не змінюю, а додаю свої. Ті, які мені потрібні. Тому, як Ви виразились, і "теліпаю" цей документ.


Ага, накопал. Этот метод используется только для объектов, созданных функцией "СоздатьОбъект" и его, наверное, нельзя использовать в модуле документа((

Автор: andrew76 30.09.19, 4:05

Цитата(ZUBR @ 30.09.19, 0:54) *
отменить проведение документа в процедуре формы


Лучше делать это отдельной обработкой.

Автор: volodya1122 30.09.19, 15:05

andrew76 @ Сегодня, 5:05 * ,

В мене є готова зовнішня обробка для цього. Вибравши період і типи докуменів можна, помітити на видалення, зняти помітку, зробити непроведеним, провести документии. А також поміняти дату документу (причому зберегти її статус (проведений, непроведений, помічений на видалення). Якщо в періоді непотрібно обробляти всі документи, то можна поставити відмітку які саме обробляти. Знайшов її в і Неті і трішки переробив її. Якщо потрібно можу скинути

ZUBR @ Вчера, 22:54 * ,

Із документа (із модуля Форми або модуля документа) неможна видалити чи зняти з проведення цей же документ.
Хоча зустрічав цікавий варіант: Реалізовано функцію зміни дати в проведенім документі. Візуально все виглядає ніби насправді відкривається проведений документ, міняється дата і по "ОК" зберігається проведений документ із новою датою. Насправді там застосували деяку хитрість, а саме при відкритті документу відкривався не сам документ, а створювалась копія. на цій копії документу робились всі потрібні зміни, мінялась дата, мінялись інші реквізити в документі, добавляли товар в табличну частину....... І по кнопці "ОК" оригінальний документ робили непроведеним (це вже можливо, так як це робиться з іншого документу), переносили всі дані з копії документа, записували і проводили документ, а копію просто незберігали.

Автор: andrew76 30.09.19, 15:28

Цитата(volodya1122 @ 30.09.19, 18:05) *
І по кнопці "ОК" оригінальний документ робили непроведеним (це вже можливо, так як це робиться з іншого документу), переносили всі дані з копії документа, записували і проводили документ, а копію просто незберігали.


Нормальный вариант.Так воны избегали блокировок объекта.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua