Имя: Пароль:
1C
1С v8
Помогите с запросом к РС
0 nodrama
 
17.12.21
13:40
Доброго. сижу туплю...
Есть РС такого вида

02.03.2021    - ООО РОГА КОПЫТА - СТУЛ
18.03.2021    - ООО КОПЫТА КОРОВЫ - СТУЛ
01.04.2021    - ООО КОРОВА - СТУЛ

То есть этот Стул качевал по разным организациям. Дата(Период) это дата С которой он в этой организации дата ПО нету, дата ПО по умолчанию, типо если с 18.03 он на другой организации значит до 18.03 он был на прошлой.. что логично. остатков нет это регистр не товаров и тд. в этом вопросе вообще не важно. если последняя запрись 01.04.2021 а сейчас 17.12.2021 значит берем по умолчанию что этот стул до сих пор с 01.04.2021 на этой организации..

Так же есть Документ. в котором есть период (дата). и организация. Когда его делают допустим 15.04.2021 и выбирают организацию ООО КОРОВА проблем нет все хорошо

Но бывают ситуации когда делают документ допустим 20.03.2021 выбирая организацию ООО КОРОВА тогда этот СТУЛ в ТЧ попасть не должен ну либо сообщение вывести это то же не важно.

То есть нужно написать так запрос к РС, что бы он проверял был ли этот СТУЛ в период из документа на этой организации.
То есть
если дата дока 20.03.2021 и организация ООО КОПЫТА КОРОВЫ все ок
Если дата дока 20.03.2021 и организация ООО КОРОВА, то уже не ок, ибо на ней он с 01.04.2021... А сам документ они могут создать допустим 05.04, за прошлый период.  Если бы в это РС была бы дата С и дата ПО все решалось бы гараздо проще, но даты ПО нету если только дата С (то есть период просто)
1 nodrama
 
17.12.21
13:46
То есть проблема что . Организация прописывается прям в "СТУЛ" и когда они делают месяц в месяц проблем нет. они сделали за декабрь по ООО КОРОВА и СТУЛ на ООО КОРОВА все ок.
А если им нужно сделать документ в декабре за ноябрь. то нужна проверка на какой организации был этот стул на той же что сейчас в карточке либо на какой то другой
2 polosov
 
17.12.21
13:49
(0) Срез последних на дату проверки.
Если непериодический, то сам сделай срез последних.
3 nodrama
 
17.12.21
13:49
то есть у нас есть дата документа допустим 20.03. когда СТУЛ был на организации КОПЫТА КОРОВЫ.. но делают они этот документ 10.04. когнда стул уже на ООО КОРОВА. сейчас программма запрещает ибо нет проверки на прошлые периоды. а организацию она берет прям из СТУЛА.
Следовательно нужно написать так запрос к РС. что бы она брала дату документа 20.03 и смотрела на какой организации 20.03 был СТУЛ. а стул с 18.03 по 01.04 был на ООО КОПЫТА КОРОВЫ и следовательно орагнизацию нужно подставить не ООО КОРОВА а ОО КОПЫТА КОРОВЫ )
4 nodrama
 
17.12.21
13:51
(2) Было бы проще. Но вот еще что, Но иногда они выбирают период. типо период документа 20.03-25.03
И нужно проверять попадает ли в этот период СТУЛ в какую организацию
5 DmVl76
 
17.12.21
13:57
(4) А что делает этот документ?
6 nodrama
 
17.12.21
13:59
(5) Да это не важно это загубленная база заказчиков. Важно позволить им проводить документ не на основании организации которая забита в карточке позиции. А на основании истории этой позиции из РС

То есть есть период документа с 20.03 по 25.03. и организация в документе ООО КОПЫТА КОРОВЫ.. но делают они его уже в апреле...сейчас проверка идет просто что бы организация позиции = организация документа. Следовательно СТУЛ в этот документ уже не попадет там с апреля другая организация..
А нужно сделать проверку что с 20.03 по 25.03 стул реально был на ООО КОПЫТА КОРОВЫ и следовательно разрешить им проведение документа на этом основании
7 DmVl76
 
17.12.21
14:01
(6) А если он был за этот период в нескольких организациях, в том числе и в той, которая в шапке?
8 nodrama
 
17.12.21
14:01
то есть нужно взять период документа
Период1 = 20.03.2021
Период2 = 25.03.2021 25 59 59

И проверить в РС был ли в этот период СТУЛ на этой организации

18.03.2021    - ООО КОПЫТА КОРОВЫ - СТУЛ
01.04.2021    - ООО КОРОВА - СТУЛ

Следовательно так как он с 18.03 там, а с 01.04 только в другой

Тогда да был. тогда все ок
9 nodrama
 
17.12.21
14:02
(7) тогда там в результате запроса будет не 1 строка (Количество()) а не сколько.. если несколько значит "Сообщить, было не сколько за этот период, менйте период руки кривые" вот
10 DmVl76
 
17.12.21
14:03
Срез последних на начало периода + движения за период
11 DmVl76
 
17.12.21
14:04
Получаем все организации за период
12 nodrama
 
17.12.21
14:04
ну то есть с этим все просто. .если результат.количество()=1 тогда ОК. если = 0 тогда отбой и то же ок. Если >1 тогда сообщить(руки совсем кривые исправляйте).. с этим нет проблем. главное проверку сделать
13 1Сергей
 
17.12.21
14:04
(10) +1
14 nodrama
 
17.12.21
14:05
(10) + движения за период это как ?
15 1Сергей
 
17.12.21
14:05
(14)
ИЗ
    РегистрСведений.ТвойРС
16 nodrama
 
17.12.21
14:13
Че то сегодня не мой день.....

ВЫБРАТЬ
    ИсторияВУчетеСрезПоследних.ОрганизацияРегламентированногоУчета КАК ОрганизацияРегламентированногоУчета

ИЗ
    РегистрСведений.ИсторияВУчете.СрезПоследних(&Период1, ) КАК ИсторияВУчетеСрезПоследних
ГДЕ
    ИсторияВУчетеСрезПоследних.Позиция= &Позиция
    

Выдает 2 строки

При условии что Период1, больше чем дата в одной организации и дата в другой. То есть он выдает все строчки организаций по этой позиции
17 nodrama
 
17.12.21
14:17
то есть если позиция за месяц побывала в 10 местах. и следовательно имеет 10 дат.
01
02
03
04
05
06
07
08
09
10

А Период1 = 05
То он выдает в результате все 5 строк а не последнию
18 1Сергей
 
17.12.21
14:41
(17) он сворачивает по всем измерениям
19 Царь-пушка
 
17.12.21
14:41
Лови:

ВЫБРАТЬ
    ТвойРегистр.Период КАК Период,
    ТвойРегистр.Организаиця КАК Организаиця,
    ТвойРегистр.Штуковина КАК Штуковина
ИЗ
    РегистрСведений.ТвойРегистр КАК ТвойРегистр
ГДЕ
    ТвойРегистр.Штуковина = &Штуковина
    И ТвойРегистр.Период В
            (ВЫБРАТЬ
                МАКСИМУМ(ТвойРегистр.Период)
            ИЗ
                РегистрСведений.ТвойРегистр КАК ТвойРегистр
            ГДЕ
                ТвойРегистр.Период <= &Период
                И ТвойРегистр.Штуковина = &Штуковина)
20 nodrama
 
17.12.21
14:55
(19) Ооооо Царь Пушка )) вроде работает
Постапвил еще Организация = ОрганизацияИзДокумена сразу. наам же надо что бы была равно ) а не просто результат какая.. результат не важен гдавное что бы он был = 1 )
21 nodrama
 
17.12.21
15:01
(19)Но не совсем там же два периода. в документе. Дата начала дата конца. а у тебя 1 период
то есть если брать Дата начала из документа.  05.03 допустим. а дата конца 10.03
А в регистре запись от 06.03 то он должен быть там он попал в этот период по этой организации
А у тебя получается он не попал
22 nodrama
 
17.12.21
15:04
то есть нужно так проверить период..
что бы Штуковина со своей датой из РС, попала в период Даты начала и даты конца документа
По организации из шапки документа
23 Царь-пушка
 
17.12.21
15:08
Но есть риск что в периоде не было записей


ВЫБРАТЬ
    ТвойРегистр.Период КАК Период,
    ТвойРегистр.Организаиця КАК Организаиця,
    ТвойРегистр.Штуковина КАК Штуковина
ИЗ
    РегистрСведений.ТвойРегистр КАК ТвойРегистр
ГДЕ
    ТвойРегистр.Штуковина = &Штуковина
    И ТвойРегистр.Период В
            (ВЫБРАТЬ
                МАКСИМУМ(ТвойРегистр.Период)
            ИЗ
                РегистрСведений.ТвойРегистр КАК ТвойРегистр
            ГДЕ
                ТвойРегистр.Период <= &ДатаОкочания
                И ТвойРегистр.Период >= &ДатаНачала
                И ТвойРегистр.Штуковина = &Штуковина)
24 nodrama
 
17.12.21
15:09
между датой начала и конца. точнее

если штуковина по РС.. от 02.08....до 01.09 на одной организации.
то если дата начала документа 01.08 а дата конца документа 31.08 и та же организация то это норм типо
Если дата начала документа 01.09 а дата конца документы 30.09 допустим и организация опять же сошлась
штуковина с 01.09 на нужной организации то опять норм
25 nodrama
 
17.12.21
15:09
(23) Вот с этим и борюсь.. то же кучу запросы.. иногда идеально работает. но тупо записей нету
26 nodrama
 
17.12.21
15:11
в РС есть записи всегда он не бывает пустым. как штуковину принимают куда либо то сразу появляет там дата.
проблема главная то дата первая в РС может быть 15.09. и все дальше ни чего нет запись одна.
А дата документа может ыть от 01.09 до 30.09. но если организация совпадет то это норма
в первым запросе который ты навоял с одним Периодам если дата документа была раньше то уже не работал) сейчас потестирую второй. спасибо
27 nodrama
 
17.12.21
15:14
(23) Ну собственно как ты и говорил. есть позиции где нету записей

когда они долго лежат.. первая запись 01.01 допустим.. а вторая запись от 01.10 допустим
А если документ дата от 01.02 до 01.03.. то он пустой что логично. но по факту в этот период он принадлежал первой организации из записи до 01.10 числа пока не отдали)
28 nodrama
 
17.12.21
15:14
Если что РС переодичный там есть средпоследних. но то же не получается
29 nodrama
 
17.12.21
15:17
вот что за люди а могли бы сделать просто еще 1 поле в РС дата ПО и небыло бы проблем
30 nodrama
 
17.12.21
15:20
Мне уже кажется проще через задницу сделать

при заполеннии дока.. заполнять какую нибудь ТЧ ТЗ... там сделать ДатаКонца.. и из РС.. дату начала заполнять и ДатуКонца если строка не 1.
потом тупо брать период документа и смотреть сходит ли этот период в какой нибудь из периодов ТЧ если входит проверять организацию да да нет нет и все))
31 nodrama
 
17.12.21
15:26
Таб = Новый ТаблицаЗначений;    


    Таб.Колонки.Добавить("датаНач");
    Таб.Колонки.Добавить("ДатаКонца");
    Таб.Колонки.Добавить("Штуковина");
    Таб.Колонки.Добавить("Организация");
  
для каждого фиговаПозиция из Док.ТЧ.ФиговыПозиции цикл
    Стр = Таб.Добавить();
    Стр.датаНач= "11";
    Стр.ДатаКонца= "22";
    Стр.Штуковина= "стул";
    Стр.Организация= "РОГА И КОПЫТА";
КонецЦикла

Для Каждого Стр Из Таб Цикл
   А тут как нибудь проверить входит ли строка из Таб в Даты начала и даты конца документа и если входит то проверить сходятся ли организации
    КонецЦикла;
32 nodrama
 
17.12.21
15:30
Если (стр.ДатаНач <= ДатаНачдокумента или стр.ДатаКонца<=ДатаКонцаДокумента) или (стр.ДатаНач>=ДатаНачДокумента или стрДатаКонца<=ДатаКонцаДокумента) тогда
Если стр.Организация = Док.Организация тогда
"ок"
Конецесли
КонецЕсли
как то так
33 nodrama
 
17.12.21
16:05
Но это кастыли конечно.. хотя там и так база такая же )

По факту есть шапка дока
Организация
Дата Начала Дата Конца.

И есть РС

01.02.2021 стул - ооо копыта
20.02.2021 стул - ооо рога
03.03.2021 стул - ооо хвост

И во время заполнения документа
если выбирают ооо Рога
дата начала 01.02.2021 дата конца 28.02.2021
то стул там долен быть он попадает в этот период и в эту организацию. иначе нет
34 Dmitrii
 
гуру
17.12.21
16:48
(29) >> могли бы сделать просто еще 1 поле в РС дата ПО и небыло бы проблем.

Была бы проблема - заполнять это поле.
Ведь в момент создания записи дата ПО ещё неизвестна.

А по сути темы.
Уже четвертый десяток постов, а я так и не понял структуру регистра - что измерения, что ресурсы, что реквизиты.
Не говоря уже о самой задаче. Ты со своими коровами и их копытами сам запутался и всех уже запутал.

На первый взгляд ответ уже дали в (10). Твои трудности непонятны.
35 nodrama
 
23.12.21
16:16
(34)
Период
Организация
Позиция  
Все измерения. ресурсов нет

позиция "стул" качают от одной органищации к другой. Дата передачи это период.
нужно во время проведения дока по организации проверять. был ли этот стул в дату проведения дока на этой организации или нет


>>Была бы проблема - заполнять это поле.
>>Ведь в момент создания записи дата ПО ещё неизвестна.
Да не было бы ее. в момент создания дока который двигает этот регистр.  перед тем как создать новую строку с новой датой. искали бы последнию строку по этой позиции и добавляли бы в нее "по" - 1 день.
и было бы что по 19.10, а вторая стрка уже с 20.10 и ПО не заполнено значит по нынешнее время.
36 nodrama
 
23.12.21
16:20
(35) период не измерения логично