helpf.pro
Регистрация

v8: Запись в регист свдений

Bell
26.07.2012 13:52Прочитано: 1839
Здравствуйте
Подскажите как грамотно записать в регистр свдений табличную часть данные
графика, что не получается.Проблемы разные Имя табличной части ""ШаблонЗаполнения"

Код 1C v 8.х
 Набор = РегистрыСведений.РС_ГрафикРаботы.СоздатьНаборЗаписей();
Набор.Отбор.ГрафикРаботы.Установить(ГрафикРаботы);

НП = НачалоДня(Период.ДатаНачала); // НП - Начало периода
КП = КонецДня(Период.ДатаОкончания); // КП - Конец периода

Пока НП <= КП Цикл
Запись = Набор.Добавить();
Запись.Дата = НП;
Запись.ГрафикРаботы = ГрафикРаботы;
// Данные находятся в табличной части
// Запись.Параметр = СтрокаТЧ.Параметр;
// Запись.ПараметрДни = СтрокаТЧ.ПараметрДни;
// Запись.ПараметрВечерниеЧасы = СтрокаТЧ.ПараметрДни;
// Запись.ПараметрНочныеЧасы = СтрокаТЧ.ПараметрДни;

НП = НП+24*3600;
КонецЦикла;
Набор.Записать();
Yandex
Возможно, вас также заинтересует
Реклама на портале
alizgo
27.07.2012 04:49Ответ № 1
А где обращение к табличной части? Как платформа должна понять, что СтрокаТЧ это строка табличной части?
Bell
27.07.2012 09:27Ответ № 2
Для каждого строкаТЧ из ШаблонЗаполнения я делал .Не понимаю куда его подставить куда не ставлю. первое значение из ТЧ или последнее или ничего не пишет в регистр. Может структура записи другаю будте?
alizgo
27.07.2012 09:43Ответ № 3
https://help1c.com/faq8/view/639.html
Mokey
27.07.2012 17:16Ответ № 4
Потому что Запись = Набор.Добавить(); надо вставлять в цикле по ТЧ и заполнять реквизиты регистра в этом цикле, тогда получите столько записей, сколько строк в ТЧ, при этом записи должны быть уникальными по реквизитам!
Изменено 27.07.12 17:18:01
Mokey
27.07.2012 17:19Ответ № 5
Другой вопрос, как связаны между собой НП (КП) и ТЧ?
Bell
30.07.2012 18:12Ответ № 6
(4) Я это понимаю.Но применительно к этому алгоритму как надо сделать. НП и КП нужныю тольк для получения разницы дат (Число дней) Я вроде все способы попробовал есть те или иные проблемы
Изменено 30.07.12 18:22:58
Mokey
31.07.2012 10:15Ответ № 7
(6) Bell,какие проблемы?
Код 1C v 8.х
 
Набор = РегистрыСведений.РС_ГрафикРаботы.СоздатьНаборЗаписей();
Набор.Отбор.ГрафикРаботы.Установить(ГрафикРаботы);
НП = НачалоДня(Период.ДатаНачала); // НП - Начало периода
КП = КонецДня(Период.ДатаОкончания); // КП - Конец периода
Пока НП <= КП Цикл
Для Каждого СтрокаТЧ Из ШаблонЗаполнения Цикл
Запись = Набор.Добавить();
Запись.Дата = НП;
Запись.ГрафикРаботы = ГрафикРаботы;
// Данные находятся в табличной части
Запись.Параметр = СтрокаТЧ.Параметр;
Запись.ПараметрДни = СтрокаТЧ.ПараметрДни;
Запись.ПараметрВечерниеЧасы = СтрокаТЧ.ПараметрДни;
Запись.ПараметрНочныеЧасы = СтрокаТЧ.ПараметрДни;
КонецЦикла;
НП = НП+2400;
КонецЦикла;
Набор.Записать();


Тут единственное что непонятно, так это НП и КП, что они из себя представляют?
В таком варианте мы записываем одни и те же данные с разными НП. Задачу проясните, пока непонятно, чего Вы хотите добиться.
Изменено 31.07.12 10:18:03
Bell
31.07.2012 11:00Ответ № 8
НП и КП - Данные период ТипЗначения-Стандартный период
Служат дляо получения количество дней в периоде.
Можно все в ТЧ сбросить не хочу лишних реквизитов.
График хочется что бы был универсальным (День через день, два через три и т.д.)

Код 1C v 8.2 УП
 Набор = РегистрыСведений.РС_ГрафикРаботы.СоздатьНаборЗаписей(); 	  Набор.Отбор.ГрафикРаботы.Установить(ГрафикРаботы);

НП = НачалоДня(Период.ДатаНачала); // НП - Начало периода
КП = КонецДня(Период.ДатаОкончания); // КП - Конец периода
Пока НП<=КП Цикл
Запись = Набор.Добавить();
Запись.Дата = НП;
Запись.ГрафикРаботы = ГрафикРаботы; // Добавил ??????????
Если ДеньНедели(НП)<= КоличествоРабочихДнейВНеделю Тогда
Запись.Параметр = Параметр; // Дни
КонецЕсли;
НП = НП+24*3600;
КонецЦикла;
Набор.Записать()

Изменено 31.07.12 11:07:11
Mokey
01.08.2012 10:25Ответ № 9
И... в чём вопрос-то? Где у Вас ШаблонЗаполнения?
Bell
02.08.2012 09:32Ответ № 10
Вот здесь он
Как грамотно организовать циклы?
В разных вариантах ИЛИ виснет ИЛИ показывает последнее занчение из ТЧ ШаблонЗаполнения

Код 1C v 8.х
 Набор = РегистрыСведений.РС_ГрафикРаботы.СоздатьНаборЗаписей();
Набор.Отбор.ГрафикРаботы.Установить(ГрафикРаботы);
НП = НачалоДня(Период.ДатаНачала); // НП - Начало периода
КП = КонецДня(Период.ДатаОкончания); // КП - Конец периода
Пока НП <= КП Цикл
Для Каждого СтрокаТЧ Из ШаблонЗаполнения Цикл // ВОТ ОН ????
Запись = Набор.Добавить();
Запись.Дата = НП;
Запись.ГрафикРаботы = ГрафикРаботы;
// Данные находятся в табличной части
Запись.Параметр = СтрокаТЧ.Параметр;
//Запись.ПараметрДни = СтрокаТЧ.ПараметрДни;
//Запись.ПараметрВечерниеЧасы = СтрокаТЧ.ПараметрДни;
//Запись.ПараметрНочныеЧасы = СтрокаТЧ.ПараметрДни;
КонецЦикла;
НП = НП+2400;
КонецЦикла;
Набор.Записать();
Mokey
02.08.2012 10:41Ответ № 11
Да, это он.
Виснет - скорее всего зацикливается, последний вариант - если запись создаётся вне цикла по ШаблонуЗаполнения.
Изменено 02.08.12 10:42:57
Mokey
02.08.2012 10:43Ответ № 12
Так, как я привёл пример, должно отработать правильно, если условие Пока НП <= КП Цикл правильно организовано.
Bell
02.08.2012 15:48Ответ № 13
Нет не работает
{Обработка.ГрафикРаботы.Форма.ГрафикРаботы.Форма(161)}: Ошибка при вызове метода контекста (Записать)
Набор.Записать();
по причине:

по причине:
Запись с такими ключевыми полями существует! : РС_ГрафикРаботы: МОЙ ГРАФИК, 01.01.2012 0:00:00 (Регистр сведений: График работы ( РС ); Номер строки: 2)
Bell
02.08.2012 16:00Ответ № 14
Опишу что надо
1. Есть шапка реквизиты
ГрафикРаботы - спр.ГрафикРаботы
Период - стандартный периода
2.Есть ТЧ (может в ней быть только СЕМИ строк ПО ЧИСЛУ ДНЕЙ НЕДЕЛИ)
Колонки
Дни часы и т.д (Можно еще сделать первую колонке дни недели)
Тербуется записать все в регистр сведений ГрафикРаботы и привызаться днем недели к ежедневной дате в регистре сведений. Вроде все .МОЖЕТ ПОДХОД К РЕШЕНИю БУДЕТ ДРУГОЙ или как бы вы сделали?
Mokey
06.08.2012 10:31Ответ № 15
(13) Bell, читайте внимательно, что я писал в 4 посте!
Подсказка: Вы можете приложить к ответу файл или изображение щелкнув по значку или в редакторе.
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.