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

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

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 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
78 Сообщений
Дмитрий Джей Дмитрий Джей
30 Сообщений
IL2016
30 Сообщений
oooo800
29 Сообщений
antoneus antoneus
25 Сообщений
LexaK
25 Сообщений
DmitriyF DmitriyF
17 Сообщений
Ann_
16 Сообщений
alexandr_ll
14 Сообщений
мадам брошкина
13 Сообщений

* Кто онлайн

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

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal