Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Помогите переделать кодинг (http://forums.kuban.ru/f1040/pomogite_peredelat-_koding-2114760.html)

andre2011 26.01.2012 09:40

Помогите переделать кодинг
 
Написал обработку по копированию регистров накоплений..
а теперь не могу ее до конца "добить", надо из БУ в НУ учет движения документа копировать. То что я сделал Клонирует пока только

andre2011 26.01.2012 09:41

Процедура КнопкаВыполнитьНажатие(Кнопка)

ОбъектКопирования = Документ1.ПолучитьОбъект();

Если Документ2.Пустая() Тогда
НовыйДок = Документы.КорректировкаЗаписейРегистров.СоздатьДокумент();
НовыйДок.Дата = ТекущаяДата();
НовыйДок.Записать();
Документ2 = НовыйДок.Ссылка;
Иначе
НовыйДок = Документ2.ПолучитьОбъект();
КонецЕсли;

НовыйДок.Ответственный = ОбъектКопирования.Ответственный;
НовыйДок.Комментарий = "Скопирован обработкой!!!";
НовыйДок.ИспользоватьЗаполнениеДвижений = ОбъектКопирования.ИспользоватьЗаполнениеДвижений;

НовыйДок.ТаблицаРегистровНакопления.Загрузить(ОбъектКопирования.ТаблицаРегистровНакопления.Выгрузить());
НовыйДок.ТаблицаРегистровСведений.Загрузить(ОбъектКопирования.ТаблицаРегистровСведений.Выгрузить());
НовыйДок.ЗаполнениеДвижений.Загрузить(ОбъектКопирования.ЗаполнениеДвижений.Выгрузить());
// Загрузить(ОбъектКопирования.Подразделения.Выгрузить());

Для каждого Набор Из ОбъектКопирования.Движения Цикл

Набор.Прочитать();
Если Набор.Количество() = 0 Тогда
Продолжить;
КонецЕсли;

Сообщить(Набор.Метаданные().Имя);

НаборТекущегоОбъекта = НовыйДок.Движения[Набор.Метаданные().Имя];

Для каждого ЗаписьНабора Из Набор Цикл

НоваяЗапись = НаборТекущегоОбъекта.Добавить();
НоваяЗапись.Активность = ЗаписьНабора.Активность;
Если Лев(ТипЗНЧ(НаборТекущегоОбъекта),18) = "Регистр накопления" Тогда
Если НаборТекущегоОбъекта.Метаданные().ВидРегистра = Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Остатки Тогда
НоваяЗапись.ВидДвижения = ЗаписьНабора.ВидДвижения;
//НоваяЗапись.ВидРегистраНакопления="ПартииМатериаловВЭксплуатацииНалоговыйУчет";
КонецЕсли;
КонецЕсли;
НоваяЗапись.Период = ТекущаяДата();

Для каждого Измерение Из Набор.Метаданные().Измерения Цикл
НоваяЗапись[Измерение.Имя] = ЗаписьНабора[Измерение.Имя];
КонецЦикла;
Для каждого Ресурс Из Набор.Метаданные().Ресурсы Цикл
НоваяЗапись[Ресурс.Имя] = ЗаписьНабора[Ресурс.Имя];
КонецЦикла;
Для каждого Реквизит Из Набор.Метаданные().Реквизиты Цикл
НоваяЗапись[Реквизит.Имя] = ЗаписьНабора[Реквизит.Имя];
КонецЦикла;

КонецЦикла;

НаборТекущегоОбъекта.Записать();

КонецЦикла;

НовыйДок.Записать();

КонецПроцедуры

newuser 26.01.2012 10:44

щас "они" чай попьют......

VZ 26.01.2012 11:21

2-Andre2011 > Ну и нафига грязь рамазывать? В смысле, плодить сущности, затрудняющее текст?
Получил [em]ОбъектКопирования[/em]? Прекрасное название переменной. Продолжай в том же духе:
Если Не Документ2.Пустая() Тогда
//Здесь неплохо предупредить юзера, что документ попортиться может...
ОбъектЗаписи = Документ2.ПолучитьОбъект();
Иначе
ОбъектЗаписи = Документы.КорректировкаЗаписейРегистров.СоздатьДок умент();
//И сразу все, что отличается в шапке:
ОбъектЗаписи.Дата = ТекущаяДата();
ОбъектЗаписи.Ответственный = ....
КонецЕсли;
//Все остальные реквизиты копируем из ОбъектаКопирования
//P.S потом хорошо оформить циклом через метаданные ;)
//А записать уже в конце

Вот оформи текст, чтоб глаза не ломал. Читать тяжело очень.

andre2011 26.01.2012 11:48

Спасибо! подскажите как в коде поменять чтобы получился из БУ -> НУ
это мне важнее всего в цикле

Helen 1986 26.01.2012 12:50

крутые кодеры пошли на 1це

вот за такое на 1це и плюютцца

VZ 26.01.2012 12:58

5-Andre2011 > Ты документ зачем вводишь/изменяешь? Он регистратор для записей регистра? Может, проще после создания/изменения регистратора записать его с проведением? Нет?

andre2011 26.01.2012 13:54

VZ> Ну я так понимаю мне просто проще. Документ ввожу потому что надо скопировать со всему движениями по регистру.

andre2011 26.01.2012 13:54

VZ> Да, он регистратор для записей регистра

andre2011 26.01.2012 13:55

Ответ так и не услышал ))) подскажите как в коде поменять чтобы получился из БУ -> НУ
это мне важнее всего в цикле

Странный аттрактор 26.01.2012 13:58

6-Helen 1986 >То ли дело - Хелен: сразу бородатой родилась..

andre2011 26.01.2012 14:20

Для каждого ЗаписьНабора Из Набор Цикл

НоваяЗапись = НаборТекущегоОбъекта.Добавить();
Если Найти(нрег(ТипРегистра),"накопления")<>0 Тогда
Если МетаданныеРегистра.ВидРегистра = Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Остатки Тогда
НоваяЗапись.ВидРегистра = ПартииМатериаловВЭксплуатацииНалоговыйУчет.Добавить();
НоваяЗапись.ВидДвижения = ЗаписьНабора.ВидДвижения;
КонецЕсли;
ЗаполнитьЗначенияСвойств(НоваяЗапись, ЗаписьНабора,,"Период,Регистратор,ВидДвижения")
Иначе
ЗаполнитьЗначенияСвойств(НоваяЗапись, ЗаписьНабора,,"Период,Регистратор")
КонецЕсли;
НоваяЗапись.Период = ТекущаяДата();
КонецЦикла;
КонецЕсли;
КонецЦикла;
// код взят из стандартной УПП - создание документа корректировка записей регистров

andre2011 26.01.2012 14:39

кто нибудь подскажет все же..................... как в коде поменять чтобы получился из БУ -> НУ
это мне важнее всего в цикле

VZ 26.01.2012 14:40

8-Andre2011 > Не надо проще. Тем более для конфы. Не надо вырывать у нее из зубов то, что она прекрасно делает сама. Например, заносит в регистр сведения из документа.
Сделал документ? Ну так остановись. Просто запиши с опцией проведения. Оно само сообразит, какой регистр брать, и что туда писать.
В модуле документа все прописано.

andre2011 26.01.2012 14:53

дело в том что задача - есть документы корректировка регистра накоплений набитые, они огромные мне надо обработкой скопировать проведенные из БУ в НУ. то есть точно такой же документ сделать но превратить в НУ. А в коде пока у меня получается только тупо клонировать

andre2011 26.01.2012 15:15

последний штрих - превратить при клонирование БУ в НУ не могу сделать...

andre2011 27.01.2012 10:45

//НоваяЗапись.ВидРегистраНакопления="ПартииМатериало вВЭксплуатацииНалоговыйУчет"; вот вместо этой именно строки надо сделать взаимнооднозначное переприсвоение рег.накоплений и сделать из БУ -> НУ, ну подскажите люди, как???

andre2011 06.02.2012 13:50

ну все, вроде код готов!!! (все заработало, переделано все с самого начала!)

профи - посмотрите, что еще можно переделать для оптимизации???

andre2011 06.02.2012 13:51

Процедура КнопкаВыполнитьНажатие(Кнопка)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПартииМатериаловВЭксплуатацииБухгалтерскийУчет.Период,
| ПартииМатериаловВЭксплуатацииБухгалтерскийУчет.Активность,
| ПартииМатериаловВЭксплуатацииБухгалтерскийУчет.ВидДвижения,
| ПартииМатериаловВЭксплуатацииБухгалтерскийУчет.Организация,
| ПартииМатериаловВЭксплуатацииБухгалтерскийУчет.Подразделение,
| ПартииМатериаловВЭксплуатацииБухгалтерскийУчет.СчетУчета,
| ПартииМатериаловВЭксплуатацииБухгалтерскийУчет.Номенклатура,
| ПартииМатериаловВЭксплуатацииБухгалтерскийУчет.ХарактеристикаНоменклатуры,
| ПартииМатериаловВЭксплуатацииБухгалтерскийУчет.СерияНоменклатуры,
| ПартииМатериаловВЭксплуатацииБухгалтерскийУчет.ДокументПередачи,
| ПартииМатериаловВЭксплуатацииБухгалтерскийУчет.ФизЛицо,
| ПартииМатериаловВЭксплуатацииБухгалтерскийУчет.НазначениеИспользования,
//| ПартииМатериаловВЭксплуатацииБухгалтерскийУчет.СкладПолучатель,
| ПартииМатериаловВЭксплуатацииБухгалтерскийУчет.Количество,
| ПартииМатериаловВЭксплуатацииБухгалтерскийУчет.Стоимость,
| ПартииМатериаловВЭксплуатацииБухгалтерскийУчет.ПогашеннаяСтоимость,
| ПартииМатериаловВЭксплуатацииБухгалтерскийУчет.КодОперации,
| ПартииМатериаловВЭксплуатацииБухгалтерскийУчет.СписаниеПартий,
| ПартииМатериаловВЭксплуатацииБухгалтерскийУчет.ДокументДвижения,
| ПартииМатериаловВЭксплуатацииБухгалтерскийУчет.ДокументДвиженияПериод,
| ПартииМатериаловВЭксплуатацииБухгалтерскийУчет.НомерКорСтроки,
| ПартииМатериаловВЭксплуатацииБухгалтерскийУчет.МоментВремени
|ИЗ
| РегистрНакопления.ПартииМатериаловВЭксплуатацииБухгалтерскийУчет КАК ПартииМатериаловВЭксплуатацииБухгалтерскийУчет
|ГДЕ
| ПартииМатериаловВЭксплуатацииБухгалтерскийУчет.Регистратор = &Регистратор";
Запрос.УстановитьПараметр("Регистратор", Документ);
ТаблицаРасхода = Запрос.Выполнить().Выгрузить();
Если ТаблицаРасхода.Количество() = 0 Тогда
Сообщить("Регистр ПартииМатериаловВЭксплуатацииБухгалтерскийУчетОстатки - пуст. Документ Корректировка записей регистра - не создан.");
Возврат;
КонецЕсли;

ТаблицаДвижений = Новый ТаблицаЗначений();
ТаблицаДвижений.Колонки.Добавить("ВидДвижения");
ТаблицаДвижений.Колонки.Добавить("Период");
ТаблицаДвижений.Колонки.Добавить("Организация");
ТаблицаДвижений.Колонки.Добавить("Подразделение");
ТаблицаДвижений.Колонки.Добавить("Номенклатура");
ТаблицаДвижений.Колонки.Добавить("СчетУчета");
ТаблицаДвижений.Колонки.Добавить("ФизЛицо");
ТаблицаДвижений.Колонки.Добавить("НазначениеИспользования");
ТаблицаДвижений.Колонки.Добавить("ХарактеристикаНоменклатуры");
ТаблицаДвижений.Колонки.Добавить("СерияНоменклатуры");
ТаблицаДвижений.Колонки.Добавить("ДокументПередачи");
ТаблицаДвижений.Колонки.Добавить("Количество", ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15,3));
ТаблицаДвижений.Колонки.Добавить("Стоимость", ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15,2));
ТаблицаДвижений.Колонки.Добавить("ПогашеннаяСтоимостьПР", ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15,3));
//ТаблицаДвижений.Колонки.Добавить("СуммаБезНДС", ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15,2));
Если ТаблицаРасхода.Количество() > 0 Тогда
Попытка
НачатьТранзакцию();

Для каждого Стр из ТаблицаРасхода Цикл

ДвиженияДокумента = ТаблицаДвижений.Добавить();
ДвиженияДокумента.ВидДвижения = Стр.ВидДвижения;
ДвиженияДокумента.Организация = Стр.Организация;
ДвиженияДокумента.Подразделение = Стр.Подразделение;
ДвиженияДокумента.Номенклатура = Стр.Номенклатура;
ДвиженияДокумента.СчетУчета = Стр.СчетУчета;
ДвиженияДокумента.ФизЛицо = Стр.ФизЛицо;
ДвиженияДокумента.НазначениеИспользования = Стр.НазначениеИспользования;
ДвиженияДокумента.Период = Документ.Дата;
ДвиженияДокумента.ХарактеристикаНоменклатуры = Стр.ХарактеристикаНоменклатуры;
ДвиженияДокумента.СерияНоменклатуры = Стр.СерияНоменклатуры;
ДвиженияДокумента.ДокументПередачи = Стр.ДокументПередачи;
ДвиженияДокумента.Стоимость = Стр.Стоимость;
ДвиженияДокумента.Количество = Стр.Количество;
ДвиженияДокумента.ПогашеннаяСтоимостьПР = Стр.ПогашеннаяСтоимость;
//ДвиженияДокумента.СуммаБезНДС = Стр.СуммаБезНДСОстаток;

КонецЦикла;
//Если Стр.Корректировки <> Неопределено И Стр.найденныйДляФормирования = Неопределено Тогда
ДокументКорректировкаЗаписейРегистровНакопления = Документы.КорректировкаЗаписейРегистров.СоздатьДокумент();
ДокументКорректировкаЗаписейРегистровНакопления.Дата = Документ.Дата;
ДокументКорректировкаЗаписейРегистровНакопления.Комментарий ="Создание копии документа";
ДокументКорректировкаЗаписейРегистровНакопления.УстановитьНовыйНомер();
СтрокаРегистра = ДокументКорректировкаЗаписейРегистровНакопления.ТаблицаРегистровНакопления.Добавить();
СтрокаРегистра.Имя = "ПартииМатериаловВЭксплуатацииНалоговыйУчет";
СтрокаРегистра.Представление = "Партии материалов в эксплуатации (Налоговый учет)";
Ф = ДокументКорректировкаЗаписейРегистровНакопления.ПолучитьФорму("ФормаДокумента");
Имя = ДокументКорректировкаЗаписейРегистровНакопления.Движения.ПартииМатериаловВЭксплуатацииНалоговыйУчет.Метаданные().Имя;
ПолеРегистра = Ф.ЭлементыФормы.Добавить(Тип("ТабличноеПоле"), Имя, Истина, Ф.ЭлементыФормы.ПанельРегистров);
ПолеРегистра.Данные = "ДокументОбъект.Движения.ПартииМатериаловВЭксплуатацииНалоговыйУчет";
Движение = ПолеРегистра.Значение;
Движение.Загрузить(ТаблицаДвижений);
ТаблицаДвижений.Очистить();

ДокументКорректировкаЗаписейРегистровНакопления.Записать();


ЗафиксироватьТранзакцию();
Сообщить("Создан документ Корректировка записей регистров № " + ДокументКорректировкаЗаписейРегистровНакопления.Номер);
Исключение
ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки());
ОтменитьТранзакцию();
КонецПопытки;
КонецЕсли;

КонецПроцедуры


Текущее время: 06:57. Часовой пояс GMT +3.