Имя: Пароль:
1C
 
Получить значение из табличной части по номеру строки
0 aptomilov
 
15.06.26
11:15
Привет всем.
Интересная задачка.
в есть отчетик который формируется из документа но информацию берет из регистра накопления.
Задача в том что взять еще одно поле из таблично части по номеру строки которые есть в регистре.
Крутил так и сяк пока ума не приложу как взять значение из таб части документа по номеру строки?
Добавить поле в регистр не предлагаем )
1 aptomilov
 
15.06.26
11:18
тут надо добавить что это скд шный отчет
то есть запросом
2 RomanYS
 
15.06.26
11:26
(0) соединение с ТЧ не предлагать? В чём проблема то?
3 Ненавижу 1С
 
гуру
15.06.26
11:27
подумать над тем, что строки в документе и регистре вообще говоря не соответствуют друг другу однозначно. Боюсь придется более развернуто написать задачу
4 Homer
 
15.06.26
11:28
В регистре накопление есть поле "НомерСтроки" и в документе в табличной части есть "НомерСтроки". делаешь вот так НомерСтроки = НомерСтроки
С вас 5 тыс)
5 aptomilov
 
15.06.26
11:34
(3) проверил на скольких документ номер строки вроде сходится
6 aptomilov
 
15.06.26
11:35
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ТрудозатратыКОформлениюОбороты.ПериодДень КАК ПериодДень,
    ТрудозатратыКОформлениюОбороты.ПериодНеделя КАК ПериодНеделя,
    ТрудозатратыКОформлениюОбороты.ВидРабот КАК ВидРабот,
// ВОТ ТУТ ДОБАВИТЬ ЕЩЕ ОДНО ПОЛЕ ИЗ ТЧ ДОКУМЕНТА
    ТрудозатратыКОформлениюОбороты.Подразделение КАК Подразделение,
    ТрудозатратыКОформлениюОбороты.ПартияПроизводства КАК ПартияПроизводства,
    ТрудозатратыКОформлениюОбороты.ПартияПроизводства.ОсновноеИзделиеНоменклатура КАК Изделие,
    ВЫБОР
        КОГДА ТрудозатратыКОформлениюОбороты.Распоряжение ССЫЛКА Документ.ЭтапПроизводства2_2
            ТОГДА ТрудозатратыКОформлениюОбороты.Распоряжение
        КОГДА ТрудозатратыКОформлениюОбороты.Распоряжение ССЫЛКА Документ.ПроизводственнаяОперация2_2
            ТОГДА ВЫРАЗИТЬ(ТрудозатратыКОформлениюОбороты.Распоряжение КАК Документ.ПроизводственнаяОперация2_2).Этап
        ИНАЧЕ ЗНАЧЕНИЕ(Документ.ЭтапПроизводства2_2.ПустаяСсылка)
    КОНЕЦ КАК Этап,
    ВЫБОР
        КОГДА ТрудозатратыКОформлениюОбороты.Распоряжение ССЫЛКА Документ.ЭтапПроизводства2_2
            ТОГДА ВЫРАЗИТЬ(ТрудозатратыКОформлениюОбороты.Распоряжение КАК Документ.ЭтапПроизводства2_2).Статус
        КОГДА ТрудозатратыКОформлениюОбороты.Распоряжение ССЫЛКА Документ.ПроизводственнаяОперация2_2
            ТОГДА ВЫРАЗИТЬ(ТрудозатратыКОформлениюОбороты.Распоряжение КАК Документ.ПроизводственнаяОперация2_2).Этап.Статус
        ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СтатусыЭтаповПроизводства2_2.ПустаяСсылка)
    КОНЕЦ КАК СтатусЭтапаПроизводства,
    ВЫБОР
        КОГДА ТрудозатратыКОформлениюОбороты.ВидРабот.КратностьТрудоемкости = 0
            ТОГДА 0
        ИНАЧЕ ТрудозатратыКОформлениюОбороты.КоличествоПриход * ТрудозатратыКОформлениюОбороты.ВидРабот.Трудоемкость / ТрудозатратыКОформлениюОбороты.ВидРабот.КратностьТрудоемкости
    КОНЕЦ КАК ЗатраченноеВремя,
    ТрудозатратыКОформлениюОбороты.ПартияПроизводства.Документ КАК ЗаказНаПроизводство
{ВЫБРАТЬ
    ВидРабот.*,
    Подразделение.*,
    Этап.*,
    ПериодДень,
    ПериодНеделя,
    ЗатраченноеВремя КАК ЗатраченноеВремя,
    ПартияПроизводства.*,
    Изделие.*,
    ЗаказНаПроизводство.*,
    СтатусЭтапаПроизводства.*}
ИЗ
    РегистрНакопления.ТрудозатратыКОформлению.Обороты(
            {(&НачалоПериода)},
            {(&КонецПериода)},
            Авто,
            ПартияПроизводства В
                (ВЫБРАТЬ РАЗЛИЧНЫЕ
                    ВТ_ЗаказыНаПроизводство.Партия КАК Партия
                ИЗ
                    ВТ_ЗаказыНаПроизводство КАК ВТ_ЗаказыНаПроизводство)) КАК ТрудозатратыКОформлениюОбороты
{ГДЕ
    ТрудозатратыКОформлениюОбороты.ПериодДень,
    ТрудозатратыКОформлениюОбороты.ПериодНеделя,
    ТрудозатратыКОформлениюОбороты.ВидРабот.*,
    ТрудозатратыКОформлениюОбороты.Подразделение.*,
    (ВЫБОР
            КОГДА ТрудозатратыКОформлениюОбороты.Распоряжение ССЫЛКА Документ.ЭтапПроизводства2_2
                ТОГДА ТрудозатратыКОформлениюОбороты.Распоряжение
            КОГДА ТрудозатратыКОформлениюОбороты.Распоряжение ССЫЛКА Документ.ПроизводственнаяОперация2_2
                ТОГДА ВЫРАЗИТЬ(ТрудозатратыКОформлениюОбороты.Распоряжение КАК Документ.ПроизводственнаяОперация2_2).Этап
            ИНАЧЕ ЗНАЧЕНИЕ(Документ.ЭтапПроизводства2_2.ПустаяСсылка)
        КОНЕЦ).* КАК Этап,
    ТрудозатратыКОформлениюОбороты.ПартияПроизводства.*,
    ТрудозатратыКОформлениюОбороты.ПартияПроизводства.Документ.* КАК ЗаказНаПроизводство,
    ТрудозатратыКОформлениюОбороты.ПартияПроизводства.ОсновноеИзделиеНоменклатура.* КАК Изделие,
    (ВЫБОР
            КОГДА ТрудозатратыКОформлениюОбороты.Распоряжение ССЫЛКА Документ.ЭтапПроизводства2_2
                ТОГДА ВЫРАЗИТЬ(ТрудозатратыКОформлениюОбороты.Распоряжение КАК Документ.ЭтапПроизводства2_2).Статус
            КОГДА ТрудозатратыКОформлениюОбороты.Распоряжение ССЫЛКА Документ.ПроизводственнаяОперация2_2
                ТОГДА ВЫРАЗИТЬ(ТрудозатратыКОформлениюОбороты.Распоряжение КАК Документ.ПроизводственнаяОперация2_2).Этап.Статус
            ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СтатусыЭтаповПроизводства2_2.ПустаяСсылка)
        КОНЕЦ В (&СтатусыЭтапа))}
7 aptomilov
 
15.06.26
12:04
может кто то подсказать вот это выражение что значит ?
8 aptomilov
 
15.06.26
12:06
{ВЫБРАТЬ
    ЗаказНаПроизводство.*,
    Подразделение.*,
    Этап.*,
    ВидРабот.*,
    Изделие.*,
    ПартияПроизводства.*,
    ПлановоеВремя}
9 vicof
 
15.06.26
12:16
Выбрать поля и их подчиненные реквизиты. Кэпа звать?
10 aptomilov
 
15.06.26
12:38
(9) спасибо  
сможете помочь с выбором реквизита из таб части по номеру строки?
11 vicof
 
15.06.26
12:44
Да. Сначала надо описать задачу, а не ее решение.
12 aptomilov
 
15.06.26
12:47
1С ерп отчет Трудоемкость по этапу  из документа этап.
- показывает только Вид работ а нужно что бы показывало еще и назначение работ это вот как до меня она дошла

далее я смотрю отчет вижу что он берет из регистра накопления инфу по трудоемкости и вид работа там есть а назначения нет
13 maxab72
 
15.06.26
12:48
(8) это надо смотреть книжку "Профессиональная разработка в системе 1С:Предприятие 8", первое издание. Раздел о построителе отчетов.
14 Dmitrii
 
гуру
15.06.26
12:49
(5) >> проверил на скольких документ номер строки вроде сходится

Реквизит НомерСтроки в табличной части - это номер СТРОКИ табличной части.
Реквизит НомерСтроки в наборе записей - это номер ЗАПИСИ в наборе записей. Почему он называется НомерСтроки, а не НомерЗаписи? - Скорее всего простая случайность.

Даже если ты проверишь абсолютно все записи регистра и сверишь со всеми табличными частями всех документов, вполне возможно, что у тебя всё сойдётся.
Однако это не значит, что оно будет сходиться всегда.
Завтра появится новая табличная часть у документа, которая будет добавлять тебе записи в набор, или изменится логика добавления записей в набор (многие строки табличной части к одной строке набора или наоборот, или сортировку пририсует разработчик в запросе, который формирует набор записей регистра), и вся твоя сходимость накроется медным тазом.
15 Dmitrii
 
гуру
15.06.26
13:18
(0) >> Добавить поле в регистр не предлагаем )

Предлагаем-предлагаем!

Это единственное верное и вменяемое решение.
Особенно, если регистр оборотов, а не остатков. Тогда можно как измерение бахнуть.
Если регистр остатков, то сделать реквизит и переписать запрос с виртуальной таблицы оборотов на таблицу первичных записей.

А то что ты пишешь - это костыль, который может отвалиться в любой момент. И хорошо, если просто отвалиться - сообщение об ошибке проявит проблему. А то может просто молча начать выдавать неверные данные из-за неверной связи номера строки с номером записи.
16 maxab72
 
15.06.26
13:54
(15) ну, это тоже решение довольно геморройное, вероятно придется править логику проведения и т.п. лучше искать строки  из табличной части документа по набору полей - измерениям регистра, а потом делить их по количеству или еще как надо, но только в запросе.
17 aptomilov
 
15.06.26
13:59
(16) проблеск нужного решения
помоги друг )
18 Homer
 
15.06.26
14:10
а потом данные специалисты жалуются что их заменил ИИ, а они 14 лет работал «как не в себя».
19 maxab72
 
15.06.26
14:11
(17) составь табличку: реквизиты табличной части vs измерения регистра. Поймешь по какому набору полей можно вытащить строку с нужным назначением.
20 Dmitrii
 
гуру
15.06.26
14:53
(16) >> решение довольно геморройное, вероятно придется править логику проведения и т.п.

Возможно...
Чтобы это понять надо знать больше подробностей.

В простейшем варианте все изменения в логике проведения сводятся к созданию одной подписки на событие - либо на ПриПроведении документа (если добавленный реквизит заполняется только в этом документе), либо на ПриЗаписи набора записей регистра (если работать должно в нескольких документах). Больше проблем может возникнуть с переписыванием отчета с виртуальной таблицы регистра накопления на таблицу движений.

>> лучше искать строки  из табличной части документа по набору полей - измерениям регистра, а потом делить их по количеству или еще как надо, но только в запросе.

Тут проблема может возникнуть, когда по набору полей не получится однозначная связь "один к одному".
21 maxab72
 
15.06.26
15:58
(20) "Тут проблема может возникнуть, когда по набору полей не получится однозначная связь "один к одному"." Это как фишка ляжет. Если одна строка документа с одним назначением представлена несколькими строками регистра - это одна разница, а если несколько строк документа с разными назначениями схлопываются в одну строку регистра - это совсем иная разница.
22 Garykom
 
гуру
15.06.26
17:37
(0) А вот если регистр сведений и без регистратора (назависимый) то никак без добавления номера строки в РС
Ибо могут быть дубли ключевых полей
23 Garykom
 
гуру
15.06.26
17:54
Кстати а зачем номер строки ТЧ документа понадобился в отчете?
Просто "чтоб було"?