![]() |
|
Выборка связанных документов 🠗 (XLife 19.06.2019 11:21) |
☑ | ||
---|---|---|---|---|
0
LivingStar
19.06.19
✎
05:21
|
ERP. За указанный на форме обработки период, выбираются документы ОтчетПереработчика.
Необходимо найти связь этих документов с документом ОтчетДавальцу, по реквизитам НомерПоДаннымПартнера и ДатаПоДаннымПартнера. Проверка идет по последним 6 цифрам, числа номеров должны совпадать. То есть числовое значение НомерПоДаннымПартнера документа ОтчетПереработчика должно совпадать с номером документа ОтчетДавальцу. Должны совпадать номер и месяц документов. Как лучше можно разработать такую выборку? |
|||
1
ДенисЧ
19.06.19
✎
06:10
|
Зваовтить программисту
|
|||
2
LivingStar
19.06.19
✎
06:35
|
Я спросил совет. Сам разработчик и программист !
|
|||
3
ДенисЧ
19.06.19
✎
06:44
|
(2) Смешно. Да, правда, очень.
На ТНТ тебя ждут давно... |
|||
4
catena
19.06.19
✎
06:47
|
(2)Так в чем проблема? Вроде запросы пишешь, вроде даже с соединениями.
|
|||
5
LivingStar
19.06.19
✎
06:50
|
(3) Да, ТЫ ЧО????
|
|||
6
LivingStar
19.06.19
✎
06:51
|
(4) Да пока не собрался с мыслями.
Вот выбрал ОтчетыПереработчика. Думаю как сейчас к ним подцепить ОтчетДавальцу. В соответствии с уловиями в (0). Важно же правильно сделать. // &НаСервере Процедура ЗаполнитьНаСервере() Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | ОтчетПереработчикаМатериалы.Ссылка.Номер КАК НомерОтчета, | ОтчетПереработчикаМатериалы.Ссылка КАК ОтчетПереработчика, | ОтчетПереработчикаМатериалы.Номенклатура КАК Материал, | СУММА(ОтчетПереработчикаМатериалы.Количество) КАК ВУчетеПереработчика |ПОМЕСТИТЬ ВТ_ОтчетПереработчику |ИЗ | Документ.ОтчетПереработчика.Материалы КАК ОтчетПереработчикаМатериалы |ГДЕ | ОтчетПереработчикаМатериалы.Ссылка.Проведен = ИСТИНА | И ОтчетПереработчикаМатериалы.Ссылка.Дата МЕЖДУ &НачДата И &КонДата | |СГРУППИРОВАТЬ ПО | ОтчетПереработчикаМатериалы.Ссылка.Номер, | ОтчетПереработчикаМатериалы.Ссылка, | ОтчетПереработчикаМатериалы.Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ_ОтчетПереработчику.НомерОтчета КАК НомерОтчета, | ВТ_ОтчетПереработчику.ОтчетПереработчика КАК ОтчетПереработчика, | """" КАК ОтчетДавальцу, | ВТ_ОтчетПереработчику.Материал КАК Материал, | """" КАК ВУчетеДавальца, | ВТ_ОтчетПереработчику.ВУчетеПереработчика КАК ВУчетеПереработчика, | """" КАК Комментарий |ИЗ | ВТ_ОтчетПереработчику КАК ВТ_ОтчетПереработчику | |УПОРЯДОЧИТЬ ПО | ВТ_ОтчетПереработчику.Материал.Наименование"; Запрос.УстановитьПараметр("НачДата", Объект.Период.ДатаНачала); Запрос.УстановитьПараметр("КонДата", Объект.Период.ДатаОкончания); Рез = Запрос.Выполнить(); Если Не Рез.Пустой() Тогда Объект.СравнениеОтчетов.Загрузить(Рез.Выгрузить()); КонецЕсли; КонецПроцедуры // |
|||
7
vip03
19.06.19
✎
06:52
|
Для месяца НачалоПериода(ДатаДок, Месяц)
для номера - только подстрока, но сработает если только для номера фиксирована. |
|||
8
LivingStar
19.06.19
✎
06:52
|
Проверять номера нужно по последним 6 цифрам, т.е. номеру отчета давальцу УП0z-000050 может соответствовать Номер по данным партнера в отчетах переработчика как УП0z-000050, так и 50, так и z-50. Сравнивать в данном примере нужно 50 = 50.
|
|||
9
LivingStar
19.06.19
✎
06:54
|
(7) Пока не понял как устанавливать для месяца.
Наверное выборка документов по периоду и все. Или как это сделать в запросе не представляю пока. По номеру нужно проверять по последним 6 цифрам. |
|||
10
vip03
19.06.19
✎
06:56
|
(9) левое соедидинение где НачалоПериода(Дата1, месяц)=НачалоПериода(Дата2, месяц)
|
|||
11
breezee
19.06.19
✎
06:58
|
(10) Лучше перед запросом это посчитать. Запрос моет медленно работать от такого
|
|||
12
LivingStar
19.06.19
✎
06:59
|
(10 ) не знаю как сработает этот отбор.
А по номеру как правильно будет? |
|||
13
LivingStar
19.06.19
✎
06:59
|
(11) Как перед запросом? Отбирать же нужно в запросе.
|
|||
14
breezee
19.06.19
✎
07:02
|
(13) А, ну да
|
|||
15
LivingStar
19.06.19
✎
07:12
|
Предварительный вариант. Только в отчете давальца везде NULL, что то не так.
ВЫБРАТЬ ОтчетПереработчикаМатериалы.Ссылка.Номер КАК НомерОтчета, ОтчетПереработчикаМатериалы.Ссылка КАК ОтчетПереработчика, ОтчетПереработчикаМатериалы.Номенклатура КАК Материал, СУММА(ОтчетПереработчикаМатериалы.Количество) КАК ВУчетеПереработчика ПОМЕСТИТЬ ВТ_ОтчетПереработчику ИЗ Документ.ОтчетПереработчика.Материалы КАК ОтчетПереработчикаМатериалы ГДЕ ОтчетПереработчикаМатериалы.Ссылка.Проведен = ИСТИНА И ОтчетПереработчикаМатериалы.Ссылка.Дата МЕЖДУ &НачДата И &КонДата СГРУППИРОВАТЬ ПО ОтчетПереработчикаМатериалы.Ссылка.Номер, ОтчетПереработчикаМатериалы.Ссылка, ОтчетПереработчикаМатериалы.Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ОтчетДавальцуПродукция.Ссылка КАК ОтчетДавальцу, ОтчетДавальцуПродукция.Номенклатура КАК Материал, ОтчетДавальцуПродукция.Количество КАК ВУчетеДавальца ПОМЕСТИТЬ ВТ_ОтчетДавальцу ИЗ Документ.ОтчетДавальцу.Продукция КАК ОтчетДавальцуПродукция ГДЕ ОтчетДавальцуПродукция.Ссылка.Проведен = ИСТИНА И ОтчетДавальцуПродукция.Ссылка.Дата МЕЖДУ &НачДата И &КонДата ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_ОтчетПереработчику.НомерОтчета КАК НомерОтчета, ВТ_ОтчетПереработчику.ОтчетПереработчика КАК ОтчетПереработчика, ВТ_ОтчетДавальцу.ОтчетДавальцу КАК ОтчетДавальцу, ВТ_ОтчетПереработчику.Материал КАК Материал, ВТ_ОтчетДавальцу.ВУчетеДавальца КАК ВУчетеДавальца, ВТ_ОтчетПереработчику.ВУчетеПереработчика КАК ВУчетеПереработчика, "" КАК Комментарий ИЗ ВТ_ОтчетПереработчику КАК ВТ_ОтчетПереработчику ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОтчетДавальцу КАК ВТ_ОтчетДавальцу ПО ВТ_ОтчетПереработчику.ОтчетПереработчика.НомерПоДаннымПартнера = ВТ_ОтчетДавальцу.ОтчетДавальцу.Номер И ВТ_ОтчетПереработчику.ОтчетПереработчика.ДатаПоДаннымПартнера = ВТ_ОтчетДавальцу.ОтчетДавальцу.Дата И ВТ_ОтчетПереработчику.Материал = ВТ_ОтчетДавальцу.Материал УПОРЯДОЧИТЬ ПО ВТ_ОтчетПереработчику.Материал.Наименование |
|||
16
LivingStar
19.06.19
✎
07:14
|
Подскажите пожалуйста, как модернизировать (15).
Номера нужно сравнивать, по числовому значению, из 6 последних знаков номера. Дату сравнивать по месяцу. Пока можно даже без даты наверное, она устанавливается как я понимаю периодом. Как установить связь по номеру? Числу, из 6 последних знаков номеров. |
|||
17
catena
19.06.19
✎
07:18
|
(16)Длина номера фиксированная?
|
|||
18
vip03
19.06.19
✎
07:19
|
для даты я тебе в (10) сказал
И началопериода(ВТ_ОтчетПереработчику.ОтчетПереработчика.ДатаПоДаннымПартнера,месяц) = началопериода(ВТ_ОтчетДавальцу.ОтчетДавальцу.Дата, месяц) для номера только через подстроку, но только если Стрдлина номера фиксирована. если длина номера может различаться - только через выбор |
|||
19
LivingStar
19.06.19
✎
07:30
|
Так вообще ничего не выбирает
ВЫБРАТЬ ОтчетПереработчикаМатериалы.Ссылка.Номер КАК НомерОтчета, ОтчетПереработчикаМатериалы.Ссылка КАК ОтчетПереработчика, ОтчетПереработчикаМатериалы.Номенклатура КАК Материал, СУММА(ОтчетПереработчикаМатериалы.Количество) КАК ВУчетеПереработчика ПОМЕСТИТЬ ВТ_ОтчетПереработчику ИЗ Документ.ОтчетПереработчика.Материалы КАК ОтчетПереработчикаМатериалы ГДЕ ОтчетПереработчикаМатериалы.Ссылка.Проведен = ИСТИНА И ОтчетПереработчикаМатериалы.Ссылка.Дата МЕЖДУ &НачДата И &КонДата СГРУППИРОВАТЬ ПО ОтчетПереработчикаМатериалы.Ссылка.Номер, ОтчетПереработчикаМатериалы.Ссылка, ОтчетПереработчикаМатериалы.Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ОтчетДавальцуПродукция.Ссылка КАК ОтчетДавальцу, ОтчетДавальцуПродукция.Номенклатура КАК Материал, ОтчетДавальцуПродукция.Количество КАК ВУчетеДавальца ПОМЕСТИТЬ ВТ_ОтчетДавальцу ИЗ Документ.ОтчетДавальцу.Продукция КАК ОтчетДавальцуПродукция ГДЕ ОтчетДавальцуПродукция.Ссылка.Проведен = ИСТИНА И ОтчетДавальцуПродукция.Ссылка.Дата МЕЖДУ &НачДата И &КонДата ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_ОтчетПереработчику.НомерОтчета КАК НомерОтчета, ВТ_ОтчетПереработчику.ОтчетПереработчика КАК ОтчетПереработчика, ВТ_ОтчетДавальцу.ОтчетДавальцу КАК ОтчетДавальцу, ВТ_ОтчетПереработчику.Материал КАК Материал, ВТ_ОтчетДавальцу.ВУчетеДавальца КАК ВУчетеДавальца, ВТ_ОтчетПереработчику.ВУчетеПереработчика КАК ВУчетеПереработчика, "" КАК Комментарий ИЗ ВТ_ОтчетПереработчику КАК ВТ_ОтчетПереработчику ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОтчетДавальцу КАК ВТ_ОтчетДавальцу ПО ВТ_ОтчетПереработчику.ОтчетПереработчика.НомерПоДаннымПартнера = ВТ_ОтчетДавальцу.ОтчетДавальцу.Номер И ВТ_ОтчетПереработчику.ОтчетПереработчика.ДатаПоДаннымПартнера = ВТ_ОтчетДавальцу.ОтчетДавальцу.Дата И ВТ_ОтчетПереработчику.Материал = ВТ_ОтчетДавальцу.Материал ГДЕ НАЧАЛОПЕРИОДА(ВТ_ОтчетПереработчику.ОтчетПереработчика.ДатаПоДаннымПартнера, МЕСЯЦ) = НАЧАЛОПЕРИОДА(ВТ_ОтчетДавальцу.ОтчетДавальцу.Дата, МЕСЯЦ) УПОРЯДОЧИТЬ ПО ВТ_ОтчетПереработчику.Материал.Наименование |
|||
20
catena
19.06.19
✎
07:32
|
(19)Ну, как бы, ты ему сперва сказал: выбери те, где синее равно красному, а потом говоришь: А теперь из них выбери цветные.
И ВТ_ОтчетПереработчику.ОтчетПереработчика.ДатаПоДаннымПартнера = ВТ_ОтчетДавальцу.ОтчетДавальцу.Дата НАЧАЛОПЕРИОДА(ВТ_ОтчетПереработчику.ОтчетПереработчика.ДатаПоДаннымПартнера, МЕСЯЦ) = НАЧАЛОПЕРИОДА(ВТ_ОтчетДавальцу.ОтчетДавальцу.Дата, МЕСЯЦ) |
|||
21
LivingStar
19.06.19
✎
07:33
|
(18) Номер отчета давальцу 11 символов.
А НомерПоДаннымПартнера в отчете переработчика 30 символов |
|||
22
catena
19.06.19
✎
07:34
|
(21)И все 30 всегда заполнены?
|
|||
23
LivingStar
19.06.19
✎
07:36
|
Получается сейчас нужно как то по номерам связать, если это вообще возможно
ВЫБРАТЬ ОтчетПереработчикаМатериалы.Ссылка.Номер КАК НомерОтчета, ОтчетПереработчикаМатериалы.Ссылка КАК ОтчетПереработчика, ОтчетПереработчикаМатериалы.Номенклатура КАК Материал, СУММА(ОтчетПереработчикаМатериалы.Количество) КАК ВУчетеПереработчика ПОМЕСТИТЬ ВТ_ОтчетПереработчику ИЗ Документ.ОтчетПереработчика.Материалы КАК ОтчетПереработчикаМатериалы ГДЕ ОтчетПереработчикаМатериалы.Ссылка.Проведен = ИСТИНА И ОтчетПереработчикаМатериалы.Ссылка.Дата МЕЖДУ &НачДата И &КонДата СГРУППИРОВАТЬ ПО ОтчетПереработчикаМатериалы.Ссылка.Номер, ОтчетПереработчикаМатериалы.Ссылка, ОтчетПереработчикаМатериалы.Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ОтчетДавальцуПродукция.Ссылка КАК ОтчетДавальцу, ОтчетДавальцуПродукция.Номенклатура КАК Материал, ОтчетДавальцуПродукция.Количество КАК ВУчетеДавальца ПОМЕСТИТЬ ВТ_ОтчетДавальцу ИЗ Документ.ОтчетДавальцу.Продукция КАК ОтчетДавальцуПродукция ГДЕ ОтчетДавальцуПродукция.Ссылка.Проведен = ИСТИНА И ОтчетДавальцуПродукция.Ссылка.Дата МЕЖДУ &НачДата И &КонДата ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_ОтчетПереработчику.НомерОтчета КАК НомерОтчета, ВТ_ОтчетПереработчику.ОтчетПереработчика КАК ОтчетПереработчика, ВТ_ОтчетДавальцу.ОтчетДавальцу КАК ОтчетДавальцу, ВТ_ОтчетПереработчику.Материал КАК Материал, ВТ_ОтчетДавальцу.ВУчетеДавальца КАК ВУчетеДавальца, ВТ_ОтчетПереработчику.ВУчетеПереработчика КАК ВУчетеПереработчика, "" КАК Комментарий ИЗ ВТ_ОтчетПереработчику КАК ВТ_ОтчетПереработчику ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОтчетДавальцу КАК ВТ_ОтчетДавальцу ПО ВТ_ОтчетПереработчику.Материал = ВТ_ОтчетДавальцу.Материал ГДЕ НАЧАЛОПЕРИОДА(ВТ_ОтчетПереработчику.ОтчетПереработчика.ДатаПоДаннымПартнера, МЕСЯЦ) = НАЧАЛОПЕРИОДА(ВТ_ОтчетДавальцу.ОтчетДавальцу.Дата, МЕСЯЦ) УПОРЯДОЧИТЬ ПО ВТ_ОтчетПереработчику.Материал.Наименование |
|||
24
LivingStar
19.06.19
✎
07:37
|
(22) Посмотрел, вижу что там номера типа z-22
то есть могут быть заполнены в произвольной форме |
|||
25
catena
19.06.19
✎
07:38
|
(24)Как номер "z-22" можно сравнить по последним 6 символам?
|
|||
26
ДенисЧ
19.06.19
✎
07:38
|
Самый простой способ - ввести реквизит ЧисловойНомер (или номерДляПоиска) и туда в призаписи пихать нужное число.
|
|||
27
LivingStar
19.06.19
✎
07:41
|
Видно что по одной строке номера числовые равны. А потом идет расхождение
http://joxi.ru/vAWd1a4UgVpzVr |
|||
28
vip03
19.06.19
✎
07:41
|
добавляешь в каждую ВТ поле с длиной номера
// по условию длина не может быть меньше 6 символов выбор когда подстрока(номер1,1,6)=номер тогда 6 когда подстрока(номер1,1,7)=номер тогда 7 когда подстрока(номер1,1,8)=номер тогда 8 когда подстрока(номер1,1,9)=номер тогда 9 когда подстрока(номер1,1,10)=номер тогда 10 когда подстрока(номер1,1,11)=номер тогда 11 иначе "много" конец как длина1 в условии связи подстрока(номер1, длина1-6, 6)=подстрока(номер2, длина2-6, 6) |
|||
29
LivingStar
19.06.19
✎
07:51
|
(28) Подскажите пожалуйста , а что это за ветвление?
Не пойму. |
|||
30
vip03
19.06.19
✎
07:56
|
в гугле "1с запрос выбор"
|
|||
31
LivingStar
19.06.19
✎
08:10
|
(30) Я выбор знаю конструкцию
я о том что это дает, данное ветвление ? |
|||
32
LivingStar
19.06.19
✎
08:11
|
(30) Это вычисление длинны номера?
|
|||
33
vip03
19.06.19
✎
08:11
|
если первые 6 символов номера равны самому номеру - длина номера =6
и т.д... |
|||
34
LivingStar
19.06.19
✎
08:15
|
(33) не пойму
|
|||
35
LivingStar
19.06.19
✎
08:16
|
(33) То есть если номер z-22
то будет когда подстрока(номер1,1,2)=номер тогда 2 или как? |
|||
36
vip03
19.06.19
✎
08:19
|
(35) подстрока вернет "z-" что не равно "z-22"
значит ДЛИНА номера не 2 а подстрока(номер1,1,4)=номер1, значит ДЛИНА номера=4 |
|||
37
LivingStar
19.06.19
✎
08:21
|
(36) Так из z-22, нужно получить только 22
|
|||
38
vip03
19.06.19
✎
08:22
|
но судя по скриншоту тебе нужно сравнивать ПОСЛЕДНИЕ ЗНАЧАЩИЕ ЦИФРЫ.
а их может быть от 1 до ..... можно конечно извратиться и написать это в запросе, но проще выгрузить запросы в ТЗ и связить две ТЗ |
|||
39
LivingStar
19.06.19
✎
08:22
|
(36) задача в том что бы из номеров
z-22, z-000022, 22 и подобных получать только 22 |
|||
40
LivingStar
19.06.19
✎
08:23
|
(38) Я и хочу понять как
мне нужно из (18) Номер отчета давальцу 11 символов. и НомерПоДаннымПартнера в отчете переработчика 30 символов получить номера, вне зависимости от значений номеров, с префиксом или без |
|||
41
vip03
19.06.19
✎
08:24
|
(3) был прав.
(0) Проверка идет по последним 6 цифрам, числа номеров должны совпадать. больше похож на клиента который сам не знает чего хочет.. |
|||
42
catena
19.06.19
✎
08:24
|
(39)Не майся ерундой, подготовь номера для сравнения вне запроса. В ТЗ добавь или в сами документы - не важно.
|
|||
43
LivingStar
19.06.19
✎
08:25
|
(41) Да в тз так написано, я пока не понял.
|
|||
44
LivingStar
19.06.19
✎
08:26
|
(42) Я вижу тут вопрос. Как из
Номер отчета давальцу 11 символов. и НомерПоДаннымПартнера в отчете переработчика 30 символов Получать числовые значения номера? |
|||
45
catena
19.06.19
✎
08:34
|
(4)Перебрать строку с конца, пока не наткнешься на нецифру, потом в число.
|
|||
46
LivingStar
19.06.19
✎
09:02
|
(36) Понял это выявление длинны номера введенного в реквизит.
А как выявить числовое значение в нем? Только как в (42) ? |
|||
47
LivingStar
19.06.19
✎
09:02
|
(46) только как в (45) ?
|
|||
48
vip03
19.06.19
✎
09:04
|
(45) можно не переводить обратно в число. просто сравнить "числовые"строки
(46) можно и в запросе, но это будет просто (.) |
|||
49
LivingStar
19.06.19
✎
09:05
|
(48) То есть в запросе не рекомендуется выделять из номера числовые значения?
Почему? Какая разница. Все там будет нормлаьно! |
|||
50
catena
19.06.19
✎
09:09
|
(49)Потому что у запроса очень мало функций работы со строками и обрабатываются они не оптимально.
|
|||
51
catena
19.06.19
✎
09:10
|
(48)Можно, но лидирующие нули придется обрабатывать отдельно.
|
|||
52
LivingStar
19.06.19
✎
09:22
|
(51) То есть в запросе выбирать номера, а потом проверять после запроса?
Как то не понимаю, мне и выбрать нужно же соответствия документов. |
|||
53
catena
19.06.19
✎
09:33
|
(52)Выбираешь две таблицы по датам и прочим условиям. ДОбавляешь им колонку, в которую пихаешь номер для связи. Загоняешь обратно в запрос и связываешь.
Либо добавляешь в документы реквизит номер для связи, пишешь заполнение перед записью, один раз обрабатываешь существующие документы. |
|||
54
LivingStar
19.06.19
✎
10:36
|
(53) В документы нельзя ничего добавлять.
|
|||
55
LivingStar
19.06.19
✎
10:37
|
(53) Как я номера сравню если они разные????? Только получается перебором обратных цифр в номере и сравнении число это или нет?
|
|||
56
catena
19.06.19
✎
10:40
|
(55)Поменьше знаков, ок???!!!
В гугл. "1с + получить номер из строки". Примеров масса, хошь перебором, хошь регэкспом. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |