С Новым годом! Форум программистов, компьютерный форум, киберфорум
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/261: Рейтинг темы: голосов - 261, средняя оценка - 4.93
1 / 1 / 0
Регистрация: 04.11.2013
Сообщений: 67
1

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

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

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

Есть примерные коды, но я не смыслю в 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)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.02.2019, 12:48
Ответы с готовыми решениями:

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

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

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

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

19
1 / 1 / 0
Регистрация: 04.11.2013
Сообщений: 67
22.02.2019, 12:54  [ТС] 2
Ут 10.3
0
286 / 186 / 18
Регистрация: 20.02.2012
Сообщений: 926
22.02.2019, 15:28 3
mirina313, так же как и в ваших примерах
1C
1
2
3
4
5
6
7
8
        Набор = РегистрыНакопления.НДСПредъявленный.СоздатьНаборЗаписей();
        Набор.Отбор.Регистратор.Установить(СсылкаНаДокумент);
        Набор.Прочитать();
        // далее добавляете записи
        НоваяСтрока = Набор.Добавить();
        // заполняете строку
        // потом записываете
        Набор.Записать();
1
1 / 1 / 0
Регистрация: 04.11.2013
Сообщений: 67
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
1 / 1 / 0
Регистрация: 04.11.2013
Сообщений: 67
25.02.2019, 11:29  [ТС] 5
Не пойму как установить отбор по данному регистратору
Миниатюры
Добавление записи регистра накопления  
0
3031 / 1584 / 576
Регистрация: 16.01.2015
Сообщений: 6,743
25.02.2019, 11:59 6
mirina313, Это обычный документ. Так что отбор как и по любому другому регистратору. Что конкретно не получается (код)?
1
1 / 1 / 0
Регистрация: 04.11.2013
Сообщений: 67
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
3031 / 1584 / 576
Регистрация: 16.01.2015
Сообщений: 6,743
25.02.2019, 12:36 8
Цитата Сообщение от mirina313 Посмотреть сообщение
При таком алгоритме, добавляется новая строка в уже созданный документ корректировки записей регистров, и то строка задваивается почему-то
Конечно строка добавляется вы же прямо указываете
Цитата Сообщение от mirina313 Посмотреть сообщение
НоваяСтрока = Набор.Добавить();
Если надо корректировать запись, то ищите (или задаете) конкретный док регистратор
и не добавляете строку а корректируете найденную
Здесь как добавить запись
Как найти и добавить запись здесь
Найти запись можно как выше можно запросом с отбором по номеру карты, клиенту и т.п.

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

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

Набор.Отбор.Регистратор.Установить (ссылка); в скобках должна быть ссылка, вопрос как ее указать?
0
3031 / 1584 / 576
Регистрация: 16.01.2015
Сообщений: 6,743
25.02.2019, 15:48 14
Цитата Сообщение от mirina313 Посмотреть сообщение
Набор.Отбор.Регистратор.Установить (ссылка); в скобках должна быть ссылка, вопрос как ее указать?
Да. Здесь должна быть ссылка на конкретный документ. Найти можно (вариант) Запрос к базе Выбрать первые 1 (далее нужные данные, ссылка из нужного дока) Упорядочить ПО Ссылка.Дата убыв. Выберется последняя запись (если она нужна) ИЛИ запрос с отбором по номеру карты и т.п. Тут вам виднее. Главное, чтобы в итоге была получена ссылка на нужный регистратор
1
1 / 1 / 0
Регистрация: 04.11.2013
Сообщений: 67
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
Модератор
2296 / 839 / 244
Регистрация: 22.04.2013
Сообщений: 6,166
Записей в блоге: 1
26.02.2019, 12:11 16
Цитата Сообщение от mirina313 Посмотреть сообщение
Выборка = Документы.КорректировкаЗаписейРегистров.Выбрать();
это, как нетрудно догадаться, ВЫБОРКА.
то есть сколько-то документов. типа массива.
а штобе перейти к первому из них - надо написать выборка.следующий()
тогда мы переместимся к первому.
если надо ко второму - ещё раз пишем выборка.следующий()
поэтому в рабочем варианте - есть конкретный документ. а в вашем - массив
1
1 / 1 / 0
Регистрация: 04.11.2013
Сообщений: 67
26.02.2019, 12:41  [ТС] 17
Yulunga, допустим, хочу указать конкретный документ "выделенный" во вложении.
Как мне указать на него?
Миниатюры
Добавление записи регистра накопления  
0
Модератор
2296 / 839 / 244
Регистрация: 22.04.2013
Сообщений: 6,166
Записей в блоге: 1
26.02.2019, 13:06 18
Цитата Сообщение от mirina313 Посмотреть сообщение
Доброго времени суток!
Подскажите, как программно заполнить регистр "Продажи по дисконтным картам" с помощью внешней обработки.
во внешней обработке создать поле с типом вашего конкретного документа ("продажиподисконтнымкартам", "какоетоназваниедокумента", "документпродажи",..... как он у вас называется в общем)

сделать кнопку.
в обработке кнопки брать конкретно вот тот документ, который пользователь выбрал вона в том поле
1
1 / 1 / 0
Регистрация: 04.11.2013
Сообщений: 67
26.02.2019, 13:42  [ТС] 19
Yulunga,
Программно указать, без кнопок
0
5 / 3 / 2
Регистрация: 21.02.2019
Сообщений: 9
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
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.02.2019, 14:51
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта в Gowin Eda. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru