Форум программистов, компьютерный форум, киберфорум
Наши страницы
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
mirina313
1 / 1 / 0
Регистрация: 04.11.2013
Сообщений: 62
1

Добавление записи регистра накопления

22.02.2019, 12:48. Просмотров 1458. Ответов 19
Метки нет (Все метки)

Доброго времени суток!
Подскажите, как программно заполнить регистр "Продажи по дисконтным картам" с помощью внешней обработки.
Допустим такими данными как во вложении

Есть примерные коды, но я не смыслю в 1С:
Кликните здесь для просмотра всего текста

Не по теме:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Процедура МодификацияЗаписейРегистраНакопления()
 
    ВыбДок = Документы.ПоступлениеТоваровУслуг.Выбрать();
    Если ВыбДок.Следующий() Тогда
        Набор =
            РегистрыНакопления.НДСПредъявленный.СоздатьНаборЗаписей();
        Набор.Отбор.Регистратор.Установить(ВыбДок.Ссылка);
        Набор.Прочитать();
 
        // изменение существующих записей
        Для Каждого Движение Из Набор Цикл
            Движение.НДС = 0;
        КонецЦикла;
 
        // добавление новых записей
        Движение = Набор.ДобавитьРасход();
        Движение.НДС = 100;
        Движение.Период = ТекущаяДата();
 
        Движение = Набор.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
        Движение.НДС = 300;
        Движение.Период = ТекущаяДата();
 
        // удаление существующих записей
        Набор.Удалить(0);
 
        Набор.Записать(Истина);
    КонецЕсли;
 
КонецПроцедуры



Кликните здесь для просмотра всего текста

Не по теме:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
НаборЗаписей=РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();
 
    Запрос=Новый Запрос;
    Запрос.Текст=
      "ВЫБРАТЬ
     |    ТоварыНаСкладах.Период как Период,
     |    ТоварыНаСкладах.Регистратор как Регистратор,
     |    ТоварыНаСкладах.Количество как Количество
     |ИЗ
     |    РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
     | ГДЕ 
     | ТоварыНаСкладах.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
     |И  ТоварыНаСкладах.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг ";
     
     Запрос.УстановитьПараметр("ДатаНачала", НачПериода);
     Запрос.УстановитьПараметр("ДатаОкончания", КонПериода);
     
     Результат=Запрос.Выполнить();
     Выборка=Результат.Выбрать();
     Пока Выборка.Следующий() Цикл
           НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
          НаборЗаписей.Прочитать();
          Для каждого движ из НаборЗаписей Цикл
            Движ.Количество=5;
          КонецЦикла;
            НаборЗаписей.Записать();
     КонецЦикла;

0
Миниатюры
Добавление записи регистра накопления  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2019, 12:48
Ответы с готовыми решениями:

Выборка из регистра накопления
Вообщем надо сделать конфигурацию для библиотеки. Надо сделать так чтобы на форме где...

Запрос по реквизиту регистра накопления в 8.0
Вообщем ситуация простая: необходимо переписать типовой отчет "Остатки товаров" так как в регистре...

Доступ к ресурсу регистра накопления
Есть регистр накопления ОбъектыУКлиентов у него несколько измерений и ресурс длительность делаю...

Как из регистра накопления получить стоимость для расх. накладной?
Добрый день подскажите пожалуйста как из регистра накопления с ресурсами "Количество и сумма"...

Как из Регистра Накопления взять обороты только за один месяц
Всем добрый вечер) У кого есть свободное время,помогите мне пожалуйста с несложным вопросом. Как...

19
mirina313
1 / 1 / 0
Регистрация: 04.11.2013
Сообщений: 62
22.02.2019, 12:54  [ТС] 2
Ут 10.3
0
SonicQ
283 / 183 / 18
Регистрация: 20.02.2012
Сообщений: 918
22.02.2019, 15:28 3
mirina313, так же как и в ваших примерах
1C
1
2
3
4
5
6
7
8
        Набор = РегистрыНакопления.НДСПредъявленный.СоздатьНаборЗаписей();
        Набор.Отбор.Регистратор.Установить(СсылкаНаДокумент);
        Набор.Прочитать();
        // далее добавляете записи
        НоваяСтрока = Набор.Добавить();
        // заполняете строку
        // потом записываете
        Набор.Записать();
1
mirina313
1 / 1 / 0
Регистрация: 04.11.2013
Сообщений: 62
22.02.2019, 16:54  [ТС] 4
Из всего вышесказанного я дошла до этого момента
1C
1
2
3
4
5
6
7
8
        Набор = РегистрыНакопления.ПродажиПоДисконтнымКартам.СоздатьНаборЗаписей();
        Набор.Отбор.Регистратор.Установить(Регистр); //Регистр = ДокументСсылка.КорректировкаЗаписейРегистров
        Набор.Прочитать();
        // далее добавляете записи
        НоваяСтрока = Набор.Добавить(); 
        // заполняете строку
        // потом записываете
        Набор.Записать();
А как заполнить "строку" ?
Я в 1с ничего не понимаю практически...

Добавлено через 27 минут
А при таком раскладе ругается:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    Набор = РегистрыНакопления.ПродажиПоДисконтнымКартам.СоздатьНаборЗаписей();
    Набор.Отбор.Регистратор.Установить(Регистр); //Регистр = ДокументСсылка.КорректировкаЗаписейРегистров
    Набор.Прочитать();
    // далее добавляете записи
    
карта = ИнформационнаяКарта;
владелец = ВладелецДисконтнойКарты;
сумма = Сумма;
 
    НоваяСтрока = Набор.Добавить();
    НоваяСтрока.Период = ТекущаяДата();
    НоваяСтрока.ДисконтнаяКарта = карта;
    НоваяСтрока.ВладелецДисконтнойКарты = владелец;
    НоваяСтрока.Сумма = сумма;
    // заполняете строку
    // потом записываете
    Набор.Записать();
1C
1
2
3
4
{ВнешняяОбработка.ВнешняяОбработка2.Форма.Форма.Форма(19)}: Ошибка при вызове метода контекста (Записать)
    Набор.Записать();
по причине:
Ошибка записи! Не установлен отбор по регистратору (Регистр накопления: Продажи по дисконтным картам)
0
22.02.2019, 16:54
mirina313
1 / 1 / 0
Регистрация: 04.11.2013
Сообщений: 62
25.02.2019, 11:29  [ТС] 5
Не пойму как установить отбор по данному регистратору
0
Миниатюры
Добавление записи регистра накопления  
polax
933 / 610 / 205
Регистрация: 16.01.2015
Сообщений: 2,154
25.02.2019, 11:59 6
mirina313, Это обычный документ. Так что отбор как и по любому другому регистратору. Что конкретно не получается (код)?
1
mirina313
1 / 1 / 0
Регистрация: 04.11.2013
Сообщений: 62
25.02.2019, 12:13  [ТС] 7
polax,
При таком алгоритме, добавляется новая строка в уже созданный документ корректировки записей регистров, и то строка задваивается почему-то
Кликните здесь для просмотра всего текста
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ПродажиПоДисконтнымКартам.Регистратор
                   |ИЗ
                   |    РегистрНакопления.ПродажиПоДисконтнымКартам КАК ПродажиПоДисконтнымКартам";
                   
    Выборка = Запрос.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() Цикл
    //    
    Набор = РегистрыНакопления.ПродажиПоДисконтнымКартам.СоздатьНаборЗаписей();
    //    
    Набор.Отбор.Регистратор.Установить(Выборка.Регистратор);
    //    
    Набор.Прочитать();
    НоваяСтрока = Набор.Добавить();
    НоваяСтрока.Период = ТекущаяДата();
    НоваяСтрока.ДисконтнаяКарта = ВыборКарты; //Справочник.ИнформационныеКарты
    НоваяСтрока.ВладелецДисконтнойКарты = ВыборВладельцаКарты; //Справочник.Контрагенты
    НоваяСтрока.Сумма = ВводСуммыКарты; //ПолеВвода
        Набор.Записать()
1C
1
 
А при таком
Кликните здесь для просмотра всего текста
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
карта = ИнформационнаяКарта;
владелец = ВладелецДисконтнойКарты;
сумма = Сумма;
 
    Набор = РегистрыНакопления.ПродажиПоДисконтнымКартам.СоздатьНаборЗаписей();
    Набор.Отбор.Регистратор.Установить(Регистр); //Регистр = ДокументСсылка.КорректировкаЗаписейРегистров
    Набор.Прочитать();
    НоваяСтрока = Набор.Добавить();
    НоваяСтрока.Период = ТекущаяДата();
    НоваяСтрока.ДисконтнаяКарта = карта;
    НоваяСтрока.ВладелецДисконтнойКарты = владелец;
    НоваяСтрока.Сумма = сумма;
    Набор.Записать();

Ошибка записи! Не установлен отбор по регистратору (Регистр накопления: Продажи по дисконтным картам)

Добавлено через 5 минут
Почему не устанавливается регистратор "ДокументСсылка.КорректировкаЗаписейРегистров" ?
0
polax
933 / 610 / 205
Регистрация: 16.01.2015
Сообщений: 2,154
25.02.2019, 12:36 8
Цитата Сообщение от mirina313 Посмотреть сообщение
При таком алгоритме, добавляется новая строка в уже созданный документ корректировки записей регистров, и то строка задваивается почему-то
Конечно строка добавляется вы же прямо указываете
Цитата Сообщение от mirina313 Посмотреть сообщение
НоваяСтрока = Набор.Добавить();
Если надо корректировать запись, то ищите (или задаете) конкретный док регистратор
и не добавляете строку а корректируете найденную
Здесь как добавить запись
Как найти и добавить запись здесь
Найти запись можно как выше можно запросом с отбором по номеру карты, клиенту и т.п.

Добавлено через 1 минуту
Цитата Сообщение от mirina313 Посмотреть сообщение
Набор.Отбор.Регистратор.Установить(Регистр); //Регистр = ДокументСсылка.КорректировкаЗаписейРегистров
А это неверно. Регистратор - это ссылка на конкретный док а не на его тип значения
1
mirina313
1 / 1 / 0
Регистрация: 04.11.2013
Сообщений: 62
25.02.2019, 13:03  [ТС] 9
polax,
Да нет, цель создавать новую (следующую по номеру) "корректировку записей регистров" и уже в ней добавлять строку с данными... а выходит создать только в той, которую найдет запрос =\

Регистратор - это ссылка на конкретный док а не на его тип значения
Я не пойму как сделать эту самую ссылку?
Я делала через "реквизит-тип"
0
polax
933 / 610 / 205
Регистрация: 16.01.2015
Сообщений: 2,154
25.02.2019, 13:14 10
mirina313, Если надо новую запись, то сначала надо создать документ Корректировка (программно).
Посмотрите последнюю ссылку и последний пример "Как создать записи регистра накопления без привязки к документу в 1с 8.3, 8.2"
Это ваш вариант, только адаптируйте к своему регистру и документу
0
mirina313
1 / 1 / 0
Регистрация: 04.11.2013
Сообщений: 62
25.02.2019, 15:31  [ТС] 11
Получилось реализовать в таком формате, как вы считаете - это "гавнокод"?
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
НовыйДокумент = Документы.КорректировкаЗаписейРегистров.СоздатьДокумент();
НовыйДокумент.Ответственный = ПараметрыСеанса.ТекущийПользователь;
НовыйДокумент.Комментарий = "Обработка";
НовыйДокумент.Дата = ТекущаяДата();
СтрокаТЧ = НовыйДокумент.ТаблицаРегистровНакопления.Добавить();
СтрокаТЧ.Имя = "ПродажиПоДисконтнымКартам";
СтрокаТЧ.Представление = "ПродажиПоДисконтнымКартам";
НоваяСтрока = НовыйДокумент.Движения.ПродажиПоДисконтнымКартам.Добавить();
НоваяСтрока.Период = ТекущаяДата ();
НоваяСтрока.Активность = Истина;
НоваяСтрока.ДисконтнаяКарта = ДисконтнаяКарта;
НоваяСтрока.Сумма = Сумма;
НовыйДокумент.Записать();
0
polax
933 / 610 / 205
Регистрация: 16.01.2015
Сообщений: 2,154
25.02.2019, 15:34 12
mirina313, Мое мнение - нормальный код. Я бы сделал точно так же. Но я не профессионал. Главное работает и сделано не через ... ))))
1
mirina313
1 / 1 / 0
Регистрация: 04.11.2013
Сообщений: 62
25.02.2019, 15:43  [ТС] 13
polax,
Теперь хочу попробовать сделать добавление записей по картам в определенный номер документа "корректировки записей регистров".
При первом запуске обработка добавляет документ к.з.р. с определенным номером и добавляет в него запись,
а если документ с к.з.п. с данным номером уже имеется, то обработка только добавляет запись строки в этот документ.
Для этого, я так понимаю мне нужно будет указать регистратор - номер документа ?

Набор.Отбор.Регистратор.Установить (ссылка); в скобках должна быть ссылка, вопрос как ее указать?
0
polax
933 / 610 / 205
Регистрация: 16.01.2015
Сообщений: 2,154
25.02.2019, 15:48 14
Цитата Сообщение от mirina313 Посмотреть сообщение
Набор.Отбор.Регистратор.Установить (ссылка); в скобках должна быть ссылка, вопрос как ее указать?
Да. Здесь должна быть ссылка на конкретный документ. Найти можно (вариант) Запрос к базе Выбрать первые 1 (далее нужные данные, ссылка из нужного дока) Упорядочить ПО Ссылка.Дата убыв. Выберется последняя запись (если она нужна) ИЛИ запрос с отбором по номеру карты и т.п. Тут вам виднее. Главное, чтобы в итоге была получена ссылка на нужный регистратор
1
mirina313
1 / 1 / 0
Регистрация: 04.11.2013
Сообщений: 62
26.02.2019, 11:34  [ТС] 15
1C
1
2
3
4
5
6
7
8
9
НаборЗаписей = РегистрыНакопления.ПродажиПоДисконтнымКартам.СоздатьНаборЗаписей();
Выборка = Документы.КорректировкаЗаписейРегистров.Выбрать();
Пока Выборка.Следующий() Цикл                                
    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Период = ТекущаяДата ();
    НоваяЗапись.Регистратор = Выборка.Ссылка;
    НоваяЗапись.Сумма = 123;
КонецЦикла;
НаборЗаписей.Записать(Ложь);
Ошибка
1C
1
2
3
4
{ВнешняяОбработка.ВнешняяОбработка6.Форма.Форма.Форма(11)}: Ошибка при вызове метода контекста (Записать)
НаборЗаписей.Записать(Ложь);
по причине:
Ошибка записи! Не установлен отбор по регистратору (Регистр накопления: Продажи по дисконтным картам)
Почему не устанавливается отбор по регистратору?

Добавлено через 54 минуты
Есть вот такой рабочий, интересный вариант но по какому принципу он выбирает регистратор мне не понятно...
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
       Выборка = Документы.КорректировкаЗаписейРегистров.Выбрать();
       Выборка.Следующий();
       Документ = Выборка.Ссылка;
  
       НаборЗаписей=РегистрыНакопления.ПродажиПоДисконтнымКартам.СоздатьНаборЗаписей();
       НаборЗаписей.Отбор.Регистратор.Установить(Документ);
       НаборЗаписей.Прочитать();
       
       НоваяЗапись = НаборЗаписей.Добавить();
       НоваяЗапись.Период = ТекущаяДата();
       НоваяЗапись.ДисконтнаяКарта = Карта;    
       НоваяЗапись.Сумма = 100000;
       
       НаборЗаписей.Записать();
0
Yulunga
393 / 284 / 72
Регистрация: 22.04.2013
Сообщений: 1,778
Записей в блоге: 1
Завершенные тесты: 1
26.02.2019, 12:11 16
Цитата Сообщение от mirina313 Посмотреть сообщение
Выборка = Документы.КорректировкаЗаписейРегистров.Выбрать();
это, как нетрудно догадаться, ВЫБОРКА.
то есть сколько-то документов. типа массива.
а штобе перейти к первому из них - надо написать выборка.следующий()
тогда мы переместимся к первому.
если надо ко второму - ещё раз пишем выборка.следующий()
поэтому в рабочем варианте - есть конкретный документ. а в вашем - массив
1
mirina313
1 / 1 / 0
Регистрация: 04.11.2013
Сообщений: 62
26.02.2019, 12:41  [ТС] 17
Yulunga, допустим, хочу указать конкретный документ "выделенный" во вложении.
Как мне указать на него?
0
Миниатюры
Добавление записи регистра накопления  
Yulunga
393 / 284 / 72
Регистрация: 22.04.2013
Сообщений: 1,778
Записей в блоге: 1
Завершенные тесты: 1
26.02.2019, 13:06 18
Цитата Сообщение от mirina313 Посмотреть сообщение
Доброго времени суток!
Подскажите, как программно заполнить регистр "Продажи по дисконтным картам" с помощью внешней обработки.
во внешней обработке создать поле с типом вашего конкретного документа ("продажиподисконтнымкартам", "какоетоназваниедокумента", "документпродажи",..... как он у вас называется в общем)

сделать кнопку.
в обработке кнопки брать конкретно вот тот документ, который пользователь выбрал вона в том поле
1
mirina313
1 / 1 / 0
Регистрация: 04.11.2013
Сообщений: 62
26.02.2019, 13:42  [ТС] 19
Yulunga,
Программно указать, без кнопок
0
d_pinchuk
5 / 3 / 2
Регистрация: 21.02.2019
Сообщений: 3
26.02.2019, 14:51 20
Лучший ответ Сообщение было отмечено mirina313 как решение

Решение

mirina313,
1C
1
2
3
4
5
6
7
8
9
10
Указатель = Документы.КорректировкаЗаписейРегистров.НайтиПоНомеру ("Т0000000002", Дата(2019,01,01));
Документ = Указатель.Ссылка;
НаборЗаписей=РегистрыНакопления.ПродажиПоДисконтнымКартам.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Документ);
НаборЗаписей.Прочитать();     
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Период = ТекущаяДата();    
НоваяЗапись.Сумма = 777;
 
НаборЗаписей.Записать();
1
26.02.2019, 14:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2019, 14:51

Исчезают Записи Из Регистра Значения Свойств Объектов
Подскажите, пожалуйста, может быть кто-нибудь сталкивался. Почему-то исчезают записи из регистра...

Удалить записи независимого регистра сведений с отбором по конкретной организации
Всем привет. 8.2 Сейчас смотрю електроную книгу "Простые примеры разработки" и раздел "Как...

Как получить ссылку на объект записи регистра сведений из модуля ФормаЗаписи?
Доброго времени суток. Такая ситуация: Из формы документа по кнопке вызывается процедура. В неё...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru