1с проведение документа не формирует движения
Во встроенном языке программирования платформы «1С:Предприятие» встречаются методы, похожие по написанию и использованию, но имеющие отличия в работе.
Участник Мастер-группы курса по подготовке к сертификации “1С:Специалист по платформе 1С:Предприятие 8.3” обратил внимание, что в разных разделах курса метод «Записать()» у движений документа используется по-разному. Он попросил тренера пояснить причину, и теперь использует в своей работе эти методы правильно :)
Вопрос
В тексте ОбработкаПроведения документа «Расходная накладная» записано:
// 1. подготовка регистра бухгалтерии
Движения.Управленческий.Записывать = Истина;
Движения.Управленческий.Записать();
// 2. установка блокировки данных регистра бухгалтерии
Блокировка = Новый БлокировкаДанных;
т.е. после инструкции «Движения.Управленческий.Записать();» следует инструкция наложения блокировки.
А в разделе «Общие, универсальные механизмы, которые используются для решения задач всех разделов» в главе, посвященной «старой» методике контроля остатков, после инструкций «Записывать = Истина; Записать();» рекомендовано восстанавливать для свойства «Записывать» набора движений значение «Истина».
// 1. Подготовка наборов записей регистра
Движения.ОстаткиНоменклатуры.Записывать = Истина;
Движения.Записать();
// 2. Восстановление для свойства набора движений Записывать значения Истина
Движения.ОстаткиНоменклатуры.Записывать = Истина;
Если на экзамене опустить повторную инструкцию «Записывать = Истина», это не будет считаться ошибкой?
Или существует какая то особенность в использовании метода «Записать()» у движений документов?
Ответ
Да, существует особенность. Все зависит от того, каким образом производится запись пустого набора. Обратите внимание, что в задаче бухгалтерского учета запись пустого набора осуществляется методом Движения..Записать(). Это метод набора записей регистра. После его выполнения маркер записи движений не сбрасывается, поэтому его не нужно восстанавливать.
В задаче из общего раздела используется Движения.Записать(). Это метод коллекции движений документа. Он выполняет запись движений по регистрам, у которых установлен маркер записи «Записывать» в значении «Истина», после чего устанавливает его в значение «Ложь». Поэтому, требуется повторная установка признака записи. Если этого не сделать, то при проведении сформированные движения не будут записаны. Это будет ошибкой, и не только на экзамене!
Чтобы проверить это, можно закомментировать восстановление маркера записи, провести документ и посмотреть его движения.
Алгоритм проведения документа с учетом подписок на события
Если посмотреть свойства документа через палитру свойств, то можно увидеть два важных свойства: "Удаление движений" и "Запись движений при проведении", причем второе НЕ вынесено на закладку "Движения" окна редактирования документа.
1. Удаление движений.
Если свойство "Удаление движений" уставновлено в "Удалять автоматически", то ПЕРЕД началом проведения программа очищает все движения по регистрам. Фактически это означает запись пустого набора записей регистра с видом записи - замещение. А значит, программа выполняет код из процедур "ПередЗаписью" и "ПриЗаписи" модуля набора записей регистров.
2. Процедура "ОбработкаПроведения" модуля документа.
Обратим внимание: в начале обработки проведения у всех движений флаг модифицированности Ложь (значение возвращает метод Движения.Регистр.Модифицированность() ).
При работе с набором записей регистра (например, Движения.Регистр.Очистить() , Движения.Регистр.Добавить() и т.д.) флаг модифицированности становится Истина.
После записи движения в базу Движения.Регистр.Записать() модифицированность снова ложь.
Если в модуле процедуры подписки происходит запись набора регистра в явном виде ( .Записать() ), то программа выполняет код из процедур "ПередЗаписью" и "ПриЗаписи" модуля набора записей регистров и процедуры из подписки на событие "При записи" регистра.
3. Подписки на событие "При проведении" документа
Очередность подписок на одно и то же событие явным образом не определяется 1С, но на практике подписки вызываются в порядке следования в ветке "Подписки на события" окна редактирования конфигурации.
Если регистры записываются с помощь метода Записать () , то выполняются все связанные процедуры.
4. Запись движений.
Вспомним про свойство "Запись движений при проведении" из настроек документа.
Если оно равно "Записывать модифицированные", то в базу будут записаны все движения документа, у которых флаг "Модифицированность" Истина.
Если оно равно "Записывать выбранные", то в базу будут записаны движения регистров, для которых мы явным образом указали необходимость записи.
Запись движений в базу происходит с режимом замещения Истина . Это означает, что будут записаны записи из текущего набора записей регистра коллекции Движения и очищены предыдущие записи.
И в конце р ассмотрим несколько примеров:
Пусть свойство документа "Запись движений при проведении" равно "Записывать модифицированные", а "Удаление движений" - "Не удалять автоматически".
При такой процедуре проведения документ при каждом перепроведении будет добавлять запись в регистр, записи будут множиться. Т.к. строка //*** добавляет записи в регистр, признак Модифицированности снимается.
Правильнее будет написать строку //*** как
или вообще ее опустить, и тогда программа сама запишет модифицированные движения.
В 1С 8 движения документа могут формироваться не только в обработке проведения, но и извне, например, из некоторой служебной обработки (так реализовано допроведение документов, восстановление авансов и т.д.).
В этом случае при перепроведении документа, если происходит изменение движений регистра бухгалтерии (флаг Модифицированности Истина), записи будут замещены записями, сформированными документом.
Перед началом проведения документа все реквизиты документа записываются в базу данных (т.е. программист может их получить с помощью запроса). Во внутренней памяти создается Объект документа, и у этого объекта есть коллекция движений, которая будет записана после окончания процедуры проведения (см. этап 4).
Если в процессе проведения документа движения по регистрам формируются не с помощью коллекции Движения, принадлежащей внутреннему объекту , а другими способами (вручную в форме набора записей или как в примере 2 и т.д.), то на этапе 4 эти записи будут замещены. Чтобы избежать замещения в типовых базах, для документа "ОперацияБух" свойство документа "Проведение" устанавливается в "Запретить".
Если документ должен проводиться по другим регистрам и нельзя запретить проведение, тогда нужно внимательно настраивать свойства документа:
- выбрать вариант записи движений "Записывать выбранные" и убедиться, что Движения.Регистр.Записывать = Ложь
- выбрать вариант записи движений "Записывать модифицированные" и контролировать признак Модифицированности для набора записей этого регистра.
Нужно понимать, что объект, полученный по ссылке (назовем его "ОбъектДок"), и внутренний объект ("ЭтотОбъект"), созданный в памяти в момент проведения, это два разных экземляра объектов.
Соответственно и коллекции движений у них будут разные. У "ОбъектаДок" коллекция движений будет включать только записанный в базу набор записей регистра, а у "ЭтогоОбъекта" - как записанные, так и добавленные и незаписанные записи. По окончании проведения (этап 4) в базу будут записаны наборы записей "ЭтогоОбъекта", причем с признаком Замещать = Истина.
Если записи в набор записей добавляются по способу, описанному выше, то они могут быть замещены на этапе 4.
Формирую движения по регистру сведений. Процедура вроде стандартная :
ТаблицаДвижений = НаборДвижений.ВыгрузитьКолонки();
НаборДвижений.мТаблицаДвижений = ТаблицаДвижений;
Если (НЕ Отказ) Тогда
Движения.МойРегистрСведений.ВыполнитьДвижения();
Пока не дашь
НаборДвижений.Записать();
движения в регистр не записываются.
Это же не правильно.
Кстати как правильнее писать :
ТаблицаДвижений = НаборДвижений.ВыгрузитьКолонки();
или
ТаблицаДвижений = НаборДвижений.Выгрузить();
в УПП видел и так и так
Вот интересно, каким нужно быть долбаком в 44 года чтобы такую хрень на форуме спрашивать.
Куда катятся программистишки?
(2) Это я понимаю.
Не понятно почему в разных конфах по разному.
(3) Любезный вы бы попридержали свои эмоции для отвлеченных тем .
Я решаю практическую задачу и мне нужна помощь.
Я делаю как в типовой это не работает.
Свойства "Записывать" там явно не устанавливается.
(9) ну так так и пусть пишет.Мол прогугли и т.д. или оскорблять сходу это норма? Я не думаю что в жизни ты сходу будешь материться и оскорблять человека за то что он не знает чего то, будешь бояться получить в бубен, а тут пожалуйста.
"Инет" как никак
Специально на БП ред3.0 провел поиск ".Записывать = Истина" и нашло совпадений 674 :), не так искал походу (13)
Так в чем фича то.
Надо ставить этот флаг явно или нет.
И почему без него работает ?
Чтение и запись.
Описание:
Тип: Булево.
Ложь - не происходит записи набора в информационную базу при вызове Записать коллекции движений документа, которой принадлежит набор, а также при стандартной обработке проведения документа, если значение свойства метаданного документа "Запись движений при проведении" в Конфигураторе выставлено в "Записывать выбранные".
Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
(12) да буду. я могу понять если это сопливый тинейджер. Но если дядяд 44 лет с пятилеткой стажа на форуме не в состоянии предпринять стандартные действия по поиску знаний то он - я выше уже сказал кто.
Хм.
Если б я отвечал на данный вопрос - ответ был бы такой :
--
Нет - нужно написать втрое больше строк чтобы накидать гoвна на вентилятор.
Ментальность однако.
(21) Если бы люди не разменивались на тыканье друг друга носом в говна , а на ответы по сути.
Размер форума был бы на два порядка меньше.
И на 5 порядков содержательнее.
Я в одной книжке по программированию как то прочитал: "Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется."
В некоторых типовых конфигурациях фирмы 1С существует возможность ручной корректировки движений документа по регистрам. В конфигурации 1С: Бухгалтерия 8 для этого, при наличии соответствующих прав, нужно открыть движения документа и установить флаг “Ручная корректировка”. Однако, иногда возникает необходимость выполнить корректировку движений большого количества документов. В этом случае нам понадобится обработка, которая изменит движения документов без перепроведения.
Рассмотрим как изменить движения документа на примере конфигурации 1С: Бухгалтерия 8. Менять будем движения по регистру бухгалтерии “Хозрасчетный”. Пусть перед нами стоит задача заполнить суммы налогового учета по данным бухгалтерского. Предположим, что у нас уже есть обработка, которая выбирает необходимые нам документы и последовательно обрабатывает их с помощью описанной нами процедуры “ИзменитьДвиженияДокумента”. Посмотрим как должна выглядеть эта процедура.
Хотелось бы отметить, что без проверки ведения налогового учета на счёте, при попытке записать набор, содержащий проводку с ненулевой суммой по счёту на котором не ведется налоговый учет, возникнет ошибка следующего содержания:
Запись не верна! Поле “Сумма (налоговый учет)” должно быть пустым! (Регистр бухгалтерии: Журнал проводок (бухгалтерский и налоговый учет); Номер строки: 1)
Режим обмена данными устанавливается следующими строками:
Это необходимо для того, чтобы не выполнялся программный код, находящийся в обработчиках событий “ПередЗаписью” модуля набора записей регистра бухгалтерии “Хозрасчетный” и модуля корректируемого документа. В каждом из них (для типовых конфигураций) есть проверка следующего вида:
Движения документа отредактированы вручную и не могут быть автоматически актуализированы.
Похожие FAQ
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Google maps : вывод точек на карту и режим панорамы 7
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора Автоматическая архивация баз 1С с использованием Cobian Backup и VBS скриптов 8
Клиент попросил настроить автоматическую архивацию баз 1С раз в три дня и выгрузку архивов на Dropbox и на FTP Сервер. Кроме 1С нужно архивировать папку с рабочими документами. Хочет - так хочет, делаем: Первым делом настроим автоматическую архивац Ввод данных по командировкам в программе ЗУП 0
Ввод сведений о командировках в программе 1С: Зарплата и управление персоналом 8 (ред.30) осуществляется в Разделе Кадры - Все кадровые документы - Создать - Командировка Откроется документ: Ввод сведений о командировках в программ Посмотреть все результаты поиска похожих
Еще в этой же категории
Заполнить программно Партии в проводках 0
Добрый день! В счете учета включили Субконто3=Партии. Как заполнить партии в проводках, которые уже проведены ранее? Спасибо. Посмотреть все в категории Регистры бухгалтерии
Ключевые слова и Изображения
Слова упорядочены по частоте использования в тексте
Изображения
На примере конфигурации ERP (для прочих конфигураций решение будет аналогичным).
В статье показано, что без изменения программного кода не удастся сохранять прежние движения документов по регистрам, даже установив соответствующие свойства документов.
Постановка задачи:
· При перепроведении документа нам необходимо анализировать предыдущие записи этого же документа. Например, мы хотим проверять, были ли изменены значения ключевых реквизитов документа.
Как решаем задачу:
1. Необходимо добавить регистр сведений «КлючевыеРеквизитыЗаполненияДокументов»
1.1. В качестве регистратора указываем один из типовых документов – «ЗаказПоставщику».
2. В настройках документа:
2.1. режим удаления движений установлен как «Не удалять автоматически».
2.2. Свойство «Запись движений при проведении» документа установлено в «Записывать выбранные».
3. Создаем подписку для события «Обработка проведения» документа.
2. Решение проблемы – внесение правок в исходный программный код.
При проведении документа он формирует движения документов по регистру, как и было задумано.
Но при его перепроведении обработчик подписки выдает ПУСТОЙ результат запроса по нашему регистру сведений.
Вопрос: почему так происходит? Ведь в документе для движений указано «Не удалять автоматически» и «Записывать выбранные», а для нашего регистра мы еще не устанавливали признак «Записывать» в подписке.
Ответ нужно искать в типовых процедурах обработки проведения.
В процедуре ОбработкаПроведения() модуля документа «Заказ Поставщику» предыдущие записи нашего регистра сохраняются вплоть до выполнения процедуры «ПроведениеСерверУТ.ЗаписатьНаборыЗаписей(ЭтотОбъект);», внутри которой есть строка «Объект.Движения.Записать();», где они собственно и очищаются.
Т.е. в каком-то месте обработки проведения нашему регистру помимо нашей воли устанавливается признак «Записывать». В отладчике находим это место: «ПроведениеСерверУТ.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);».
Внутри процедуры «ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект)» находим место, где устанавливается этот признак и видим: для того чтобы наш регистр не помечался к записи, его необходимо поместить в массив «ИсключаемыеРегистры».
После добавления нашего регистра в массив, его набор записей не очищается, и его можно использовать в работе. Задача решена.
Итак, если вам не нужно очищать движения документов по регистру при проведении документа, то недостаточно просто для этого документа установить свойство «Удаление движений» = «Не удалять автоматически». Вам также потребуется в исходном программном коде добавить регистр в массив «ИсключаемыеРегистры» типовой процедуры «процедуры «ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект)».
Напомню, что пример рассматривался для конфигурации ERP. Для других конфигураций аналогичные места для внесения правок в типовые модули можно найти отладчиком.
Специалист компании ООО «Кодерлайн»
Вас могут заинтересовать следующие статьи:
94 [PROP_CODE] => TAGS2 [TITLE] => Вас могут заинтересовать следующие семинары: ) --> 95 [PROP_CODE] => TAGS [TITLE] => Вас могут заинтересовать следующие вебинары: ) -->
Вас могут заинтересовать следующие вебинары:
Читайте также: