Имя: Пароль:
1C
 
Выборка связанных документов
🠗 (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с + получить номер из строки". Примеров масса, хошь перебором, хошь регэкспом.
Основная теорема систематики: Новые системы плодят новые проблемы.