Имя: Пароль:
1C
1C 7.7
v7: Перенос периодических реквизитов
0 cry_san
 
11.11.13
04:38
Здравствуйте!
Бьюсь уже 2й день, перебрал кучу обработок, но все впустую. Остались только вы.
Вопрос в том как из одной базы перенести в другую справочник так, чтобы перенеслись все периодические реквизиты (их около 20 штук) в полном объеме? В основном реквизиты в справочнике формируются документами. В день может быть до 10 документов. Если переносить обработками или вручную, то берется последний реквизит за день, остальные предыдущие теряются.
Дошел до того, что забил для примера в файл все реквизиты за 1 день. При записи их в новую базу - получаем последний. Стандартная обработка ЗначенияПериодическихРеквизитов показывает только одно значение да данный день, а нужны все.
Условие таково, что нельзя переносить документы, сформировавшие значения периодических реквизитов. Только сами реквизиты.
Надеюсь все правильно объяснил.
Прошу вашей помощи.
1 ДенисЧ
 
11.11.13
05:05
"реквизиты в справочнике формируются документами"
"нельзя переносить документы, сформировавшие значения периодических реквизитов"

Не взлетит.
2 wertyu
 
11.11.13
05:10
я думаю КД
3 cry_san
 
11.11.13
05:15
(2) Можно расшифровать?
4 cry_san
 
11.11.13
05:15
Нашел еще такую вещь: http://kb.mista.ru/article.php?id=89 только пока не знаю, как она может помочь.
5 wertyu
 
11.11.13
05:16
конвертация данных
6 wertyu
 
11.11.13
05:17
+(5) забыл сказать, что фиктивные аналоги исходных документов должны быть
7 cry_san
 
11.11.13
05:19
То есть решение таково, что придется создать документ без проводок, который только запишет периодический реквизит? Пусть так (чехарда побери), но как обойти в цикле всю периодику справочника включая те, что создали документы?
8 ДенисЧ
 
11.11.13
05:29
(7) объект Периодический тебя спасёт
9 cry_san
 
11.11.13
05:43
(8) Не спасет, вот выгрузка в файл

НачальнаяДата = Дата("01.01.1960");
КонечнаяДата = Дата("01.01.2013");

Справочник=СоздатьОбъект("Справочник.ЛицевыеСчета");
Справочник.НайтиПоНаименованию(Наименование);
Подразделение = Справочник.ТекущийЭлемент();
Справочник.ИспользоватьРодителя("Подразделение");
Справочник.ВыбратьЭлементы();

Пока Справочник.ПолучитьЭлемент()=1 Цикл
Если (Справочник.ПометкаУдаления()=0) Тогда

Периодический = СоздатьОбъект("Периодический");
Периодический.ИспользоватьОбъект("", Справочник);
Периодический.ВыбратьЗначения(НачальнаяДата, КонечнаяДата);

Текст = СоздатьОбъект("Текст");

Пока Периодический.ПолучитьЗначение() = 1 Цикл
Стр = Строка(Периодический.ДатаЗнач) +"|"+ Строка(Периодический.ТекущийРеквизит()) +"|"+ Строка(Периодический.Значение);
Текст.ДобавитьСтроку(Стр);
КонецЦикла;

Текст.Записать("d:\"+Код+ ".txt");


КонецЕсли;
КонецЦикла;

выбирает не все реквизиты, толь последний за день
10 Rie
 
11.11.13
05:51
(9) А нескромный вопрос - что в базе-то хранится? 1SCONST (ну, или _1SCONST, ежели SQL) - пробовал непосредственно поглядеть? Может, там и нет никаких "нескольких за день"?
11 Rie
 
11.11.13
05:55
+(10) Для периодических реквизитов время хранится только в том случае, когда значение установлено документом. Поскольку реквизиты устанавливаются документами "в основном", а не "всегда", то картинка может получиться весьма интересной.
12 cry_san
 
11.11.13
05:58
13 Rie
 
11.11.13
06:00
(12) И что тут изображено? Как были получены все эти цифры (и что они означают)?
14 big
 
11.11.13
06:00
(9) не указано имя реквизита в методе ИспользоватьОбъект()

ериодический = СоздатьОбъект("Периодический");
Периодический.ИспользоватьОбъект("АВотТутДолжноБытьИмяРеквизита", Справочник);
Периодический.ВыбратьЗначения(НачальнаяДата, КонечнаяДата);



(10) и чего там увидит ТС? Какие-то непанятные буквы и цифры? ))
15 big
 
11.11.13
06:03
(14) + вдогонку

чтобы выгрузить всё автоматом, надо ещё пройтись по метаданным, чтобы составить перечень перидоческих реквизитов справочника.
16 cry_san
 
11.11.13
06:05
(13) Как были получены? Слева после даты - названия документов. И не все ли равно что они означают - сейчас главное - цифры
17 Rie
 
11.11.13
06:05
(14) Структура 1SCONST - не секрет. Убедится хотя бы в том, что на одну дату у него действительно есть несколько записей (или что только одна запись).
К тому же пока непонятно, как он устаналивает из документа значения этого реквизита. Там ведь тоже варианты возможны.

(9) Кстати, желательно бы выводить ещё и ТекущийДокумент().
18 Rie
 
11.11.13
06:06
(16) Так и какая цифра - периодический реквизит? Или все?
Названия документов - откуда взяты? В (9) ТекущийДокумент() никто не спрашивал ведь.
19 big
 
11.11.13
06:08
(17) 1. О чем ты говоришь? о какой структуре?? ТС не может в трех соснах разобраться, а ты его в ещё дальше в лес загоняешь :)

2. ну, это предмет дальнейших разбирательств
20 wertyu
 
11.11.13
06:09
а куда хоть перенести то надо?
21 Rie
 
11.11.13
06:10
У меня почему-то возникает подозрение, что (раз разрешено ручное изменение периодических реквизитов) после того, как документ установил реквизит - кто-то заходит в справочник и, не задумываясь особо, переустанавает его руками.
22 cry_san
 
11.11.13
06:10
(14) Попробовал, получилось выгрузить. Спасибо за новодку!
23 big
 
11.11.13
06:13
(22) теперь дорабаьыва как указано в (15), используй метод ТекущийДокумент(), узнавай дату номер дока и выгружай. В другой базе будешь документы-пустышки создавать
24 wertyu
 
11.11.13
06:13
(23) а если там не v7?
25 cry_san
 
11.11.13
06:14
(20) В чистую базу.
Вообще такая проблема. Есть основная база, есть база со всеми справочниками, но без документов (но с нужными бух итогами). Нужно в новой базе в справочники занести все данные по реквизитам (включая периодические.)

Аналог: при скрутке базы удаляются документы, и соответственно теряются значения реквизитов - вот этого и нужно избежать
26 cry_san
 
11.11.13
06:16
(24) 1С предприятие 7.7 (7.70.026)
Бухгалтерский учет, редакция 4.2 (7.70.422)
27 wertyu
 
11.11.13
06:19
(25) не удаляются
28 big
 
11.11.13
06:20
тролишь по-тихоньку? :)

(25) Вашпе проблем не вижу. Я надеюсь, что у нужные справочников коды одинаковые? Т.е. по ним можно будет синхронизироваться?
29 cry_san
 
11.11.13
06:24
(28) Я надеюсь, что у нужные справочников коды одинаковые? Да, один в один.
Т.е. по ним можно будет синхронизироваться? Да
30 big
 
11.11.13
06:31
(29) ессно!!
31 cry_san
 
11.11.13
06:34
(30) Вашпе проблем не вижу. - а можете мне раскрыть глаза? В чем именно не видите?
32 wertyu
 
11.11.13
06:40
(31) свёртку делай
33 cry_san
 
11.11.13
06:44
(32) Я ведь говорю. Делается свертка. Все нормально, кроме того, что теряется история периодических реквизитов - она нужна в разрезе (т.е. как было по каждому дню)!
34 wertyu
 
11.11.13
06:45
(33) так сделай исключения в свёртке
35 cry_san
 
11.11.13
06:50
(34) Чхорт. Обработка WRAP.ERT. Где там делать исключение?
36 wertyu
 
11.11.13
06:52
(35) найди где доки удаляются и если они связаны с периодикой просто помечай их на удаление и очищай ТЧ
37 wertyu
 
11.11.13
06:56
+(36) может где ещё и периодика очищается, это тоже несложно найти
38 big
 
11.11.13
08:12
(31) Есть 2 варианта.
1. Используешь УЖЕ имеющуюиеся базы. Т.е. через текстовый файл выгружаешь данные из одной и загружаешь в другую.
2. Ищешь в обработке свертки код, который удаляет историю периодических элементов именно в нужном тебе справочнике и "отключаешь" эту возможность.

ИМХО 2-й способ хуже, т.к. будут переноситься документы, а они будут не пустые. А чтобы была история изменений приодики, надо будет документы провести. А т.к. они непустые, то будут проблемы с остатками и чего там ещё я не знаю. Уж лучше сделать документы-пустышки из первого варианта, чем продумывать логику нейтрализации движений (проводок) ненужных документов.
39 wertyu
 
11.11.13
08:24
(38) в бухии 7.7 движения только по бухучёту, они остатками перенесутся, доки, которые связаны с НДС, ОСами и т.п. остаются, надо только эти добавленные (иначе бы всё свернулось без потерь) исключить
40 cry_san
 
11.11.13
08:27
(38) (39) Спасибо! Буду пробовать.
41 1dvd
 
11.11.13
08:32
Так ли нужна эта периодика? Период же свернут
42 cry_san
 
11.11.13
08:35
(41) Там хранится история оплаты клиента. И на этой периодике завязано много расчетов и отчетов.
43 Морозов Александр
 
11.11.13
08:38
какой ужас... хранить историю платежей в пер. реквизите.
44 1dvd
 
11.11.13
08:40
(43) +1

В общем, сами себе злобные буратины. Периодические реквизиты без привязки к документу хранятся с точностью до Даты (без времени). С привязкой к документу - с точностью до позиции документа
45 КонецЦикла
 
11.11.13
08:40
(43) Могли бы вообще в строке неогр. ддины хранить
46 wertyu
 
11.11.13
08:42
хех, рекомендую поменять способ хранения данных, т.к. и ситуация подвернулась
47 cry_san
 
11.11.13
09:07
(46) Программировал не я. Если менять способ хранения, то проще создать новую конфигурацию, т.к. на этих реквизитах завязано почти все.
48 big
 
11.11.13
12:20
(42) Акуеть как феерично! )))))
49 Classic
 
11.11.13
12:27
(47)
Жесть
50 Ёпрст
 
гуру
11.11.13
12:28
Какие наивные советы..
51 Ёпрст
 
гуру
11.11.13
12:28
в части пометки дока на удаление о оставлениия периодики.
52 Ёпрст
 
гуру
11.11.13
12:31
аутор, если база в дбф, просто сохрани 1sconst до свёртки и потом его подмени в рабочую после свёртки.
Вся периодика останется (даже с битыми ссылками на доки, если ты их не метишь на удаление, а непосредственно выкашиваешь)
53 Classic
 
11.11.13
12:32
(52)
Апасно
54 Ёпрст
 
гуру
11.11.13
12:33
чем ?
Ну можно вообще всю периодику от доков "перевесить" на левый документ.
55 1dvd
 
11.11.13
12:41
(52) А после Выгрузить/Загрузить оно останется?
56 1dvd
 
11.11.13
12:43
(54) +1 Если бы мне было лень разбираться (что скорее всего), то я поступил бы точно также
57 Classic
 
11.11.13
12:45
(55)
Выгрузить/загрузить - то не опасно.
Вот если новая база будет сделана объединением пустой с существующим мдшником - то тогда могут глюки полезть
58 Ёпрст
 
гуру
11.11.13
12:56
(55) останется..
59 Torquader
 
11.11.13
21:28
Смотрим в синтаксис-помощнике объект "Периодический" до посинения, пока не станет понятно, как хранятся несколько реквизитов за день, и что это возможно только при наличии ссылки на документ - конечно - если документы переносить не хочется, то сделайте новый документ, который только и будет устанавливать значение периодического реквизита и просто пропишите созданные документы на временной оси.

Вариант 2 - переписать периодический реквизит на подчинённый справочник - тогда можно будет задать не только дату, но и время смены значения причём независимо от других периодических реквизитов.
60 Torquader
 
11.11.13
21:30
P.P.S. можно создавать ссылки на документы (с помощью ЗначениеИзСтрокиВнтур) без создания самого документа.
61 Torquader
 
11.11.13
21:30
Хранение истории платежей в периодическом реквизите оправдано, только если там хранится текущий долг клиента (так как обычно интересно только последнее значение).
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан