Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Создание документа ввода начальных остатков
В созданной информационной базе следует предусмотреть возможность ввода начальных остатков в регистры. Это необходимо для того, чтобы пользователи могли начать работу с информационной базой не с " чистого листа", а с некоторого " исходного состояния", которое было в их прежней системе учета (пусть даже они вели учет на бумаге). Задача ввода начальных остатков отличается от прочих алгоритмов изменения состояния регистров информационной базы тем, что подразумевает изменение данных непосредственно в регистрах, без использования каких-либо промежуточных алгоритмов (заполнения документов данными, проведения документов, контроля правильности данных, указанных в документах и пр.). Например, необходимо ввести начальные остатки регистра накопления ОстаткиМатериалов. Для выполнения этой задачи необходимо создать документ, в котором вручную будут редактироваться его движения по регистру ОстаткиМатериалов прямо в форме документа. Откройте конфигуратор и создайте новый объект конфигурации Документ с именем ВводНачальныхОстатковНоменклатуры. На закладке Движения запретите проведение документа (поскольку формировать записи регистра будете самостоятельно), и отметьте, что движения документа будут находиться в регистре накопления ОстаткиМатериалов. После этого перейдите на закладку Формы и создайте основную форму документа. Раздвиньте форму вниз и поместите в ней командную панель с именем КоманднаяПанельОстаткиМатериалов. Под командной панелью расположите табличное поле с именем ОстаткиМатериалов и типом значения – РегистрНакопленияНаборЗаписей.ОстаткиМатериалов. В окне свойств командной панели КоманднаяПанельОстаткиМатериалов установите флаг АвтоЗаполнение и ИсточникДействий – ОстаткиМатериалов (рис. 280). Рис. 280. Редактирование формы документа " Ввод начальных остатков номенклатуры" В свойствах табличного поля ОстаткиМатериалов укажите, что источником данных для него будут являться движения документа по регистру ОстаткиМатериалов (рис. 281). Рис. 281. Назначение источника данных для табличного поля Удалите из табличного поля колонки Регистратор и Активность и измените размеры формы и расположение элементов управления (рис. 282). Рис. 282. Измененная форма документа " Ввод начальных остатков номенклатуры" Запустите 1С: Предприятие в режиме отладки и проверьте работу созданного документа. Введите в документ следующие данные (рис. 283): Рис. 283. Документ " Ввод начальных остатков номенклатуры №1" Обратите внимание на то, что дата документа не совпадает с датами отдельных записей, которые вы создавали в движениях документа. Нажмите кнопку " Записать " и из формы списка документа откройте движения документа в регистре ОстаткиМатериалов (кнопка " Перейти " ). Вы видите, что записи регистра накопления в точности соответствуют тем, которые были созданы в документе (рис. 284). Рис. 284. Записи регистра Остатки материалов Таким образом, вы добились поставленной цели: с одной стороны, задавая дату документа, вы можете фиксировать момент внесения изменений в записи регистра, с другой стороны – для каждой создаваемой вами записи регистра вы можете указать индивидуальное значение поля Период. Теперь необходимо реализовать два требования, предъявляемых к документу ВводНачальныхОстатковНоменклатуры. Первое требование заключается в том, что записи регистра должны формироваться той же датой, что и дата документа. Иначе говоря, необходимо синхронизировать дату движений с датой документа. Для этого в обработчик события Перед записью формы документа добавьте следующий текст: Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) Для Каждого ЗаписьРегистра Из Движения.ОстаткиМатериалов Цикл ЗаписьРегистра.Период = Дата; КонецЦикла; КонецПроцедуры Снова запустите 1С: Предприятие в режиме отладки, откройте документ Ввод начальных остатков номенклатуры и нажмите кнопку " Записать ". Открыв движения документа в регистре ОстаткиМатериалов, вы увидите, что значение поля Период у всех записей стало равно дате документа (рис. 285). Рис. 285. Измененные записи регистра Можно сказать, что вы достигли поставленной цели, но лишь в ситуации, когда запись документа выполняется интерактивными средствами. Если программно вызвать метод Записать() у объекта созданного документа, он будет записан без участия формы документа. Это значит, что событие При записи формы документа вызвано не будет, и код обработчика не отработает. Чтобы предусмотреть возможность синхронизации периода движений документа с датой документа и в случае программной записи объекта Документ, следует использовать обработчик события Перед записью объекта документа, а не формы документа. Событие Перед записью в случае интерактивной записи документа сначала будет вызвано у формы документа, а затем у объекта Документ. Поэтому вернитесь в конфигуратор, удалите из модуля формы добавленный ранее текст и создайте обработчик события Перед записью в модуле объекта Документ: Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) // Определить, нужно ли обновлять дату в движениях ОбновитьДатуДвижений = ЭтоНовый() ИЛИ Движения.ОстаткиМатериалов.Модифицированность(); Если Не ОбновитьДатуДвижений Тогда // Проверить, что дата изменилась Запрос = Новый Запрос; Запрос.УстановитьПараметр(" ТекущийДокумент", Ссылка); Запрос.Текст = " ВЫБРАТЬ | Дата |ИЗ | Документ.ВводНачальныхОстатковНоменклатуры |ГДЕ Ссылка = & ТекущийДокумент"; Выборка = Запрос.Выполнить().Выбрать(); Выборка.Следующий(); ОбновитьДатуДвижений = Выборка.Дата < > Дата; КонецЕсли; // Установить всем новую дату, если нужно Если ОбновитьДатуДвижений Тогда Если Не Движения.ОстаткиМатериалов.Выбран() И Не Движения.ОстаткиМатериалов.Модифицированность() Тогда Движения.ОстаткиМатериалов.Прочитать(); КонецЕсли; Для Каждого ЗаписьРегистра Из Движения.ОстаткиМатериалов Цикл ЗаписьРегистра.Период = Дата; КонецЦикла; КонецЕсли; КонецПроцедуры Как вы видите, в этом случае обработчик содержит больше кода за счет дополнительных проверок, которые выполняются в результате возможности как интерактивной, так и программной записи объекта. Запустите 1С: Предприятие в режиме отладки и убедитесь, что, указав новую дату для документа Ввод начальных остатков номенклатуры и записав его, вы получите движения в регистре накопления с новой датой. В процессе записи документа Ввод начальных остатков номенклатуры можно управлять не только периодом записей регистра накопления, но и значениями других полей регистра. Например, по аналогичному принципу может быть создан документ Операция, позволяющий вводить ручные операции в регистр бухгалтерии. При этом, вероятно, кроме управления периодом записей регистра вам потребуется управлять значением поля Активность (" включать" и " выключать" проводки документа) и т. д. В заключение следует сказать, что выбор обработчика, в который будет помещен текст процедуры, зависит от логики работы создаваемого объекта. Если конфигурация не предусматривает программной записи объекта, можно выбрать обработчик модуля формы. Если предполагается и программная модификация объекта, следует выбирать обработчик модуля объекта. Заметьте, что оба эти способа не исключают модификацию записей регистра через объект Регистр< …> НаборЗаписей.< имя регистра> . Поэтому, если логика конфигурации подразумевает возможность программной модификации объекта НаборЗаписей, код обработки следует размещать в обработчике события набора записей. Все попытки изменить данные регистра будут сведены, в конечном счете, к записи именно набора записей. Популярное:
|
Последнее изменение этой страницы: 2016-05-03; Просмотров: 1727; Нарушение авторского права страницы