Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
12 Дек 2017, 22:55
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: 8.2 обычное приложение, не перезаписывает регистры (Код внутри)  (Прочитано 1690 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн acces969

  • *
  • Сообщений: 16
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2015-12-27
  • Сайт: 
  • Профессия: Программист 1С
Здравствуйте. Не могу понять почему не перезаписываются регистры. Цикл крутится, значение присваивается, но после цикла все становится как было. Системные процедуры "перед записью" пропускают запись... Неужели поле "регистратор" у регистра невозможно перезаписать? Вставьте код у себя, пожалуйста, проверьте... Потому что гуглил я, все что можно сделать - пробовал.

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


Оффлайн 1Cnastroika

Если нужно изменить регистратор у движений документа то создайте новые движения у нужного документа и очистите движения у старого документа.

Оффлайн acces969

  • *
  • Сообщений: 16
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2015-12-27
  • Сайт: 
  • Профессия: Программист 1С
Если нужно изменить регистратор у движений документа то создайте новые движения у нужного документа и очистите движения у старого документа.
Не думаю что такой вариант подойдет. Условие заказчика было изменение записей, а не удаление и создание новых. На случай ошибок в базе - чтобы их ошибки остались их ошибками, а не нашими.

Оффлайн 1Cnastroika

Зачем менять регистратор у движений регистра? Если Вы создадите новые движения точно такие же, как были у старого документа, то клиент даже не будет знать, каким способом Вы решили его задачу.

Оффлайн acces969

  • *
  • Сообщений: 16
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2015-12-27
  • Сайт: 
  • Профессия: Программист 1С
Зачем менять регистратор у движений регистра? Если Вы создадите новые движения точно такие же, как были у старого документа, то клиент даже не будет знать, каким способом Вы решили его задачу.
Тут даже три ответа.
 Во первых, дело принципиальное - лучше изменить существующие, чем пересоздавать. Уж очень сложная эта система, Управление торговым предприятием, а база - сети магазинов поварешек и прочей бытовой утвари, с оборотом по 200 - 300 документов в день. Если не дай бог что будет криво заполнятся, за неделю там столько ошибок будет, что исправить свои косяки будет практически невозможно.
 Тут и во вторых - это моя первое оффициальное задание, у меня недостаточно опыта работы с движениями документов, чтобы уверенно составить план действий в голове.
 Ну и в третьих - не знаю, как будут вести себя движения при создании, если база уже была с ошибками (не хватает товара на складе, а документ проведен был, я создаю движение - копию, а он не создается из за ошибки базы)

Оффлайн Андрей Сисюкин

  • *
  • Сообщений: 21
  • РЕПУТАЦИЯ: 9
  • КПД: 43%
  • Регистрация: 2015-12-17
    • Skype: dark_daedal
  • Сайт: 
  • Профессия: Разработчик 1С
Зачем менять регистратор у движений регистра? Если Вы создадите новые движения точно такие же, как были у старого документа, то клиент даже не будет знать, каким способом Вы решили его задачу.
Тут даже три ответа.
 Во первых, дело принципиальное - лучше изменить существующие, чем пересоздавать. Уж очень сложная эта система, Управление торговым предприятием, а база - сети магазинов поварешек и прочей бытовой утвари, с оборотом по 200 - 300 документов в день. Если не дай бог что будет криво заполнятся, за неделю там столько ошибок будет, что исправить свои косяки будет практически невозможно.
 Тут и во вторых - это моя первое оффициальное задание, у меня недостаточно опыта работы с движениями документов, чтобы уверенно составить план действий в голове.
 Ну и в третьих - не знаю, как будут вести себя движения при создании, если база уже была с ошибками (не хватает товара на складе, а документ проведен был, я создаю движение - копию, а он не создается из за ошибки базы)

1Cnastroika - правиьно ответил(а).
Во-первых, ты пытаешься изменить регистратор в наборе другого документа - заметь это. При запись этого набора - регистратор проставляется этого набора.
Нужно создать -отдельный- набор записей = копия текущего, изменить как хочешь, записать, а старый удалить.

Но вся эта система, которая как бы "не наделать косяков" - вот таким вот способом наделаете кучу. При проведении документа, движения которого переделали, они у него восстановятся и получите копию этих движений...
Нужно какой-то флаг у документов использовать.

По коду: НаборЗаписейРегистра.Прочитать(); - по моему это лишее..

Оффлайн acces969

  • *
  • Сообщений: 16
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2015-12-27
  • Сайт: 
  • Профессия: Программист 1С
"Но вся эта система, которая как бы "не наделать косяков" - вот таким вот способом наделаете кучу. При проведении документа, движения которого переделали, они у него восстановятся и получите копию этих движений...
Нужно какой-то флаг у документов использовать."

Андрей, Спасибо за ваш ответ(подтверждающий совет 1сТastroika, за который ему тоже спасибо). Флаг стоит.
(работа моей обработки такая - реализованные и проведенные документы объединять в одни, группируя по реквизитам, старые оригинальные доки ставить флагом "архивный" и блокировать их изменение, объединенные - тоже самое. И те, и другие документы не проводятся и не снимаются с проводок - их движения должны переходить из архивных в объединенные. Тоесть архивные и обьединенные документы - просто пустышки, не отображающиеся в системе и не доступные для изменения. Цель этого - ускорение работы базы. На данный момент обработка уже готова, осталось только с движениями разобратся. Кстати, коэффициент сжатия количества документов - от 3.5 до 10 раз, так как во всей сети магазинов доки заполняются по шаблону, в качестве контрагента почти всегда выступает частное лицо, а основное различие - "подразделение" и "менеджер")
 Как я уже понял, поменять регистратора у записей невозможно, поэтому на данный момент делаю копирование. И почему то выходит ошибка "не установлен отбор по регистратору", при попытке записи. Подскажите, где подправить код? (регистратор.установить() - не помогает)

ДокИсточник = строка.ссылка.ПолучитьОбъект().Движения;
Для каждого Набор Из ДокИсточник Цикл
  Набор.Прочитать();
       
  НаборТекущегоОбъекта = Движения[Набор.Метаданные().Имя];
       
  Для каждого ЗаписьНабора Из Набор Цикл
   
    НоваяЗапись = НаборТекущегоОбъекта.Добавить();
   НоваяЗапись.Регистратор = ссылкаНаОбъединенныйДокумент;
    НоваяЗапись.Активность  = ЗаписьНабора.Активность;   
  ЗаполнитьЗначенияСвойств(НоваяЗапись, ЗаписьНабора);
           
   
  КонецЦикла;
//  Движения[Набор.Метаданные().Имя].Записать();
  Набор.Записать();
КонецЦикла;
Добавлено: 27 Дек 2015, 18:47

В общем то понятно, почему, и это уже разберусь сам. Но тут есть еще одна проблема. в переменную первой строки попадает значение "РегистрНакопленияНаборЗаписей.ПродажиПоДисконтнымКартам" с таким же типом значения. Я уже пытался раньше форматировать его в строку, отсекая слово "НаборЗаписей", а после строку загнать в "Метаданные.НайтиПоПолномуНаименованию(строка)", но эта функция возвращала не путь, который нужен для второй строки, а прямую ссылку... Я могу ошибатся в выражениях, т.к. не знаю определений, но надеюсь вы меня поняли. Собственно сам вопрос - как решить этот ньюанс?

ИмяРегистра = Движения[Набор.Метаданные().Имя];
НаборТекущегоОбъекта = ИмяРегистра.СоздатьНаборЗаписей();
Добавлено: 27 Дек 2015, 18:56

Подробнее - вот ошибка
{Документ.РеализацияТоваровУслуг.Форма.ОбъединениеДокументов.Форма(962)}: Метод объекта не обнаружен (СоздатьНаборЗаписей)
  НаборТекущегоОбъекта = ИмяРегистра.СоздатьНаборЗаписей();


Вот код

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

Добавлено: 27 Дек 2015, 19:16

Простите за флуд... я бы удалил тут то что намусорил, но помоему редактирование собственных сообщений тут невозможно. Я уже справился и с этим вопросом, ответ вот -
 РегистрыНакопления[Набор.Метаданные().Имя] , и, очевидно, справлюсь и со следующими проблемами. Да простят меня модераторы... Всем спасибо
Добавлено: 27 Дек 2015, 20:41

Рабочий код, передаю потомкам, придущим с гугла

// СОЗДАНИЕ НОВЫХ ЗАПИСЕЙ, УДАЛЕНИЕ СТАРЫХ //////////////////            
ДокИсточник = строка.ссылка.ПолучитьОбъект().Движения;
Для каждого Набор Из ДокИсточник Цикл
  Набор.Прочитать();
             
  попытка
   НаборСоздДока = РегистрыБухгалтерии[Набор.Метаданные().Имя].СоздатьНаборЗаписей(); сообщить("Регистр Бухгалтерии" +НаборСоздДока);
   исключение
  Попытка
  НаборСоздДока = РегистрыНакопления[Набор.Метаданные().Имя].СоздатьНаборЗаписей(); сообщить("Регистр Накопления" + НаборСоздДока);
исключение
  НаборСоздДока = РегистрыСведений[Набор.Метаданные().Имя].СоздатьНаборЗаписей(); сообщить("Регистр Сведений" + НаборСоздДока);
  конецпопытки; конецпопытки;
  НаборСоздДока.Отбор.Регистратор.Установить(ссылкаНаОбъединенныйДокумент);     
  Для каждого ЗаписьНабора Из Набор Цикл
   
    НоваяЗапись = НаборСоздДока.Добавить();
    НоваяЗапись.Активность  = ЗаписьНабора.Активность;   
  ЗаполнитьЗначенияСвойств(НоваяЗапись, ЗаписьНабора,,"регистратор");       
    НоваяЗапись.Регистратор = ссылкаНаОбъединенныйДокумент;
   ЗаписьНабора.Активность = Ложь;
КонецЦикла;
 
 НаборСоздДока.Записать(Ложь);
 Набор.Записать(Истина);
КонецЦикла;

Последний раз редактировалось: acces969; 27 Дек 2015, 20:41. Причина: Объединение сообщений

Оффлайн 1Cnastroika


 Как я уже понял, поменять регистратора у записей невозможно,

Эта строка кода неправильная, но по сути Вы хотели сделать так
    ДокументОбъект.Движения.ОстаткиТоваров.Регистратор = ДругойРегистратор;
Думаю смысл понятен.


Теги:
 

Создание "Мастера ввода" управляемое приложение

Автор saxonРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 2853
Последний ответ 12 Апр 2013, 15:44
от Dethmontt
Управляемое приложение.Как предустановить значение реквизита с Типом "Число".

Автор |R|U|D|E|NРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 7
Просмотров: 6003
Последний ответ 22 Мар 2011, 06:04
от cska-fanat-kz
1c 8.2: управляемое приложение: как вызвать свою процедуру в документе при событии выбора значения из справочника

Автор jhd235Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 1711
Последний ответ 13 Сен 2014, 14:00
от TreeDogNight
8.2 Управляемое Приложение. Сканер ШК Xenon 1902GHD-2 База сканера - CCB01-010BT

Автор VKРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 0
Просмотров: 1784
Последний ответ 04 Май 2012, 11:12
от VK
Управляемое приложение Запрет на создание одинаковых значений в справочнике

Автор ls600Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 2485
Последний ответ 13 Янв 2014, 20:28
от ls600

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
170 Сообщений
ilyay ilyay
75 Сообщений
oleg-x
55 Сообщений
alex0402
49 Сообщений
andron81_81
42 Сообщений
AIFrame
37 Сообщений
MuI_I_Ika MuI_I_Ika
33 Сообщений
BuhRust
30 Сообщений
Golickoff Golickoff
28 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 310
  • Точка Скрытых: 0
  • Точка Пользователей: 4
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal