Полная версия этой страницы:
Перенести Движения документа
Конфигурация УПП.
Подскажите пожалуйста методику копирования движений по регистрам одного документа в другой, при условии, что типы обеих документов одинаковые.
Я прочитал все движения одного документа, а как их записать в другой?
alex040269
13.02.13, 9:06
Я всегда предполагал, что каждый док сам создает свои движения при проведении, но если очень хочется, то можно записать через отбор.
набор.отбор.регистратор.установить(докСсылка);
набор.Записать(Истина);
где-то так
Цитата(alex040269 @ 13.02.13, 9:06) необходимо зарегистрироваться для просмотра ссылки
Я всегда предполагал, что каждый док сам создает свои движения при проведении, но если очень хочется, то можно записать через отбор.
набор.отбор.регистратор.установить(докСсылка);
набор.Записать(Истина);
где-то так
Сейчас я выбираю движения документа вот так:
ДокументИсточник = ДокументИсточник.ПолучитьОбъект();
ДокументПриемник = ДокументПриемник.ПолучитьОбъект();
ДвиженияИсточник = ДокументИсточник.Движения;
ДвиженияПриемник = ДокументОбъект.Движения;
Для Каждого НаборЗаписейРегистра из ДвиженияИсточник Цикл
НаборЗаписейРегистра.Прочитать();
а как записать в него новые движения?
maximus, поделитесь, пожалуйста, зачем вам такое делать? А если вы будете проводить и перепроводить документ-приемник, как будут формироваться ваши движения? или это какая-то будет разовая обработка данных?
Цитата(Домовик @ 13.02.13, 10:09) необходимо зарегистрироваться для просмотра ссылки
maximus, поделитесь, пожалуйста, зачем вам такое делать? А если вы будете проводить и перепроводить документ-приемник, как будут формироваться ваши движения? или это какая-то будет разовая обработка данных?
У меня товарищ проходит курсы по программированию 1С и вот там дали такое ДЗ. Мне тоже не совсем ясна логика этого процесса, но интересно)
логика такова, что движений может быть по нескольким регистрам, и вам это нужно учесть
тут пример замены движений в одном регистре Расходной Накладной, имя кот ДОходыИРасходы. код не отлаживался, просто в модуле был набран.поэтому не знаю
ТЗ = Новый ТаблицаЗначений;
//ДокПриемник=Документы.РасходнаяНакладная.СоздатьДокумент();
//ДокИсточник=Документы.РасходнаяНакладная.СоздатьДокумент();
ДвиженияИсточник=Докисточник.Движения;
ДвиженияПриемник=ДокПриемник.Движения;
движенияИсточник.ДоходыиРасходы.Выгрузить(ТЗ);
ТЗ.ЗаполнитьЗначения(ДокПриемник,"Регистратор");
движенияПриемник.ДоходыИРасходы.Загрузить(ТЗ);
в коде определенно есть ошибки. нужно работать с наборами записей. и тогда можно использовать Загрузить(), Выгрузить()
пишу так:
ДокИсточник = ДокументИсточник.ПолучитьОбъект();
ДокПриемник = ДокументПриемник.ПолучитьОбъект();
ТЗ = Новый ТаблицаЗначений;
ДвиженияИсточник=Докисточник.Движения;
ДвиженияПриемник=ДокПриемник.Движения;
Для Каждого НаборЗаписейРегистра из ДвиженияИсточник Цикл
НаборЗаписейРегистра.Выгрузить(ТЗ);
ТЗ.ЗаполнитьЗначения(ДокПриемник,"Регистратор");
движенияПриемник.НаборЗаписейРегистра.Загрузить(ТЗ);
КонецЦикла;
но начинает ругаться на НаборЗаписейРегистра.Выгрузить(ТЗ);
ТЗ = НаборЗаписейРегистра.Выгрузить();
Цитата(Vofka @ 13.02.13, 14:42) необходимо зарегистрироваться для просмотра ссылки
ТЗ = НаборЗаписейРегистра.Выгрузить();
Ошибка ушла - Спасибо!
А как правильно быть в этом куске
движенияПриемник.НаборЗаписейРегистра.Загрузить(ТЗ);
т.к. не находит
Поле объекта не обнаружено (НаборЗаписейРегистра)
движенияПриемник.НаборЗаписейРегистра.Загрузить(ТЗ);
тз=НаборЗаписейРегистра.Выгрузить() это одна из интаксических ошибок )
я просто сомневаюсь, что можно вот так движения редактировать. в синтакс-помощнике на Выгрузить() (РегистрНакопленияНАборЗаписей) есть граммотный код.
не могу сообразить как этот набор движений загрузить в документ приемник?
Цитата(Домовик @ 13.02.13, 14:47) необходимо зарегистрироваться для просмотра ссылки
тз=НаборЗаписейРегистра.Выгрузить() это одна из интаксических ошибок )
я просто сомневаюсь, что можно вот так движения редактировать. в синтакс-помощнике на Выгрузить() (РегистрНакопленияНАборЗаписей) есть граммотный код.
код в помошнике толковый, но там ведь сосдается набор записей движения по конкретному регистру, а мне нужно выбрать все движения...
Цитата(Домовик @ 13.02.13, 14:47) необходимо зарегистрироваться для просмотра ссылки
тз=НаборЗаписейРегистра.Выгрузить() это одна из интаксических ошибок )
Это почему?
Цитата(maximus @ 13.02.13, 14:47) необходимо зарегистрироваться для просмотра ссылки
А как правильно быть в этом куске
Ошибка в том, что НаборЗаписейРегистра - это набор записей источника. В него можно что-то писать или что-то читать. Нельзя через него обратиться к какому-то другому набору записей.
т.е. мне нужно создать второй набор записей по документу приемнику и в этот набор загрузить набор записей с документа ичсточника?
Vofka, моих синтаксических ошибок

. Код от фонаря пишу. ). идею внедрить выгрузить -загрузить хотелось сделать, а кода не знаю.
Цитата(maximus @ 13.02.13, 15:00) необходимо зарегистрироваться для просмотра ссылки
т.е. мне нужно создать второй набор записей по документу приемнику и в этот набор загрузить набор записей с документа ичсточника?
Ну да.
Домовик, а

.
Цитата(Vofka @ 13.02.13, 15:07) необходимо зарегистрироваться для просмотра ссылки
Ну да.
Домовик, а

.
Я прошу прощения конечно, за глупые вопросы, но мне эти действия нужно делать цикл в цикле?
в том-то и сложность. может быть движений по нескольким регистрам. нет, не желательно цикл в цикле . а подыскивать соответсвующий набор приемника набору источника по регистру. но как.
alex040269
13.02.13, 15:15
тз=НаборЗаписейРегистра.Выгрузить();
//изменить тз
набор = РегтистрыЧегото.СоздатьНаборЗаписей();
набор.Загрузить(тз);
//установить отбор
набор.Записать(Истина);
maximus, документы разные? Если да - тогда прописывайте обращения к конкретным регистрам, это же не проблема.
Цитата(Vofka @ 13.02.13, 15:23) необходимо зарегистрироваться для просмотра ссылки
maximus, документы разные? Если да - тогда прописывайте обращения к конкретным регистрам, это же не проблема.
Документы всегда одинаковые
документы разные, тип документов один.
Цитата(maximus @ 13.02.13, 15:25) необходимо зарегистрироваться для просмотра ссылки
Документы всегда одинаковые
К примеру, если брать документ реализация товаров и услуг, то мне обращаться к какждому регистру накопления и сведений? т.е. целым набором залить не получиться?
ДокИсточник = ДокументИсточник.ПолучитьОбъект();
ДокПриемник = ДокументПриемник.ПолучитьОбъект();
ТЗ = Новый ТаблицаЗначений;
ДвиженияИсточник=Докисточник.Движения;
ДвиженияПриемник=ДокПриемник.Движения;
ТЗ = ДвиженияИсточник.ПартииТоваровНаСкладахБухгалтерскийУчет.Выгрузить();
ТЗ.ЗаполнитьЗначения(ДвиженияПриемник,"Регистратор");
ДвиженияПриемник.ПартииТоваровНаСкладахБухгалтерскийУчет.Загрузить(ТЗ);
ДвиженияПриемник.Записать();
После этого вообще в документе приемнике пропадает движение по этому регистру, что не так делаю?
alex040269
13.02.13, 16:49
Цитата(maximus @ 13.02.13, 16:35) необходимо зарегистрироваться для просмотра ссылки
ТЗ.ЗаполнитьЗначения(ДвиженияПриемник,"Регистратор");//регистратор - ссылка на документ
Цитата(maximus @ 13.02.13, 16:35) необходимо зарегистрироваться для просмотра ссылки
т.е. целым набором залить не получиться?
можно перебрать коллекцию.
Значение Регистратора надо-бы поменять
Цитата(alex040269 @ 13.02.13, 16:49) необходимо зарегистрироваться для просмотра ссылки
можно перебрать коллекцию
Для Каждого НаборЗаписейРегистра из Движения Цикл
НаборЗаписейРегистра.Прочитать();
Для Каждого Запись из НаборЗаписейРегистра Цикл
// Чтение и модификация очередного движения.
КонецЦикла;
КонецЦикла;
в том то и беда, что пробовал через коллекцию но не получается...
Цитата(maximus @ 13.02.13, 18:07) необходимо зарегистрироваться для просмотра ссылки
в том то и беда, что пробовал через коллекцию но не получается...
вот как в
ДокИсточник.Движения.ПартииТоваровНаСкладахБухгалтерскийУчет.Прочитать();
вместо явного указания регистра подставить значение коллекции?
Цитата(maximus @ 13.02.13, 12:35) необходимо зарегистрироваться для просмотра ссылки
После этого вообще в документе приемнике пропадает движение по этому регистру, что не так делаю?
если движения, были и исчезли, значит загрузить() срабатывает. загрузить() затирает старые записи и пишет вместо них те, что в тз.
тут еще ошибка механическая была, alex040269 подсказал
Тз.ЗаполнитьЗначения(ДокПриемник,"Регистратор");
из-за этой ошибки в тз регистратор был не заполнен и загрузка не прошла
Цитата(Домовик @ 13.02.13, 21:58) необходимо зарегистрироваться для просмотра ссылки
тут еще ошибка механическая была, alex040269 подсказал
Исправил ошибку, результат тот же(
если загрузить() поставить в условие на проверку количества строк ТЗ, какой результат?
Отладчиком пройтись надо-бы
В итоге добился работоспособности вот таким способом, но опять таки это только по конкретному регистру, буду пытаться залить всю коллекцию)
ДокИсточник = ДокументИсточник.ПолучитьОбъект();
ДокПриемник = ДокументПриемник.ПолучитьОбъект();
ТЗ = Новый ТаблицаЗначений;
ДвиженияИсточник=Докисточник.Движения;
ДвиженияПриемник=ДокПриемник.Движения;
ТЗ = ДвиженияИсточник.ПартииТоваровНаСкладахБухгалтерскийУчет.Выгрузить();
ТЗ.ЗаполнитьЗначения(ДокПриемник,"Регистратор");
ДвиженияПриемник.ПартииТоваровНаСкладахБухгалтерскийУчет.Загрузить(ТЗ);
ДвиженияПриемник.Записать();
Цитата(maximus @ 14.02.13, 9:03) необходимо зарегистрироваться для просмотра ссылки
В итоге добился работоспособности вот таким способом, но опять таки это только по конкретному регистру, буду пытаться залить всю коллекцию)
ДокИсточник.Движения.РасчетыПоРеализацииВУсловныхЕдиницахОрганизации.Прочитать()
;
ДвиженияПриемник = ДокПриемник.Движения.РасчетыПоРеализацииВУсловныхЕдиницахОрганизации;
Для каждого ДвижениеИсточник Из ДокИсточник.Движения.РасчетыПоРеализацииВУсловныхЕдиницахОрганизации Цикл
ДвижениеПриемник = ДвиженияПриемник.Добавить();
ЗаполнитьЗначенияСвойств(ДвижениеПриемник, ДвижениеИсточник);
КонецЦикла;
В итоге добился работоспособности вот таким способом, но опять таки это только по конкретному регистру, буду пытаться залить всю коллекцию)
о переборе наборов "в слепую", без явного задания регистра. работа программы же предсказуема. для одного типа документа в цикле программа обойдет наборы записей регистров в одной и той же последовательности. регистр1, регистр2, регистр3. по источнику и приемнику.
можно обойти циклы, записать наборы в цикле в списокзначенийПриемник и списокзначенийИсточник. потом по индексу обращаться к соотв. наборам.
наборы можно записывать в списки значений?
все же пытаюсь решить эту задачу.
выгрузить() почему-то до конца не работает. В отладчике показывает количество строк ТЗ равно 0. в ТЗ копируется полностью структура -имена измерений, ресурсво, реквизитов.
Пример, который в синтакс-помощнике срабатывает так же, нулевая таблица со структурой тек регистра. с чем это может быть связано? конфигурация УНФ, возможно где-то в свойствах запрет или галка, что записи делать только при проведении дока?
&наСервере
Процедура Команда11()
спИсточник= Новый СписокЗначений;
ДвиженияИсточник=докИсточник.ПолучитьОбъект().движения;
ДвиженияПриемник=ДокПриемник.ПолучитьОбъект().Движения;
счетчик=0;
для каждого НаборЗаписейРегистра из движенияПриемник цикл
ТЗ = ДвиженияИсточник.Получить(счетчик).Выгрузить();
ТЗ.ЗаполнитьЗначения(ДокПриемник,"Регистратор");
НаборЗаписейРегистра.Загрузить(ТЗ);
счетчик=счетчик+1;
КонецПроцедуры
А "ДвиженияИсточник.Получить(счетчик)" в отладчике что показывает? Может вместо "счетчик" стоит использовать имена регистров? (ну или как-то так)
logist, показывает на счетчик= 0 РегистрНакопленияНаборЗаписей. Продажи и далее еще 18 наборов записей регистров ( по движ РасходнаяНакладная). как раз там все нормально.
при явном задании регистра (в синтакс-помощнике пример) точно также формирует пустую таблицу со структурой регистра.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.