Имя: Пароль:
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
Хранение истории платежей в периодическом реквизите оправдано, только если там хранится текущий долг клиента (так как обычно интересно только последнее значение).