Имя: Пароль:
1C
1С v8
Корректировка значений документа
,
0 REDANGER
 
04.06.17
21:31
Всем добрый вечер. Делаю небольшую конфигурацию, есть Документы: "Ввод в эксплуатацию", при проведении которого то или иное оборудование вводится в эксплуатацию
и "Акты выверки технических характеристик", который необходим для того, чтобы в случае ошибок (неправильно указали кол-во какой-то составляющей итд)  в документе "Ввод в эксплуатацию" можно было бы их исправить(например добавить составляющую оборудования или исправить какое-то значение) и занести изменения.
Нужно это для того, чтобы в отчете было видно какие корректировки были осуществлены за опред. период
Подскажите, пожалуйста, как это лучше реализовать?

Спасибо!
1 cw014
 
05.06.17
08:04
Документ + Регистр сведений с данными об изменениях. Документ первоначальный не трогай, лучше подтягивай в форму данные по срезу регистра
2 REDANGER
 
05.06.17
09:34
Это для формирования отчета или для формирования документа Акты выверки?
3 REDANGER
 
05.06.17
09:51
Если можно немножко подробнее объясните
4 Мимохожий Однако
 
05.06.17
09:56
(3) Создай регистр сведений периодический, в котором храни контролируемые  реквизиты документа.
Посмотри в синтаксис помощнике .СоздатьМенеджерЗаписи()
5 REDANGER
 
05.06.17
12:10
Спасибо за совет. Пробую делать через НаборЗаписей след. образом:

В ОбработкеПроведения документа ВВод в эксп.:

НаборЗаписей = РегистрыСведений.ИзменениеСоставаГазопровода.СоздатьНаборЗаписей();
    Для Каждого ТекСтрокаСоставГазопровода Из СоставГазопровода Цикл
        НоваяЗапись = НаборЗаписей.Добавить();
        НоваяЗапись.Газопроводы = Наименование;
        НоваяЗапись.НаименованиеСоставляющей = ТекСтрокаСоставГазопровода.Наименование;
        НоваяЗапись.Материал = ТекСтрокаСоставГазопровода.Материал;
        НоваяЗапись.Исполнение = ТекСтрокаСоставГазопровода.Исполнение;
        НоваяЗапись.Диаметр = ТекСтрокаСоставГазопровода.Диаметр;
        НоваяЗапись.Количество = ТекСтрокаСоставГазопровода.Количество;
        НоваяЗапись.Период = Дата;
    КонецЦикла;
    
        НаборЗаписей.Записать(Истина);

А в ОбработкеДокумента АктВыверки код в принципе тот же:
    
НаборЗаписей = РегистрыСведений.ИзменениеСоставаГазопровода.СоздатьНаборЗаписей();
    Для Каждого ТекСтрокаСоставГазопровода Из СоставГазопровода Цикл
        НоваяЗапись = НаборЗаписей.Добавить();
        НоваяЗапись.Газопроводы = Наименование;
        НоваяЗапись.НаименованиеСоставляющей = ТекСтрокаСоставГазопровода.Наименование;
        НоваяЗапись.Материал = ТекСтрокаСоставГазопровода.Материал;
        НоваяЗапись.Исполнение = ТекСтрокаСоставГазопровода.Исполнение;
        НоваяЗапись.Диаметр = ТекСтрокаСоставГазопровода.Диаметр;
        НоваяЗапись.Количество = ТекСтрокаСоставГазопровода.Количество;
        НоваяЗапись.Период = Дата;
    КонецЦикла;
    
        НаборЗаписей.Записать(Истина);

В итоге при проведении документов в регистр записываются данные того документа, который проводился последним.
Как сделать чтобы при проведении "Акта Выверки" записи которые совпадают оставались, а если не совпадают то заменялись? Это нужно сделать с помощью условия или как-то еще?
6 Альбатрос
 
05.06.17
12:12
СоздатьМенеджерЗаписи()
СоздатьНаборЗаписей()

Найди 5 отличий.
7 REDANGER
 
05.06.17
12:24
Ну да отличий много:) попробовал сделать через МенеджерЗаписи теперь в Регистр при проведении добавляется только одна запись
8 Альбатрос
 
05.06.17
12:26
(7) А тебе сколько записей надо?
9 REDANGER
 
05.06.17
12:26
Хотя в ТЧ документа строк больше
10 Альбатрос
 
05.06.17
12:26
(9) Показывай новый код
11 dezss
 
05.06.17
12:28
(5) с помощью условия.
12 REDANGER
 
05.06.17
12:29
ОбработкаПроведения ВводВЭксплуатацию
    МенеджерЗаписи = РегистрыСведений.ИзменениеСоставаГазопровода.СоздатьМенеджерЗаписи();
    Для Каждого ТекСтрокаСоставГазопровода Из СоставГазопровода Цикл
        МенеджерЗаписи.Газопроводы = Наименование;
        МенеджерЗаписи.НаименованиеСоставляющей = ТекСтрокаСоставГазопровода.Наименование;
        МенеджерЗаписи.Материал = ТекСтрокаСоставГазопровода.Материал;
        МенеджерЗаписи.Исполнение = ТекСтрокаСоставГазопровода.Исполнение;
        МенеджерЗаписи.Диаметр = ТекСтрокаСоставГазопровода.Диаметр;
        МенеджерЗаписи.Количество = ТекСтрокаСоставГазопровода.Количество;
        МенеджерЗаписи.Период = Дата;
    КонецЦикла;    
    
        МенеджерЗаписи.Записать(Истина);

ОбработкаПроведения АктВыверки:

МенеджерЗаписи = РегистрыСведений.ИзменениеСоставаГазопровода.СоздатьМенеджерЗаписи();
    Для Каждого ТекСтрокаСоставГазопровода Из СоставГазопровода Цикл
        МенеджерЗаписи.Газопроводы = Наименование;
        МенеджерЗаписи.НаименованиеСоставляющей = ТекСтрокаСоставГазопровода.Наименование;
        МенеджерЗаписи.Материал = ТекСтрокаСоставГазопровода.Материал;
        МенеджерЗаписи.Исполнение = ТекСтрокаСоставГазопровода.Исполнение;
        МенеджерЗаписи.Диаметр = ТекСтрокаСоставГазопровода.Диаметр;
        МенеджерЗаписи.Количество = ТекСтрокаСоставГазопровода.Количество;
        МенеджерЗаписи.Период = Дата;
    КонецЦикла;    
    
        МенеджерЗаписи.Записать(Истина);
13 Альбатрос
 
05.06.17
12:31
МенеджерЗаписи.Записать(Истина); внутрь цикла
14 REDANGER
 
05.06.17
12:34
Нет, ничего не изменилось, также по одной записи
15 Serg_1960
 
05.06.17
12:35
(офф)
Примеров, когда существуют "пары" документ-источник и на его основании документы-изменения, в типовых конфигурациях превеликое множество. Например, в ЗУПе практически все документы кадрового движения и первоначальные расчетные документы.

Ещё раз: если нужно не только изменить данные, но и "зафиксировать" момент изменения - есть смысл делать это документом. Даже если этот документ изменяет записи только с одного регистра.

Имхо.
16 REDANGER
 
05.06.17
15:54
Да мне в принципе не особо важно каким образом реализовать, главное сделать..через МенеджерЗаписи так и не вышло..а если с помощью документа то каким образом?
У меня в принципе документ АктВыверки создается на основании Ввода в экспл-цию. Нужно работать с обработчиком заполнения? или как-то иначе?
17 REDANGER
 
05.06.17
18:51
Скажите, каким образом сделать через документ? Я искал решение, но чтото подобного не нашел
Или может условие добавить нужно при применении МенеджераЗаписей?
18 REDANGER
 
05.06.17
18:52
Мне уже хоть какоето решение бы найти...все никак не выходит
19 REDANGER
 
05.06.17
19:55
Вот такой код пишу..что не так?

    НаборЗаписей = РегистрыСведений.ИзменениеСоставаГазопровода.СоздатьНаборЗаписей();
    Для Каждого ТекСтрокаСоставГазопровода Из СоставГазопровода Цикл
        НаборЗаписей.Отбор.Газопроводы.Установить(Наименование);
        НаборЗаписей.Отбор.НаименованиеСоставляющей.Установить(ТекСтрокаСоставГазопровода.Наименование);
        НаборЗаписей.Отбор.Материал.Установить(ТекСтрокаСоставГазопровода.Материал);
        НаборЗаписей.Отбор.Исполнение.Установить(ТекСтрокаСоставГазопровода.Исполнение);
//        НаборЗаписей.Отбор.Диаметр.Установить(ТекСтрокаСоставГазопровода.Диаметр);
//        НаборЗаписей.Отбор.Количество.Установить(ТекСтрокаСоставГазопровода.Количество);
        
        НоваяЗапись = НаборЗаписей.Добавить();
        НоваяЗапись.Газопроводы = Наименование;
        НоваяЗапись.НаименованиеСоставляющей = ТекСтрокаСоставГазопровода.Наименование;
        НоваяЗапись.Материал = ТекСтрокаСоставГазопровода.Материал;
        НоваяЗапись.Исполнение = ТекСтрокаСоставГазопровода.Исполнение;
        НоваяЗапись.Диаметр = ТекСтрокаСоставГазопровода.Диаметр;
        НоваяЗапись.Количество = ТекСтрокаСоставГазопровода.Количество;
        НоваяЗапись.Период = Дата;
        НаборЗаписей.Записать();

    КонецЦикла;

Пишет: Запись не верна! Значение отбораа не соответствует установленному отбору
20 Мимохожий Однако
 
05.06.17
20:10
Забыл НаборЗаписей.Прочитать()
21 h-sp
 
05.06.17
21:32
(18) сделай периодический регистр сведений. с периодичностью, например, секунда. И подчиненный регистратору укажи.