Имя: Пароль:
1C
1С v8
v8: УПП Мистика существует? Движения записываются через-раз
0 Homer
 
23.08.11
09:38
8.2.13.219
При переходе на 8.2 автоматом поставилось в константах ведение  Регистра СвободныеОстатки.
Для документа Требование есть подписка при проведении (моя). В ней двигается рег. ПартииТоваровНаСкладахБухгалтерскийУчет (добавляем движение для забалансового счета).
Если открыть документ и провести его 2 раза подряд (не закрывая док) то движение отчищается, при следующем перепроведении дока движение появляется. В итоге через раз идет очистка движения ПартииТоваровНаСкладахБухгалтерскийУчет, если же документ проводить в списки (или зашел в документ провел, вышел, зашел провел) то все ок.
вот в этом месте идет очистка
//        Если ИспользоватьРегистрСвободныеОстатки И
           Материалы.Количество() <> 0
           И НЕ Отказ Тогда
           Если глЗначениеПеременной("ИспользоватьБлокировкуДанных")  Тогда
               Движения.СвободныеОстатки.БлокироватьДляИзменения = Истина;
           КонецЕсли;
           Движения.Записать();
           РегистрыНакопления.СвободныеОстатки.КонтрольОстатков(
               "Материалы", СтруктураШапкиДокумента, Отказ, Заголовок, РежимПроведения);
       КонецЕсли;
//

почему то при выполнении данного кода
Движения.Записать();
он перезаписывает Рег ПартииТоваровНаСкладахБухгалтерскийУчет через раз.
1 Мимохожий Однако
 
23.08.11
09:41
У тебя в коде два раза есть строка Движения.Записать()
2 Homer
 
23.08.11
09:44
вот код подписки

//////
Если ТипЗнч(Источник.Ссылка) = Тип("ДокументСсылка.ТребованиеНакладная") Тогда
       Если Источник.забаланс и Источник.ОтражатьВБухгалтерскомУчете Тогда
           НаборДвижений = Источник.Движения.Хозрасчетный;
           НаборДвижений.Прочитать();
           ТаблицаДвижений = НаборДвижений.Выгрузить();
           СчетЗабаланс=ПланыСчетов.Хозрасчетный.НайтиПоКоду("013");
           НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
           НаборЗаписей.Отбор.Регистратор.Установить(Источник.Ссылка);
           Для Каждого ТекущаяСтрока Из ТаблицаДвижений Цикл
               Движение = НаборЗаписей.Добавить();
               Движение.СчетДт                  = СчетЗабаланс;
               Движение.Период                  = ТекущаяСтрока.Период;
               Движение.Регистратор             = ТекущаяСтрока.регистратор;
               Движение.СубконтоДт.Номенклатура = ТекущаяСтрока.СубконтоКт1;
               Движение.СубконтоДт.Склады       = ТекущаяСтрока.СубконтоКт2;
               Движение.КоличествоДт            = ТекущаяСтрока.КоличествоКТ;
               Движение.Сумма                   = ТекущаяСтрока.Сумма;
               Движение.Содержание              = ТекущаяСтрока.Содержание;
               Движение.Организация             = ТекущаяСтрока.Организация;
           КонецЦикла;
           НаборЗаписей.Записать(Ложь);
           
           НаборДвижений = Источник.Движения.ПартииТоваровНаСкладахБухгалтерскийУчет;
           НаборДвижений.Прочитать();
           ТаблицаДвижений = НаборДвижений.Выгрузить();
           ТаблицаДвижений.ЗаполнитьЗначения(СчетЗабаланс, "СчетУчета");
           ТаблицаДвижений.ЗаполнитьЗначения(Перечисления.КодыОперацийПартииТоваров.Оприходование, "КодОперации");
           НаборДвижений.мТаблицаДвижений = ТаблицаДвижений;
           НаборДвижений.ВыполнитьПриход();
           НаборДвижений.Записать();
           
           НаборДвижений = Источник.Движения.ПартииТоваровНаСкладах;
           НаборДвижений.Прочитать();
           НаборДвижений.Очистить();
           
           НаборДвижений = Источник.Движения.ТоварыНаСкладах;
           НаборДвижений.Прочитать();
           НаборДвижений.Очистить();
           
           НаборДвижений = Источник.Движения.ТоварыОрганизаций;
           НаборДвижений.Прочитать();
           НаборДвижений.Очистить();
           
       КонецЕсли;
//////
3 5 Элемент
 
23.08.11
10:22
Уверен, что регистр СвободныеОстатки здесь непричем
4 5 Элемент
 
23.08.11
10:24
Гениально
НаборДвижений.Прочитать();
НаборДвижений.Очистить();
5 SunFox
 
23.08.11
10:27
(0) используй отладчик, чудеса нужно экономить
6 GoldenDawn
 
23.08.11
10:29
(0)на 99 недопонимание
на 1 платформа иногда делает не то что написано
7 rinatru
 
23.08.11
10:44
слишком много Движения.Записать();
для документа запись происходит для всего набора записей, а ты  чистишь, и заново пишешь движения только для конкретного движения по Партиям. разбираться надо тебе самому. а платформа  делает то, что ей скажут, и она не виновата :))) ты сам пришел
8 Homer
 
23.08.11
11:04
а как объяснить вот это?!
Есть документ ПеремещениеТоваров в нем есть подписка
/////
ИначеЕсли ТипЗнч(Источник.Ссылка) = Тип("ДокументСсылка.ПеремещениеТоваров") Тогда
       
       Если Источник.забаланс и Источник.ОтражатьВБухгалтерскомУчете Тогда
           Сообщить("Пишем на забаланс");
           НаборДвижений = Источник.Движения.ПартииТоваровНаСкладах;
           НаборДвижений.Прочитать();
           ТаблицаДвижений = НаборДвижений.Выгрузить();
           СчетЗабаланс=ПланыСчетов.Хозрасчетный.НайтиПоКоду("013");
           НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
           НаборЗаписей.Отбор.Регистратор.Установить(Источник.Ссылка);
           Для Каждого Строчка Из ТаблицаДвижений Цикл
               Если Строчка.ВидДвижения = ВидДвиженияНакопления.Расход Тогда
                   Движение = НаборЗаписей.Добавить();
                   Движение.СчетДт                  = СчетЗабаланс;
                   Движение.Период                  = Источник.Дата;
                   Движение.Регистратор             = Источник.Ссылка;
                   Движение.СубконтоДт.Номенклатура = Строчка.Номенклатура;
                   Движение.СубконтоДт.Склады       = Источник.СкладПолучатель;
                   Движение.КоличествоДт            = Строчка.Количество;
                   Движение.Сумма                   = Строчка.Стоимость;
                   Движение.Организация             = Источник.Организация;
                   
                   Движение = НаборЗаписей.Добавить();
                   Движение.СчетКт                  = СчетЗабаланс;
                   Движение.Период                  = Источник.Дата;
                   Движение.Регистратор             = Источник.Ссылка;
                   Движение.СубконтоКт.Номенклатура = Строчка.Номенклатура;
                   Движение.СубконтоКт.Склады       = Источник.СкладОтправитель;
                   Движение.КоличествоКт            = Строчка.Количество;
                   Движение.Сумма                   = Строчка.Стоимость;
                   Движение.Организация             = Источник.Организация;
               КонецЕсли;    
           КонецЦикла;
           НаборЗаписей.Записать();
           Сообщить("Забаланс записан");
       КонецЕсли;
           
   КонецЕсли;
////
Тут уже проводки пропадают, только мои правда.
Хотя в подписки "ТребованиеНакладная" все проводки остаются.
9 Homer
 
23.08.11
11:20
меня больше бесит, что 1с все унифицирует а на самом деле для каждого события у них свой код. Пусть бы тогда делали процедуры типа ПроведениеПеремещениеТоваров.
10 Homer
 
23.08.11
11:26
(7) если много Движения.Записать(); то почему
"если же документ проводить в списки (или зашел в документ провел, вышел, зашел провел) то все ок."
вот так работает. или тут уже законы Движения.Записать() не действуют ))
11 Homer
 
23.08.11
13:29
апп
12 detec
 
23.08.11
13:32
(0)
1. Форма документа управляемая или обычная?
2. В документе стоит свойство "Удалять движения автоматически"?
13 ptiz
 
23.08.11
13:44
Код в (0) из какого модуля вызывается?
14 tdm
 
23.08.11
13:48
(0) мистики не существует)
поискать еще подписки на события (в конце концов при записи в регистре сделать остановку и через стек вызова поискать откуда обращение идет и т.д.); ну и условия посмотреть внимательнее - раз через раз пишется гдет поразному проверка отрабатывает...может приведенный текст модулей и ни при чем))
15 Homer
 
23.08.11
14:12
(12) 1.обычная.
2.Не удалять автоматически

(13) Модуль Требования
(14) Если бы это было просто я бы посмотрел уже!
16 Homer
 
23.08.11
14:24
(14) Если смотреть движение(точку остановки на Движения.Записать()). То при перепроведении появляется мТаблицаДвижений с моими записями.
17 Lyekka
 
23.08.11
14:25
Мистика существует, но не когда дело заходит о программировании.
18 Homer
 
23.08.11
14:29
Мистика в том что в фоновом режиме документ не глючит, а стоит его открыть и проводить как он начинает себя странно вести
19 Krendel
 
23.08.11
14:42
Заплатите прошлому прогеру зарплату ;-)
20 jump if zero
 
23.08.11
14:43
пример при котором документ может проводиться через раз

свойство
Запись движений при проведении :Записывать выбранные

отсутствие в обработке проведения
Движения.Документ.Записывать=Истина;
21 Homer
 
24.08.11
06:24
(20) Заработало!!! Спасибо)))
22 Homer
 
24.08.11
06:37
Вопрос тогда вот в чем?
У документа Требования стоит очистка регистров
//////
   Если мУдалятьДвижения Тогда
       ОбщегоНазначения.УдалитьДвиженияРегистратора(ЭтотОбъект, Отказ, Истина, РежимПроведения);
   КонецЕсли;
/////
Тогда получается, что ни какой разнице нет, стоит Записывать выбранные или записывать модифицированные?
23 Песец
 
24.08.11
07:10
(10) Потому что при проведении в списке документ-объект пересоздается каждый раз, а в форме один самый первый, при последующих перепроведениях используется старый уже созданный, набор движений сохраняется от предыдущего проведения.
24 Песец
 
24.08.11
07:16
(23)+ Вот тут все в картинках разрисовано:
http://yandex.ru/yandsearch?text=%2213+оши%
D0%B1%D0%BE%D0%BA%2C+%D0%B7%D0%B0+%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D0%B5+%D1%83%D0%B2%D0%BE%D0%BB%D1%8C%D0%BD%D1%8F%D1%8E%D1%82+%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%BE%D0%B2%22&text=11158&lr=11158
25 Homer
 
24.08.11
07:24
На свежую голову сегодня смотрю. Оказывается при очистки регистров у меня остается  Движения.ПартииТоваровНаСкладахБухгалтерскийУчет.Модифицированность() = Истина
Вот сейчас капаю почему
26 Homer
 
24.08.11
13:39
Сделал подписку на регистр, все ОК
//////
Процедура ЗабалансПриЗаписи(Источник, Отказ, Замещение) Экспорт
   Если Источник.Количество()>0 и Источник.Отбор.Регистратор.Значение.Забаланс = Истина и Замещение = Истина Тогда
       СчетЗабаланс=ПланыСчетов.Хозрасчетный.НайтиПоКоду("013");
       СсылкаНаОбъект = Источник.Отбор.Регистратор.Значение;
       мДвижение = РегистрыНакопления.ПартииТоваровНаСкладахБухгалтерскийУчет.СоздатьНаборЗаписей();
       мДвижение.Отбор.Регистратор.Установить(СсылкаНаОбъект);
       Попытка
           Для Каждого ТекСтрока из Источник Цикл
               Движение = мДвижение.Добавить();
               Движение.ВидДвижения            = ВидДвиженияНакопления.Приход;
               Движение.Регистратор            = СсылкаНаОбъект;
               Движение.Период                = ТекСтрока.Период;
               Движение.Организация            = ТекСтрока.Организация;
               Движение.Номенклатура            = ТекСтрока.Номенклатура;
               Движение.ХарактеристикаНоменклатуры = ТекСтрока.ХарактеристикаНоменклатуры;
               Движение.СчетУчета                = СчетЗабаланс;
               Движение.Склад                    = ТекСтрока.Склад;
               Движение.Количество            = ТекСтрока.Количество;
               Движение.Стоимость                = ТекСтрока.Стоимость;
               Движение.КодОперации            = Перечисления.КодыОперацийПартииТоваров.Оприходование;
               Движение.Качество                = ТекСтрока.Качество;
           КонецЦикла;
       Исключение
           Сообщить("забаланс не сработал");
       КонецПопытки;
       мДвижение.Записать(Ложь);
   КонецЕсли;    
//////Эта в модуле документа

С удалением так и не разобрался. Ну это все из за него происходит. 1с-ы наворотили что без бутылке не разберешь.
/////
   Если мУдалятьДвижения Тогда
       ОбщегоНазначения.УдалитьДвиженияРегистратора(ЭтотОбъект, Отказ, Истина, РежимПроведения);
   КонецЕсли;
/////
а дальше песня, я так и не понял чем отличается конструкция

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

может кто скажет?
27 Homer
 
24.08.11
13:41
(26) подписку еще надо допилить под поверки, так что не пинайте))
28 Steel_Wheel
 
24.08.11
13:43
Надо начертить УПП-пентаграмму и вставть в нее, мистика прекратится
29 Homer
 
24.08.11
14:08
все заработало. Я сразу после того как не заработало проверил через набор. у меня не взлетело.
сейчас анализировал и думал почему в подписке на  рег работает а так нет, решил еще попробовать. Заработало

///
       мДвижение = РегистрыНакопления.ПартииТоваровНаСкладахБухгалтерскийУчет.СоздатьНаборЗаписей();
           мДвижение.Отбор.Регистратор.Установить(Источник.Ссылка);
           мДвижение.Прочитать();
           Попытка
               Для Каждого ТекСтрока из мДвижение.Выгрузить() Цикл
                   Движение = мДвижение.Добавить();
                   Движение.ВидДвижения            = ВидДвиженияНакопления.Приход;
                   Движение.Регистратор            = Источник.Ссылка;
                   Движение.Период                = ТекСтрока.Период;
                   Движение.Организация            = ТекСтрока.Организация;
                   Движение.Номенклатура            = ТекСтрока.Номенклатура;
                   Движение.ХарактеристикаНоменклатуры = ТекСтрока.ХарактеристикаНоменклатуры;
                   Движение.СчетУчета                = СчетЗабаланс;
                   Движение.Склад                    = ТекСтрока.Склад;
                   Движение.Количество            = ТекСтрока.Количество;
                   Движение.Стоимость                = ТекСтрока.Стоимость;
                   Движение.КодОперации            = Перечисления.КодыОперацийПартииТоваров.Оприходование;
                   Движение.Качество                = ТекСтрока.Качество;
               КонецЦикла;
           Исключение
               Сообщить("забаланс не сработал");
           КонецПопытки;
           мДвижение.Записать();
30 Homer
 
24.08.11
14:15
в первый раз было типа
///
           НаборДвижений = Источник.Движения.Хозрасчетный;
           НаборДвижений.Прочитать();
           ТаблицаДвижений = НаборДвижений.Выгрузить();
           СчетЗабаланс=ПланыСчетов.Хозрасчетный.НайтиПоКоду("013");
           НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
           НаборЗаписей.Отбор.Регистратор.Установить(Источник.Ссылка);
           Для Каждого ТекущаяСтрока Из ТаблицаДвижений Цикл
               Движение = НаборЗаписей.Добавить();
               Движение.СчетДт                  = СчетЗабаланс;
               Движение.Период                  = ТекущаяСтрока.Период;
               Движение.Регистратор             = ТекущаяСтрока.регистратор;
               Движение.СубконтоДт.Номенклатура = ТекущаяСтрока.СубконтоКт1;
               Движение.СубконтоДт.Склады       = ТекущаяСтрока.СубконтоКт2;
               Движение.КоличествоДт            = ТекущаяСтрока.КоличествоКТ;
               Движение.Сумма                   = ТекущаяСтрока.Сумма;
               Движение.Содержание              = ТекущаяСтрока.Содержание;
               Движение.Организация             = ТекущаяСтрока.Организация;
           КонецЦикла;
           НаборЗаписей.Записать(Ложь);
           НаборДвижений = РегистрыНакопления.ПартииТоваровНаСкладахБухгалтерскийУчет.СоздатьНаборЗаписей();
           НаборДвижений.Отбор.Регистратор.Установить(Источник.Ссылка);
           НаборДвижений.Прочитать();
           ТаблицаДвижений = НаборДвижений.Выгрузить();
           НаборДвижений.Записать();
////
вот так не работало!!!
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший