Имя: Пароль:
1C
1С v8
v8: не работает программное добавление записи в регистр накопления.
,
0 Cerera
 
07.02.14
15:12
При попытке перезаписать данные в регистр накопления через обработку, ошибок в коде не наблюдаю, но записи в регистре не появляются. Что я не так делаю?

фрагмент кода:

    Пока ВыборкаРегистратор.Следующий() Цикл
        НаборЗаписей=РегистрыНакопления.ЗаказыПоСкладам.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.Регистратор.Установить(ВыборкаРегистратор.Регистратор.Ссылка);
        НаборЗаписей.Записать();
        ВыборкаДетальныеЗаписи = ВыборкаРегистратор.Выбрать();
        НаборЗаписей=РегистрыНакопления.ЗаказыПоСкладам.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.Регистратор.Установить(ВыборкаРегистратор.Регистратор.Ссылка);
        Таблица.Очистить();
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            НоваяЗапись=Таблица.Добавить();
            ЗаполнитьЗначенияСвойств(НоваяЗапись,ВыборкаДетальныеЗаписи);
            НоваяЗапись.Период = ВыборкаРегистратор.Регистратор.Дата;
            НоваяЗапись.Активность = Истина;
        КонецЦикла;
        НаборЗаписей.мПериод=ВыборкаРегистратор.Регистратор.Ссылка.Дата;
        НаборЗаписей.мТаблицаДвижений=Таблица;
        НаборЗаписей.Записать();
    КонецЦикла;
1 shuhard
 
07.02.14
15:13
2 Cerera
 
07.02.14
15:15
(1)что за оффтоп? ты всем чтоли на форуме будешь рекомендовать пройти курсы?
3 Torquader
 
07.02.14
15:17
А таблица - это кто ?
4 GANR
 
07.02.14
15:18
(0) >Что я не так делаю?
ВСЕ!!! Мелких ошибок не вижу - весь код одна большая ошибка. ))))

Вы знаете, зачем в наборах записей нужна эта переменная мТаблицаДвижений? Посмотрите в типовых конфигурациях модули набора записей.

Регистратор.Ссылка.Дата - каждая точка на уровне языка запросов - это еще одно левое соединение, что приводит к замедлению и отъеданию ресурсов.

Таблица - что за переменная?
5 Cerera
 
07.02.14
15:18
(3)ну таблица - это временная ТЗ. в нее заношу данные каждой строчки выборки. И когда просматриваю в отладчике "НаборЗаписей", то там все поля заполнены. в том числе и мТаблицаДвижений
6 Torquader
 
07.02.14
15:19
(1) Пытаешься подменить телепат-бота, пока он в отпуске.
7 Cerera
 
07.02.14
15:19
Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ВложенныйЗапрос.Регистратор КАК Регистратор,
        |    ВложенныйЗапрос.ЗаказПокупателя,
        |    ВложенныйЗапрос.Номенклатура,
        |    ВложенныйЗапрос.ХарактеристикаНоменклатуры,
        |    СУММА(ВложенныйЗапрос.Количество) КАК Количество,
        |    ВложенныйЗапрос.Размещение,
        |    ВложенныйЗапрос.ЕдиницаИзмерения
        |ИЗ
        |    (ВЫБРАТЬ
        |        ЗаказПокупателяТовары.Номенклатура КАК Номенклатура,
        |        ЗаказПокупателяТовары.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
        |        ЗаказПокупателяТовары.Количество КАК Количество,
        |        ЗаказПокупателяТовары.Размещение КАК Размещение,
        |        ЗаказПокупателяТовары.Ссылка КАК ЗаказПокупателя,
        |        ЗаказПокупателяТовары.Ссылка КАК Регистратор,
        |        ЗаказПокупателяТовары.ЕдиницаИзмерения КАК ЕдиницаИзмерения
        |    ИЗ
        |        Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
        |    ГДЕ Истина";
        Если Не ЗначениеЗаполнено(Регистратор) Тогда
            Запрос.Текст = Запрос.Текст +"
        |    И    ЗаказПокупателяТовары.Ссылка.Дата МЕЖДУ &ВыбНачПериода И &ВыбКонПериода";
        КонецЕсли;
        Запрос.Текст = Запрос.Текст +"
        |        И ЗаказПокупателяТовары.Ссылка.Проведен = ИСТИНА
        |    
        |    ОБЪЕДИНИТЬ ВСЕ
        |    
        |    ВЫБРАТЬ
        |        КорректировкаЗаказаПокупателяТовары.Номенклатура,
        |        КорректировкаЗаказаПокупателяТовары.ХарактеристикаНоменклатуры,
        |        КорректировкаЗаказаПокупателяТовары.Количество,
        |        КорректировкаЗаказаПокупателяТовары.Размещение,
        |        КорректировкаЗаказаПокупателяТовары.Ссылка.ЗаказПокупателя,
        |        КорректировкаЗаказаПокупателяТовары.Ссылка,
        |        КорректировкаЗаказаПокупателяТовары.ЕдиницаИзмерения
        |    ИЗ
        |        Документ.КорректировкаЗаказаПокупателя.Товары КАК КорректировкаЗаказаПокупателяТовары
        |    ГДЕ Истина";
        Если Не ЗначениеЗаполнено(Регистратор) Тогда
            Запрос.Текст = Запрос.Текст +"
            |    И    КорректировкаЗаказаПокупателяТовары.Ссылка.Дата МЕЖДУ &ВыбНачПериода И &ВыбКонПериода";
        КонецЕсли;
        Запрос.Текст=Запрос.Текст+"    
        |        И КорректировкаЗаказаПокупателяТовары.Ссылка.Проведен = ИСТИНА) КАК ВложенныйЗапрос";
        Если ЗначениеЗаполнено(Регистратор) Тогда
            Запрос.Текст = Запрос.Текст + "
        |ГДЕ
        |    ВложенныйЗапрос.Регистратор = &Регистратор";
            Запрос.УстановитьПараметр("Регистратор", Регистратор);
        КонецЕсли;
        Запрос.Текст=Запрос.Текст+"
        |
        |СГРУППИРОВАТЬ ПО
        |    ВложенныйЗапрос.Регистратор,
        |    ВложенныйЗапрос.ЗаказПокупателя,
        |    ВложенныйЗапрос.Номенклатура,
        |    ВложенныйЗапрос.ХарактеристикаНоменклатуры,
        |    ВложенныйЗапрос.Размещение,
        |    ВложенныйЗапрос.ЕдиницаИзмерения
        |ИТОГИ ПО
        |    Регистратор";

    Если Не ЗначениеЗаполнено(Регистратор) Тогда
        Запрос.УстановитьПараметр("ВыбКонПериода", КонецДня(ВыбКонПериода));
        Запрос.УстановитьПараметр("ВыбНачПериода", ВыбНачПериода);
    КонецЕсли;

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

    ВыборкаРегистратор = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

    Таблица = Новый ТаблицаЗначений;
    
    Таблица.Колонки.Добавить("Регистратор");
    Таблица.Колонки.Добавить("ЗаказПокупателя");
    Таблица.Колонки.Добавить("Номенклатура");
    Таблица.Колонки.Добавить("ХарактеристикаНоменклатуры");
    Таблица.Колонки.Добавить("Количество");
    Таблица.Колонки.Добавить("ЕдиницаИзмерения");
    Таблица.Колонки.Добавить("Активность");
    Таблица.Колонки.Добавить("Период");
    
    Пока ВыборкаРегистратор.Следующий() Цикл
        НаборЗаписей=РегистрыНакопления.ЗаказыПоСкладам.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.Регистратор.Установить(ВыборкаРегистратор.Регистратор.Ссылка);
        НаборЗаписей.Записать();
        ВыборкаДетальныеЗаписи = ВыборкаРегистратор.Выбрать();
        //НаборЗаписей=РегистрыНакопления.ЗаказыПоСкладам.СоздатьНаборЗаписей();
        //НаборЗаписей.Отбор.Регистратор.Установить(ВыборкаРегистратор.Регистратор.Ссылка);
        Таблица.Очистить();
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            НоваяЗапись=Таблица.Добавить();
            ЗаполнитьЗначенияСвойств(НоваяЗапись,ВыборкаДетальныеЗаписи);
            НоваяЗапись.Период = ВыборкаРегистратор.Регистратор.Дата;
            НоваяЗапись.Активность = Истина;
        КонецЦикла;
        НаборЗаписей.мПериод=ВыборкаРегистратор.Регистратор.Ссылка.Дата;
        НаборЗаписей.мТаблицаДвижений=Таблица;
        НаборЗаписей.Записать();
    КонецЦикла;
8 Torquader
 
07.02.14
15:20
Что-то я отстал от моды - как в регистр можно писать таблицу значений ?
9 GANR
 
07.02.14
15:21
(8) Для этого кое-что должно быть подкручено в модуле набора записей регистра
10 hhhh
 
07.02.14
15:21
(8) НаборЗаписей.Загрузить(ТЗ);
11 shuhard
 
07.02.14
15:22
(2) ржал
от души
ТС не узнал собственную ветку
12 Torquader
 
07.02.14
15:25
(9) А оно точно подкручено ?
13 Avganec
 
07.02.14
15:25
(0) жесть код. а сформировать в запросе таблицу и ее загрузить не вариант?
14 Рэйв
 
07.02.14
15:26
(11)Чукча не читатель.Чукча писатель:-)
15 Cerera
 
07.02.14
15:27
(11)почему не узнал то? узнал. просто при чем тут она...
(13)я её и сформировал. Только отдельно для каждого регистратора. потому что в дальнейшем подразумевается в цикле ещё обработка результатов, которые уже из запроса не получишь.
16 Cerera
 
07.02.14
15:28
хорошо. вот так исправил:

    Пока ВыборкаРегистратор.Следующий() Цикл
        НаборЗаписей=РегистрыНакопления.ЗаказыПоСкладам.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.Регистратор.Установить(ВыборкаРегистратор.Регистратор.Ссылка);
        НаборЗаписей.Записать();
        ВыборкаДетальныеЗаписи = ВыборкаРегистратор.Выбрать();
        НаборЗаписей=РегистрыНакопления.ЗаказыПоСкладам.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.Регистратор.Установить(ВыборкаРегистратор.Регистратор.Ссылка);
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            НоваяЗапись=НаборЗаписей.Добавить();
            НоваяЗапись.Номенклатура=ВыборкаДетальныеЗаписи.Номенклатура;
            НоваяЗапись.ХарактеристикаНоменклатуры=ВыборкаДетальныеЗаписи.ХарактеристикаНоменклатуры;
            НоваяЗапись.ЗаказПокупателя=ВыборкаДетальныеЗаписи.ЗаказПокупателя;
            НоваяЗапись.Количество=ВыборкаДетальныеЗаписи.Количество;
            НоваяЗапись.Размещение=ВыборкаДетальныеЗаписи.Размещение;
            НоваяЗапись.Период = ВыборкаРегистратор.Регистратор.Дата;
            НоваяЗапись.Активность = Истина;
        КонецЦикла;
        НаборЗаписей.Записать();
    КонецЦикла;


выдается ошибка:

{Форма.Форма.Форма(95)}: Ошибка при вызове метода контекста (Записать)
        НаборЗаписей.Записать();
по причине:
Ошибка обращения к серверу 1С:Предприятия.
по причине:
Сеанс работы завершен администратором.
по причине:
Соединение с сервером баз данных разорвано администратором
Microsoft SQL Server Native Client 10.0: Communication link failure
HRESULT=80004005, HRESULT=80004005,
17 Torquader
 
07.02.14
15:31
(16) В ошибке сказано, что кто-то убит сеанс - с чего бы это ?
18 Cerera
 
07.02.14
15:33
(17)вот я и не могу понять. что убивает сеанс. Я ведь только в набор записей пытался записать изменения.
19 hhhh
 
07.02.14
15:34
(18) а регистратор пустой оставляешь?
20 Torquader
 
07.02.14
15:34
(18) Возможно, что твой запрос сожрал слишком много памяти и превзошёл ограничения сервера.
21 hhhh
 
07.02.14
15:36
(18) да, может у тебя там миллион строчек в регистре?
22 Cerera
 
07.02.14
15:38
(21)не знаю. Но ведь это недавно созданный регистр. что я не так делаю?
23 Cerera
 
07.02.14
15:39
(19) теперь заполняю. Всё равно

http://joxi.ru/zsX0UhjKTJDUXNM0Rzc
24 zak555
 
07.02.14
15:41
(8) зачем ты обращаешься к документам, если есть для этого регистры ?
25 zak555
 
07.02.14
15:43
(16) > {Форма.Форма.Форма(95)}: Ошибка при вызове метода контекста (Записать)

зачем писать регистры в форме ?
26 Avganec
 
07.02.14
15:43
(15) посмотри код, как в УТ 11 сделано проведение
27 Cerera
 
07.02.14
15:46
Вопрос снят. всё заработало. Поменял код на:

        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            НоваяЗапись=НаборЗаписей.Добавить();
            НоваяЗапись.Номенклатура=ВыборкаДетальныеЗаписи.Номенклатура;
            НоваяЗапись.ХарактеристикаНоменклатуры=ВыборкаДетальныеЗаписи.ХарактеристикаНоменклатуры;
            НоваяЗапись.ЗаказПокупателя=ВыборкаДетальныеЗаписи.ЗаказПокупателя;
            НоваяЗапись.Количество=ВыборкаДетальныеЗаписи.Количество;
            НоваяЗапись.Размещение=ВыборкаДетальныеЗаписи.Размещение;
            НоваяЗапись.Период = ВыборкаРегистратор.Регистратор.Дата;
            НоваяЗапись.Активность = Истина;
            НоваяЗапись.Регистратор = ВыборкаРегистратор.Регистратор.Ссылка;
        КонецЦикла;
        НаборЗаписей.Записать();
28 zak555
 
07.02.14
15:47
(27) лучше так
ВыборкаРегистратор.Регистратор.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка
29 Cerera
 
07.02.14
15:51
(28)я всё понимаю. просто та обработка наскоряк сделана для разового перезаполнения регистров. а тут подстава такая. не работала.
30 Avganec
 
07.02.14
15:56
(29) ничто так не постоянно как временное
31 zak555
 
07.02.14
15:57
(29) ты на 24 не ответил
32 Cerera
 
07.02.14
16:05
(31)в чем именно? Регистр вновь созданный. Перепроводить документы не хочется. Я делаю запрос к документам за период и перезаполняю эти документы. Или как ?