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

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

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

Оффлайн acces969

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

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


Оффлайн 1Cnastroika

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

Оффлайн acces969

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

Оффлайн 1Cnastroika

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

Оффлайн acces969

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

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

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

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

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

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

Оффлайн acces969

  • *
  • Сообщений: 11
  • РЕПУТАЦИЯ: 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
Просмотров: 2544
Последний ответ 12 Апр 2013, 15:44
от Dethmontt
Управляемое приложение.Как предустановить значение реквизита с Типом "Число".

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

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

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

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

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

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

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

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

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

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

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


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

* Реклама

* Поиск

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

* Реклама

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

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

oleg-x
122 Сообщений
alex0402
104 Сообщений
Геннадий ОбьГЭС Геннадий ОбьГЭС
73 Сообщений
ilyay ilyay
50 Сообщений
Golickoff Golickoff
49 Сообщений
AIFrame
43 Сообщений
ab30ru
38 Сообщений
wise wise
36 Сообщений
Амал
32 Сообщений
Dethmontt Dethmontt
25 Сообщений

* Кто онлайн

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

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal