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

Автор Тема: Добавление записей в Регистр Накопления  (Прочитано 28615 раз)

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

Оффлайн Juli1000

  • *
  • Сообщений: 40
  • РЕПУТАЦИЯ: 2
  • КПД: 5%
  • Регистрация: 2009-07-03
  • Сайт: 
Всем здравствуйте! Помогите пожалуйста со следующей проблемой.
Необходимо добавить записи в Регистр Накопления в середине алгоритма с дальнейшей возможностью
использования записанных данных. Традиционный способ:

Движение = Движения.РасположенияТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.НомерПолки = ТекПолка;
и т.д.

не позволил этого сделать. Пробовала использовать метод:

Движения.РасположенияТоваров.Записать();

но возникает ошибка "не установлен Отбор". Можно ли что-то исправить или надо как-то иначе написать?


Оффлайн ППП

  • *
  • Сообщений: 28
  • РЕПУТАЦИЯ: 19
  • КПД: 68%
  • Регистрация: 2009-11-03
  • Сайт: reshit.ru
  • Профессия: Бухгалтер
Может лучше паралельно с записью в регистр накопления сохранять данные в других временных, вспомогательных переменных  для использования в расчетах внутри алгоритма..

Slin
  • Гость
Странно, что не получилось...
Какая ошибка возникает?
можно текст модуля, если небольшой?
или в крайнем случае существенные моменты

Оффлайн Juli1000

  • *
  • Сообщений: 40
  • РЕПУТАЦИЯ: 2
  • КПД: 5%
  • Регистрация: 2009-07-03
  • Сайт: 
ППП, не хочется вдаваться в детали алгоритма, но к сожалению во временных переменных хранить не получится. Я уже думала об этом варианте.
Slin, модуль большой, но кусок, где идёт работа с регистрами следующий:

// освобождение наименее заполненных полок
Для каждого ТекСтрока Из ПодходящиеПолки Цикл
ТекПолка = ТекСтрока.НомерПолки;

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|   РасположенияТоваровОстатки.НомерПолки,
|   РасположенияТоваровОстатки.КоличествоОстаток Как Количество,
|   РасположенияТоваровОстатки.Наименование,
|   РасположенияТоваровОстатки.Артикул
|ИЗ
|   РегистрНакопления.РасположенияТоваров.Остатки КАК РасположенияТоваровОстатки
|ГДЕ
|   РасположенияТоваровОстатки.НомерПолки = &НомерПолки";

Запрос.УстановитьПараметр("НомерПолки", ТекПолка);

Результат = Запрос.Выполнить().Выгрузить();

Для каждого Строка Из Результат Цикл                           
ТекАртикул = Строка.Артикул;
Количество = Строка.Количество;

// функция из глобального модуля, где тоже нужны данные, которые записываю в регистр.               
Размещение = МодульФункцийРазмещения.РазмещениеОборачивоемость(ТекАртикул,Количество);
                     
// Совершаем необходимые для расчётов проводки документов.   
// регистр РасположенияТоваров Приход, добавляем товары на новые полки      
Для Каждого ТекСтрокаРазмещение Из Размещение Цикл
   Движение = Движения.РасположенияТоваров.Добавить();
   Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
   Движение.Период = Дата;
   Движение.НомерПолки = ТекСтрокаРазмещение.НомерПолки;
   Движение.Наименование = ТекНаименование;
   Движение.Артикул = ТекАртикул;
   Движение.Количество = ТекСтрокаРазмещение.Количество;
КонецЦикла;
//Движения.РасположенияТоваров.Записать();         

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

Ошибки:
1. если оставить текст, как сейчас, то ошибку никакую не выдаёт, но в регистр и не записывает, в ВыборкаИзРег нет соответствующей строки;
2. если добавить строку
Движения.РасположенияТоваров.Записать();
после проводки по соответствующему регистру, то ошибка:
{Документ.ДокументНаПеремещение.Форма.ФормаДокумента(253)}: Ошибка при вызове метода контекста (Записать): Ошибка записи! Не установлен отбор по регистратору (Регистр накопления: Расположения товаров).

 

Оффлайн Боня

  • ***
  • Сообщений: 185
  • РЕПУТАЦИЯ: 52
  • КПД: 28%
  • Регистрация: 2008-07-12
  • Сайт: 
Юля, Slin живет в Омске или еще хуже - только он сможет вам ответить.. и то наверно в понедельник. Судя по тому, что мне остальные в асю пишут - все чего-то отмечают ) сори )

Оффлайн Juli1000

  • *
  • Сообщений: 40
  • РЕПУТАЦИЯ: 2
  • КПД: 5%
  • Регистрация: 2009-07-03
  • Сайт: 
Спасибо за информацию :)
Когда я исправлю все ошибки, тоже буду отмечать:)

Оффлайн Admin

  • Администратор
  • *****
  • Сообщений: 260
  • РЕПУТАЦИЯ: 38
  • КПД: 15%
  • Регистрация: 2008-07-10
  • Сайт: forum-1c.ru
  • Профессия: Программист 8.1
А я согласен. Пусть Юля сама на все отвечает.

Ахалай-Махалай! Юля становится Главным модератором!!!
Подпись

Оффлайн Juli1000

  • *
  • Сообщений: 40
  • РЕПУТАЦИЯ: 2
  • КПД: 5%
  • Регистрация: 2009-07-03
  • Сайт: 
Нет, нет, нет! :) Я против! срочно ищу повод "сделать ноги" и дать другим возможность поковыряться в задаче:)

Оффлайн Belgafood

  • **
  • Сообщений: 98
  • РЕПУТАЦИЯ: 17
  • КПД: 17%
  • Регистрация: 2008-07-10
  • Сайт: 
  • Профессия: Ученик 1С
А поздно! Все спать легли! ты остаешься дежурной!
Подпись

Slin
  • Гость
Странная ошибка, скорее всего из-за релиза платформы
у меня вот все работает - при добавление записи регистратор не проставляет, но записывает как положено
Исправляется ошибка просто:
После
Движение = Движения.РасположенияТоваров.Добавить();
Запиши вручную регистратор
Движение.Регистратор = ЭтотОбъект.Ссылка;

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

хотя у меня эта строчка не прокатила, в любом случае посмотри в отладчике перед записью значение
Движения.РасположенияТоваров.Отбор.Регистратор - должен быть этот документ

Ах да, еще
В 8.1 движения записываются автоматически после выполнения процедуры "обработка проведения". Если вы хотите сохранять промежуточные записи, это нужно делать вручную. Впрочем, я думаю, что это уже понятно :)

Последний раз редактировалось: Slin; 12 Дек 2009, 07:07


Теги:
 


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

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

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


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

* Реклама

* Поиск

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

* Реклама

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

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

Геннадий ОбьГЭС Геннадий ОбьГЭС
166 Сообщений
ilyay ilyay
75 Сообщений
oleg-x
56 Сообщений
alex0402
46 Сообщений
andron81_81
44 Сообщений
AIFrame
36 Сообщений
MuI_I_Ika MuI_I_Ika
33 Сообщений
BuhRust
28 Сообщений
Golickoff Golickoff
28 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

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

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal