|
Ручная корректировка записей регистра сведений, созданных документом. | ☑ | ||
|---|---|---|---|---|
|
0
SuperMario
10.03.09
✎
12:27
|
Суть задачи- дать возможность вручную корректировать записи регистра сведений, которые изначально записал документ при проведении.
Регистр сведений независимый и непериодический. В данный момент при проведении документа создаются записи регистра. Ест-но при перепроведении все убивается. Стирать их нужно, но только если удалили строку в мн. части документа для этой записи. Какие идеи могут возникнуть в ваших светлых головах? |
|||
|
1
Mitriy
10.03.09
✎
12:29
|
залезть в обработку ОбработкаУдаленияПроведения...
|
|||
|
2
Mitriy
10.03.09
✎
12:31
|
(1)+ или в ПередЗаписью, или ПриЗаписи... Где записи создаются, в общем...
|
|||
|
3
SuperMario
10.03.09
✎
12:31
|
(1) а если удалять ничего не нужно, а только изменить содержимое записи?
|
|||
|
4
GenV
10.03.09
✎
12:32
|
(3) Можно не удалять.
|
|||
|
5
Михаил Козлов
10.03.09
✎
12:33
|
(0) Я бы сделал сторно неверной записи и новую правильную запись документом КорректировкаЗаписейРегистровНакопления.
|
|||
|
6
SuperMario
10.03.09
✎
12:35
|
(5) не пойдет. Потом разбираться мастеру со всеми этими записями долго.
|
|||
|
7
SuperMario
10.03.09
✎
12:36
|
Собственно вот процедура проведения:
ЗапросДвижениеПорегисору = Новый Запрос; ЗапросДвижениеПорегисору.Текст = "ВЫБРАТЬ | ККМ.Модель, | ККМ.Договор, | ККМ.Модификация, | ККМ.Документ, | ККМ.НомерККМ |ИЗ | РегистрСведений.ККМ КАК ККМ |ГДЕ | ККМ.Документ = &ДокументСсылка | И ККМ.Договор = &Договор"; ЗапросДвижениеПорегисору.УстановитьПараметр( "ДокументСсылка",ДокументСсылка); ЗапросДвижениеПорегисору.УстановитьПараметр( "Договор", ДокументСсылка.ДоговорКонтрагента); РезультатЗапроса = ЗапросДвижениеПорегисору.Выполнить(); РегККМ = РегистрыСведений.ККМ.СоздатьНаборЗаписей(); РегККМ.Отбор.Документ.Установить ( ДокументСсылка ); Если РезультатЗапроса.Пустой() Тогда // нет движений по регистру. Создаем их... Для Каждого СтрокаТаблицы из Таб Цикл ТипНоменклатуры = СтрокаТаблицы.Номенклатура.ВидНоменклатуры.ТипНоменклатуры; Если ТипНоменклатуры = Перечисления.ТипыНоменклатуры.ККМ Тогда ЗаписьРегистра = РегККМ.Добавить(); ЗаписьРегистра.Документ = ДокументСсылка; ЗаписьРегистра.Модель = СтрокаТаблицы.Номенклатура; ЗаписьРегистра.ДатаВводаВЭксплуатацию = ДокументСсылка.дата; ЗаписьРегистра.Договор = ДокументСсылка.ДоговорКонтрагента; ЗаписьРегистра.Модификация = СтрокаТаблицы.Модификация; ЗаписьРегистра.НомерККМ = СтрокаТаблицы.НомерККМ; ЗаписьРегистра.НомерСтрокиТЧ = СтрокаТаблицы.НомерСтроки; КонецЕсли; КонецЦикла; РегККМ.Записать(); Иначе // запишем только измененные записи СтруктураОтбора = Новый Структура ("Документ", ДокументСсылка); ЗаписьРегистраККМ = РегистрыСведений.ККМ.Выбрать( СтруктураОтбора ); Для Каждого СтрокаТаблицы из Таб Цикл ЗаписьРегистраККМ.Следующий(); Если ( СтрокаТаблицы.Номенклатура = ЗаписьРегистраККМ.Модель ) и ( СтрокаТаблицы.Модификация = ЗаписьРегистраККМ.Модификация ) и ( СтрокаТаблицы.НомерККМ = ЗаписьРегистраККМ.НомерККМ ) и ( СтрокаТаблицы.НомерСтроки = ЗаписьРегистраККМ .НомерСтрокиТЧ ) Тогда Продолжить; Иначе МенеджерЗаписиККМ = ЗаписьРегистраККМ.ПолучитьМенеджерЗаписи(); МенеджерЗаписиККМ.Модель = СтрокаТаблицы.Номенклатура; МенеджерЗаписиККМ.ДатаВводаВЭксплуатацию = ДокументСсылка.дата; МенеджерЗаписиККМ.Договор = ДокументСсылка.ДоговорКонтрагента; МенеджерЗаписиККМ.Модификация = СтрокаТаблицы.Модификация; МенеджерЗаписиККМ.НомерККМ = СтрокаТаблицы.НомерККМ; МенеджерЗаписиККМ.Записать(); КонецЕсли; КонецЦикла; КонецЕсли; |
|||
|
8
Mitriy
10.03.09
✎
12:37
|
(3) если регистр независимый, значит все делается вручную, в коде прописано, что удалять, чего не удалять... свои правила прописать надо, и все...
|
|||
|
9
SuperMario
10.03.09
✎
12:39
|
(8) не получается изменить запись пока. См. (7)
Вот условие Если ( СтрокаТаблицы.Номенклатура = ЗаписьРегистраККМ.Модель ) и ( СтрокаТаблицы.Модификация = ЗаписьРегистраККМ.Модификация ) и ( СтрокаТаблицы.НомерККМ = ЗаписьРегистраККМ.НомерККМ ) и ( СтрокаТаблицы.НомерСтроки = ЗаписьРегистраККМ .НомерСтрокиТЧ ) Тогда Т.е. есил запись была изменена, то получаю ее менеджера и меняю. Но ест ькосяк. он добавляет запись, а не изменяет ее :( |
|||
|
10
Aprobator
10.03.09
✎
12:55
|
(7) РегККМ.Отбор.Документ.Установить ( ДокументСсылка );
РегККМ.Прочитать(); // получили записи регистра сделаные данным доком ТЗЗаписей = РегККМ.Выгрузить(); // получили таблицу записей по ней удобнее делать поиск Если ЗаписьНайдена, то кооректируем нужную строку Иначе НоваяСтрока = ТЗЗаписей.Добавить(); РегККМ.Загрузить(ТЗЗаписей); РегККМ.Записать(); |
|||
|
11
Aprobator
10.03.09
✎
13:06
|
(7) сдается мне что в ЗаписьРегистраККМ = РегистрыСведений.ККМ.Выбрать( СтруктураОтбора ); легкий бардачок в структуре отбора.
Вот это требование выполняется (выдержка из СП): В качестве полей для отбора могут задаваться измерения или реквизиты, для которых в конфигураторе признак индексирования установлен в значение "Индексировать" или установлен признак "Ведущее". Важно! Структура может содержать только один элемент. |
|||
|
12
Михаил Козлов
10.03.09
✎
13:08
|
Виноват: просмотрел, что это независимый РС.
|
|||
|
13
SuperMario
10.03.09
✎
13:10
|
(11) если для измерения Документ не поставить "Индексировать" , то он вообще отбор не делает. Пишет ошибку в параметре "1" метода Выбрать()
|
|||
|
14
Aprobator
10.03.09
✎
13:16
|
(13) тады странно. Вообще надо смотреть отладчиком, что у тебя попадает в МенеджерЗаписиККМ. И еще, а где проверка что ЗаписьРегистраККМ.Следующий() = Истина? Вообще см. 10. В данном случае это удобнее (на мой взгляд).
|
|||
|
15
SuperMario
10.03.09
✎
14:29
|
(14) ,да тут ошибка. Если строку добавить новую, то вылетит. Сейчас исправлю.
|
|||
|
16
SuperMario
10.03.09
✎
14:52
|
Морока, если порядок строк поменяли в таличной части дока. Вот думаю, может какой другой способ есть? Что то навеяло на меня из 7.7 ТиС. Как у них справочник партий зделан с регом портии наличие и отданные. Уродство, кончно. Но очень хочется разделить движение документа и корректировку ручную.
|
|||
|
17
GenV
10.03.09
✎
14:58
|
(16) Для этого и перепроводят документы, а не корректируют вручную.
ЗЫ Здается мне у тебя неправильный механизм проведения или хранения данных в ТЧ изначально. |
|||
|
18
SuperMario
10.03.09
✎
15:04
|
(17) тут ты прав. Но заказчик, как всегда, тоже прав. Поэтому нужно делать финт ушами.
Заносить данные по дате изготовления товара, марке пломбы, прошивке, типу насоса, процессору и прочей ерунды в документе мастер по ремонту не хочет (да и не должен). В тоже время создать первоначальную запись по привязке товара к контрагенту заказчик хочет именно в момент проведения. |
|||
|
19
GenV
10.03.09
✎
15:09
|
(18) Привязку как определяете, куда/кто заносит? Не проще не давать человеку заносящему привязку не менять уже занесенные данные, а только привязку. Или сохранять списанные ТМЦ (полученные из движений перед их очисткой) и проверять при списании на соответствие.
|
|||
|
20
SuperMario
10.03.09
✎
15:17
|
Привязка идет: товар+ номер + модификация. Эти данные заносятся документом.
Все остальное мастер руками. Что было понятно. Регистр ККМ. Измерения: Товар, модификация, серийный номер. Ресурсы: тип процессора, адрес установки, прошивка, тип насоса, модель насоса и т.д. Мастер редактиирует эти данные на форме элемента контрагента (для его интерфейса создал специально). Там висит элемент формы табличное поле, связянное с РегистрСведенийСписок. |
|||
|
21
SuperMario
10.03.09
✎
15:18
|
(20)+ соответственно данные по модели , модификации и номеру он уже видит.
|
|||
|
22
GenV
10.03.09
✎
15:23
|
(20) Т.е. документом делуются движения по ККМ без учета ресурсов и серии. Потом мастер детализирует эти данные и меняет проведение соотв. документа?
ЗЫ Как вариант: в документе сделать ТЧ с подробными данными, краткое заполнение первоночально, подробное мастером: обработкой по ТЗ с данными из док-ов и перезаписью их ТЧ-ей и проведением измененных документов. |
|||
|
23
SuperMario
10.03.09
✎
15:45
|
(22) да
ЗаписьРегистра.Документ = ДокументСсылка; ЗаписьРегистра.Модель = СтрокаТаблицы.Номенклатура;// измерение ЗаписьРегистра.ДатаВводаВЭксплуатацию = ДокументСсылка.дата; // измерение ЗаписьРегистра.Договор = ДокументСсылка.ДоговорКонтрагента; // измерение ЗаписьРегистра.Модификация = СтрокаТаблицы.Модификация; // измерение ЗаписьРегистра.НомерККМ = СтрокаТаблицы.НомерККМ; // измерение "подробное мастером: обработкой по ТЗ с данными из док-ов и перезаписью их ТЧ-ей и проведением измененных документов." А кто-нить дату запрета поставит и приехали :-( |
|||
|
24
GenV
10.03.09
✎
15:54
|
(23)
1) Дата запрета главным образом на изменение движений должна ставится ... 2) Какая разница чем менять движения документов в закрытом периоде? А если их захотят перепровести и данные детализации сбросятся? Проще правильно настроить права у пользователей и запретить интерактивное редактирования документов, если уже введена детализация в документ. ЗЫ Это самый правильный и безопасный вариант. ИМХО. |
|||
|
25
SuperMario
10.03.09
✎
20:20
|
И все- таки решил написать свою процедуру проведения с сохранением записей регистра.
|
|||
|
26
SuperMario
16.03.09
✎
09:12
|
Отказался от (25)
Решение таково: Регистр ККМ зделал подчиненным регистратору. Создал документ "ЗаписьРегистраККМ". Создал форму документа идентичную форме записи регистра, когда он не был подчинен. Теперь у записи рега ККМ есть ссылка! В табличной части документа, который должен делать первоначальное заполнение, создал реквизит - ссылку на документ : "ЗаписьРегистраККМ". При записи документ заполняет необходимые поля. Далее мастер попадает в журнал этих документов и вызывает форму документа, а не записи рега и дозаполняет все остальные поля. Внешне формы практически совпадают. В итоге схема такая: РеализацияТоваровИУслуг --> ЗаписьРегистраККМ --> строка записи регистра ККМ. |
|||
|
27
i-rek
16.03.09
✎
09:14
|
А чё б не сделать как в типовых ? С галочкой "ручная корректировка" ?
|
|||
|
28
SuperMario
16.03.09
✎
09:17
|
(27) это где ты такую красоту видел?
|
|||
|
29
Snovy
16.03.09
✎
09:23
|
(27) Ручная корректировка - разовая вещь. Не понравились движения документа, взводим флажок и руками правим данные прямо в соответствующих регистрах. После этого проведение документа запрещено. Идея хорошая, но реализация - развод для лохов, простите за грубость...
|
|||
|
30
SuperMario
16.03.09
✎
09:27
|
(28), (29) Хлопцы, а где в УТ есть возможность ручной кореектировки записей регистров?
|
|||
|
31
Snovy
16.03.09
✎
09:28
|
(30) Только в БП...
|
|||
|
32
SuperMario
16.03.09
✎
09:31
|
Понял. Ну примерно представляю о чем идет речь. Даже если разрешить проведение документа после ручной корректировки, то ручная работа потрется вся.
|
|||
|
33
Snovy
16.03.09
✎
09:35
|
(32) Ага. Учитывая, что в БП только на принятии к учету ОС, НДС и на выпусках ГП вываливаются регистры накопления, а во всем оситальном только проводки по плану счетов, то в БП еще имеет право на жизнь "такая" ручная корректировка. Я представляю, если это разрешить в УПП, да и в той же УТ... вся система взорвется через неделю.
|
|||
|
34
SuperMario
16.03.09
✎
09:48
|
Народ, как считаете, рекомендовать (26) в КЗ?
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |