Имя: Пароль:
1C
1С v8
Компоновка в отчетах
0 DeadStudent
 
11.07.20
02:00
День добрый. Извиняюсь за глупый вопрос, только начинаю изучать 1С.

Есть 2 регистра: регистр накопления (ИнвНомер, Товар) и регистр сведений, в который вносят периодически данные о состоянии оборудования (ИнвНомер, Состояние).

Никак не могу понять куда повернуть, чтоб формировался такой отчет:
ИнвНомер, Товар, Состояние(последнее изменение).

3223 СистемныйБлок Неисправен
3224 Принтер Исправен

Если не сложно, укажите направление...желательно для решения задачи, а не похода.
1 ДенисЧ
 
11.07.20
04:12
ЧТо уже сделал, что пробовал?
2 Мимохожий Однако
 
11.07.20
07:47
Опиши структуру регистров. Для чего используешь регистр накопления?
3 СвинТуз
 
11.07.20
12:21
В регистре накопление видимо есть ресурс количество?
4 DeadStudent
 
11.07.20
15:43
Структура в грубой форме:

Регистр накопления(Остатки)
Измерения:
1) Склад(привязка к складу)
2) Инвентарный номер
3) Номенклатура
4) Состояние
Ресурс:
Количество

Регистр Сведений:
1) Инвентарный номер
2) Состояние

Сейчас состояние хранится в регистре накопления, но я понимаю, что это не совсем правильно, потому что оно меняется по мере ремонта/поломки, для этого больше подходит регистр сведений(на сколько я понял), я всё таки за правильный подход, а не костылей.

ДенисЧ, Пробовал работать с разным набором данных. Пробовал создать виртуальную таблицу, но пока я не нашел даже направления, куда копать. Посмотрел курсы Гилева "программирование за 21 день", но там не на столько подробно про отчеты.
5 ДенисЧ
 
11.07.20
17:59
2) Инвентарный номер
Регистр Сведений:
1) Инвентарный номер

За такое в приличном обществе бьют. И канделябром, и ногами, и шахматными досками...

ЗЫ.
Взять остатки из первого регистра, левосоединить со срезом последних - не?
6 DeadStudent
 
12.07.20
00:53
Я понимаю, что бьют, в принципе, я наверно даже соглашусь. Но как тогда соединить эти 2 регистра? Должен же быть ключ, по которому при выборке мы должны понимать,что этому объекту соответствует такое состояние(из последних). Хотя я уже начинаю в этом сомневаться, такое ощущение, что лучше менять состояние в самом регистре накопления(остатки).
7 DeadStudent
 
12.07.20
00:57
1с я изучаю чуть больше месяца, ну пусть будет полтора. Такие вещи, как обработки на формах, общие модули, действия при событиях понятны в общем то. Проблем с написанием такого функционала не сильно много, благо и ответов на возникающие вопросы тоже в большом объеме, главное поискать.

Но пробелы всё равно есть, в частности не совсем понятны зачем регистры сведений, я так понял они для изменяющихся данных, вот и подумал что оборудование хранится в регистре накопления, а такая характеристика, как состояние в регистре сведений. Ну связать решил по уникальному полю, а это инвентарный номер
8 DeadStudent
 
12.07.20
01:00
ЗЫ.
Взять остатки из первого регистра, левосоединить со срезом последних - не?

Не совсем понимаю, как я буду относить одну железку к её состоянию. Грубо говоря, есть 300 едениц оборудования и только у 10ти меняется состояние раз в неделю, получается в регистре сведений будет через месяц много изменений по этой еденице.
9 DeadStudent
 
12.07.20
01:54
ВЫБРАТЬ
    ТоварыНаСкладах.Склад,
    ТоварыНаСкладах.ИнвНомер,
    ТоварыНаСкладах.Номенклатура,
ИЗ
    РегистрНакопления.ОстаткиОборудования;
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    СостояниеОборудования.Состояние
ИЗ
    РегистрСведений.СостояниеОборудования
    ГДЕ
    РегистрСведений.ИнвНомер = ТоварыНаСкладах.ИнвНомер);


Примерно так (примерно-схематично-в общем) я себе понимаю реализацию....
10 DeadStudent
 
12.07.20
02:12
Вот пример, если по моим регистрам такую схему рисовать:

ВЫБРАТЬ
    ОстаткиТоваровОстатки.Склад,
    ОстаткиТоваровОстатки.ИнвНомер,
    ОстаткиТоваровОстатки.Номенклатура,
ИЗ
    РегистрНакопления.ОстаткиТоваров;
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    СостояниеОборудования.Состояние
ИЗ
    РегистрСведений.СостояниеОборудования
    ГДЕ
    РегистрСведений.СостояниеОборудования.ИнвНомер = ОстаткиТоваровОстатки.ИнвНомер)
11 hhhh
 
12.07.20
02:38
(10) ВЫБРАТЬ
    ОстаткиТоваровОстатки.Склад,

    ОстаткиТоваровОстатки.ИнвНомер,

    ОстаткиТоваровОстатки.Номенклатура,
    СостояниеОборудования.Состояние
ИЗ
    РегистрНакопления.ОстаткиТоваров КАК ОстаткиТоваровОстатки
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеОборудования КАК СостояниеОборудования
    ПО
    РегистрСведений.СостояниеОборудования.ИнвНомер = ОстаткиТоваровОстатки.ИнвНомер
12 DeadStudent
 
12.07.20
03:39
(11) Спасибо тебе огромное, милый человек. Здоровья, счастья и удачи.

Чуть поправил, получил практически то, что необходимо.

ВЫБРАТЬ
    ОстаткиТоваровОстатки.Склад КАК Склад,
    ОстаткиТоваровОстатки.ИнвНомер КАК ИнвНомер,
    ОстаткиТоваровОстатки.Номенклатура КАК Номенклатура,
    СостояниеОборудования.Состояние КАК Состояние
ИЗ
    РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеОборудования КАК СостояниеОборудования
        ПО (СостояниеОборудования.ИнвНомер = ОстаткиТоваровОстатки.ИнвНомер)


теперь я понял хотя бы принцип построения данных таблиц, пока пытался разобраться, сам дошел до такого варианта, ещё бы долго пытался понять:


ВЫБРАТЬ
    ОстаткиТоваровОстатки.Склад КАК Склад,
    ОстаткиТоваровОстатки.ИнвНомер КАК ИнвНомер,
    ОстаткиТоваровОстатки.Номенклатура КАК Номенклатура
ИЗ
    РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки
    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                         СостояниеОборудования.Состояние КАК Состояние
                     ИЗ
                         РегистрСведений.СостояниеОборудования КАК СостояниеОборудования
                     ГДЕ
                         СостояниеОборудования.ИнвНомер = &ИнвНомер) КАК ИнвентарныйНомер
                         ПО (Состояние.ИнвНомер = ОстаткиТоваровОстатки.ИнвНомер)


Осталось только выбрать последнее из значений (из регистра сведений), а то отображает все изменения
13 ДенисЧ
 
12.07.20
03:45
(12) СрезПоследних()
14 DeadStudent
 
12.07.20
04:01
Пишу

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеОборудования.СрезПоследних КАК СостояниеОборудованияСрезПоследних


Выдает, что не найдена таблица. Пойду дальше интернет штудировать, ссылок много выпало, что почитать
15 ДенисЧ
 
12.07.20
04:09
(14) Значит, у тебя регистр не периодический
16 Chameleon1980
 
12.07.20
04:18
хоксталева "язык запросов"
17 Chameleon1980
 
12.07.20
04:18
блин Хрусталева
18 DeadStudent
 
12.07.20
04:37
(15) Спасибо, огромное. Ошибку понял, сделал периодический в зависимости от регистратора, поправил Приходный документ и документ изменения состояния.
Но даже при запросе выдает все статусы

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеОборудования.СрезПоследних(&Период) КАК СостояниеОборудованияСрезПоследних

Период заполнен. Ставил другой параметр с датой, тоже самое, всё равно выдает все.

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеОборудования.СрезПоследних КАК СостояниеОборудованияСрезПоследних
                
(16) Спасибо за наводку, скачал, почитаю обязательно.
19 DeadStudent
 
12.07.20
04:49
Разобрался, сделал так:

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеОборудования.СрезПоследних(&ДатаСреза, Состояние = &Состояние) КАК СостояниеОборудованияСрезПоследних
ПО (СостояниеОборудованияСрезПоследних.ИнвНомер = ОстаткиТоваровОстатки.ИнвНомер)


Мужики, дай бог Вам и Вашим близким всего.
20 ДенисЧ
 
12.07.20
04:55
Во, хороший, годный студент.
Мне нравится ))
21 Chameleon1980
 
12.07.20
05:05
все сходится: хороший студент - мертвый студент
22 СвинТуз
 
12.07.20
11:10
(19)
Для начало круто
Но за это
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеОборудования.СрезПоследних(

Тоже по ушам можно
23 DeadStudent
 
12.07.20
18:00
(22) Почему? Вполне возможно я что-то не правильно понимаю механизмы внутри данного фреймворка. По мне, так тоже получается логично, добавили значение из среза последних, там он хранит состояние по последнему изменению, не делая выборку из всего регистра сведений.

Наконец то понял основную ошибку свою, мне надо было в измерениях Указать только ИнвНомер, а было указано и состояние, поэтому срез последних выдавал все записи. Сейчас сделал инвномер измерением, состояние ресурсом и о чудо...заработало....срез последних по дате.
24 ДенисЧ
 
12.07.20
18:08
(23) СрезПоследних - это виртуальная таблица.
А в последних веяниях от 1с левые соединения с виртуальными таблицами - моветон.
Лучше в временную таблицу...
25 DeadStudent
 
12.07.20
18:13
Странно, лучше выборка из кучи записей, чем получение их из виртуальной таблицы, где они в принципе и так есть....эмм...не совсем понимаю логику наверно
26 DeadStudent
 
12.07.20
18:14
Если я правильно понял, то лучше сделать выборку из всего регистра по максимальной дате....но в таком случае объем данных, который надо перебрать будет больше, что по идее...по моим представлениям...более ресурсоемкое занятие
27 Chameleon1980
 
12.07.20
18:28
ты можешь первую (левую таблицу положить в вт)
потом выбрать срез последних в тч с условием по первой вт и положить результат во вторую вт
итого у тебя две вт
а вот третьим пакетом соединяй
читатт книгу уже начал?
28 DeadStudent
 
12.07.20
18:33
Нет, книгу пока только скачал и глазами пробежал, сегодня надо переделать конфигурацию немного, чтоб убрать состояние из регистра накопления. После этого уже начну читать.

У меня эти полтора месяца как в тумане, очень быстро приходится учить и много читать, потому что не зная 1с сделать конфигурацию для учета оборудования немного сложная задачка.((( Поэтому до книги я обязательно доберусь в очень скором времени.
29 DeadStudent
 
12.07.20
18:35
Ну и конфигурацию делаю оптимизированную под мобильный и веб клиент. Пока сложности с передачей и хранением файлов при клиент-серверном подключении, но при толстом клиенте работает и пока норм, мне надо просто файл эксель грузить и разбирать в ТЧ.
Ну и долго мучался с формирование qr кода для печати наклеек на принтере этикеток с инвентарным номером.
30 DeadStudent
 
12.07.20
18:37
Еще очень сильно интересует xdto, а то разбираю хмл через чтение xml и простой поиск параметров, видел курс по нему, может в ближайшие неделю-две гляну