Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Как изменить реквизит ВыбратьПериод в 1с 7.7 конф 7.7.003          
ZUBR Подменю пользователя
сообщение 22.09.19, 16:04
Сообщение #1

Завсегдатай
****
Группа: Пользователи
Сообщений: 231
Из: Київ
Спасибо сказали: 5 раз
Рейтинг: 3

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

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

andrew76 Подменю пользователя
сообщение 22.09.19, 17:00
Сообщение #2

Оратор
*****
Группа: Пользователи
Сообщений: 437
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

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

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

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


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


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

ZUBR Подменю пользователя
сообщение 22.09.19, 17:30
Сообщение #3

Завсегдатай
****
Группа: Пользователи
Сообщений: 231
Из: Київ
Спасибо сказали: 5 раз
Рейтинг: 3

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

andrew76 Подменю пользователя
сообщение 22.09.19, 17:50
Сообщение #4

Оратор
*****
Группа: Пользователи
Сообщений: 437
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

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

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

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

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

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

ZUBR Подменю пользователя
сообщение 22.09.19, 18:00
Сообщение #5

Завсегдатай
****
Группа: Пользователи
Сообщений: 231
Из: Київ
Спасибо сказали: 5 раз
Рейтинг: 3

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

andrew76 Подменю пользователя
сообщение 22.09.19, 18:02
Сообщение #6

Оратор
*****
Группа: Пользователи
Сообщений: 437
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

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

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

Макс1С Подменю пользователя
сообщение 22.09.19, 23:21
Сообщение #7

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 189
Из: Днепр
Спасибо сказали: 62 раз
Рейтинг: 58.6

andrew76 @ Вчера, 19:02 * ,
если про тот же запрос тогда нужно убрать из запроса строчку Период - её мы не переучим смотреть в другое поле; добавить поле с этим реквизитом и добавить условия
|ДатаВыдачи = Документ.РасходнаяНакладная.ДатаВыдачи;
.......
|Условие ((ДатаВыдачи <= КонДата)
|Условие ((ДатаВыдачи >= НачДата)

Sharzem Подменю пользователя
сообщение 23.09.19, 7:18
Сообщение #8

Оратор
Иконка группы
Группа: Местный
Сообщений: 298
Спасибо сказали: 98 раз
Рейтинг: 99.1

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

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

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

Сообщение отредактировал Sharzem - 23.09.19, 7:26


Signature
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)

andrew76 Подменю пользователя
сообщение 23.09.19, 13:00
Сообщение #9

Оратор
*****
Группа: Пользователи
Сообщений: 437
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

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

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

ZUBR Подменю пользователя
сообщение 24.09.19, 16:40
Сообщение #10

Завсегдатай
****
Группа: Пользователи
Сообщений: 231
Из: Київ
Спасибо сказали: 5 раз
Рейтинг: 3

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

andrew76 Подменю пользователя
сообщение 24.09.19, 17:42
Сообщение #11

Оратор
*****
Группа: Пользователи
Сообщений: 437
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

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


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

mut Подменю пользователя
сообщение 25.09.19, 10:02
Сообщение #12

Завсегдатай
****
Группа: Пользователи
Сообщений: 199
Из: Новая Каховка
Спасибо сказали: 203 раз
Рейтинг: 237.5

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

ZUBR Подменю пользователя
сообщение 29.09.19, 14:20
Сообщение #13

Завсегдатай
****
Группа: Пользователи
Сообщений: 231
Из: Київ
Спасибо сказали: 5 раз
Рейтинг: 3

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

andrew76 Подменю пользователя
сообщение 29.09.19, 16:08
Сообщение #14

Оратор
*****
Группа: Пользователи
Сообщений: 437
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

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

Спасибо сказали: ZUBR,

andrew76 Подменю пользователя
сообщение 29.09.19, 18:15
Сообщение #15

Оратор
*****
Группа: Пользователи
Сообщений: 437
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

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


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


ZUBR Подменю пользователя
сообщение 29.09.19, 21:54
Сообщение #16

Завсегдатай
****
Группа: Пользователи
Сообщений: 231
Из: Київ
Спасибо сказали: 5 раз
Рейтинг: 3

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

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

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

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

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


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

andrew76 Подменю пользователя
сообщение 30.09.19, 4:05
Сообщение #17

Оратор
*****
Группа: Пользователи
Сообщений: 437
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

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


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

volodya1122 Подменю пользователя
сообщение 30.09.19, 15:05
Сообщение #18

Оратор
Иконка группы
Группа: Местный
Сообщений: 336
Из: Тернопіль
Спасибо сказали: 133 раз
Рейтинг: 135.7

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

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

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

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

Спасибо сказали: ZUBR,

andrew76 Подменю пользователя
сообщение 30.09.19, 15:28
Сообщение #19

Оратор
*****
Группа: Пользователи
Сообщений: 437
Из: Казахстан
Спасибо сказали: 43 раз
Рейтинг: 43

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


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

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 29.03.24, 15:48
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!