Как в 1 с отменить проведение документа

Программная запись/проведение/отмена проведения документа осуществляется при помощи методаЗаписать(<РежимЗаписи>, <РежимПроведения>) ДокументаОбъекта.

В параметр РежимЗаписи передается одно из значений системного перечисления РежимЗаписиДокумента :

  • Запись (Write)
  • ОтменаПроведения (UndoPosting)
  • Проведение (Posting)

Переданное значение и определяет какое действие производить с выбранным документом. Также при помощи параметра РежимПроведения можно указать оперативное или неоперативное проведение мы используем.

Пример №1. Программная запись документа

СсылкаНаДокумент = Документы.АвансовыйОтчет.НайтиПоНомеру("00000000001");Если НЕ СсылкаНаДокумент = Неопределено Тогда ДокументОбъект = СсылкаНаДокумент.ПолучитьОбъект(); ДокументОбъект.Дата = ТекущаяДата(); ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);КонецЕсли;

Пример №2 Программное проведение документа

Запрос = Новый Запрос;Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(ТекущаяДата()));Запрос.УстановитьПараметр("КонецПериода" , КонецМесяца(ТекущаяДата()));Запрос.Текст = "ВЫБРАТЬ | ВозвратТоваровОтПокупателя.Ссылка |ИЗ | Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя |ГДЕ | ВозвратТоваровОтПокупателя.Дата МЕЖДУ &НачалоПериода И &КонецПериода";Результат = Запрос.Выполнить().Выгрузить();Для Каждого ЭлементРезультата из Результат Цикл ДокументОбъект = ЭлементРезультата.Ссылка.ПолучитьОбъект(); ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);КонецЦикла;

Пример №3 Программная отмена проведения документа

Запрос = Новый Запрос;Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(ТекущаяДата()));Запрос.УстановитьПараметр("КонецПериода" , КонецМесяца(ТекущаяДата()));Запрос.УстановитьПараметр("Счет90" , ПланыСчетов.Хозрасчетный.НайтиПоКоду("90"));Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ХозрасчетныйОбороты.Регистратор |ИЗ | РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода, &КонецПериода, Регистратор, Счет В ИЕРАРХИИ (&Счет90), , , , ) КАК ХозрасчетныйОбороты";Результат = Запрос.Выполнить().Выгрузить();Для Каждого ЭлементРезультата из Результат Цикл ДокументОбъект = ЭлементРезультата.Регистратор.ПолучитьОбъект(); ДокументОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);КонецЦикла;

В связи с последними удачными попытками 1С бороться с пиратством с выходом платформы 8.3.10.2667 и выше нас очень часто спрашивают как удалить, снести пиратскую или как иногда называют «ломанную» («крякнутую») платформу 1С?

Примечательно, что данная информация пригодится очень многим пользователям. С начала года большое количество запросов в интернете на тему «нарушением целостности системы» или «как удалить эмулятор ключа защиты». Казалось бы довольно тривиальная задача? Но не спешите. Есть несколько вариантов развития событий. Разберемся подробнее.

Чтобы правильно удалить ломанную платформу 1С и установить на ее месте лицензионную сначала надо уточнить как же была «крякнута» 1С 8. До недавнего момента существовало как минимум два действенных способа это сделать:

  • Подмена dll — backbas.dll 8.3
  • Эмулятор ключа защиты

Как восстановить backbas.dll

Если ваша платформа была сломана этим образом, то вы отделаетесь малой кровью 🙂 Мы рекомендуем просто удалить все версии платформы 1С и установить заново свежую версию платформы, до этого, конечно, позаботиться о приобретении лицензии(возможно даже у вас все есть — надо найти бумажную лицензионную карточку 1С). Если лицензии у вас нет, вы можете заказать ее покупку у нас.

Как удалить эмулятор ключа hasp

Вторым нелегальным способом использовать платформу 1С является эмулирование драйвера ключа защиты Hasp. Если у вас этот случай, то тут придется повозиться. Вам надо снести или как пишут грохнуть все следы пребывания эмулятора HASP у вас на компьютере.

Попробуйте выполнить следующие шаги:

  • Остановить все службы, которые содержут ключевые слова «Hasp», «HLServer», «NHSrvice» и т.п.;
  • При наличии, остановить службу Sentinel LDK License Manager, так как её работа может вызывать ошибку при удалении файлов и отключении служб, описанных в следующих пунктах:

  • Удалить все компоненты HASP через «Панель управления»;
  • Зайдите в диспетчер устройств. В ветке «Системные устройства» удалите «Virtual Usb Bus Enumerator». Это может быть скрытое устройство в ОС, которое можно отобразить через пункт меню «Вид»-«Показать скрытые устройства»;
  • В диспетчере устройст удалить все устройства содержащие следующие слова: «Hardlock», «Haspnt», «HASP fridge» , «aksfridge»;
  • Удалите ветку реестра HKEY_LOCAL_MACHINE\System\CurrentControlSet\NEWHASP\ ;
  • Удаляем ветку реестра HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Emulator\HASP ;
  • Удалить все ветки реестра содержающие слово Hasp, fridge, safenet, sentiel;
  • Из папок «%systemroot%\System32» и «%systemroot%\System32\drivers» удалить все файлы aks*.*, «hardlock.sys», «haspnt.sys» и т.п.

После выполнения действий перезапустите компьютер.

Потом, необходимо установить драйвер ключа HASP. Делается это через «Все программы-1С Предприятие 8-Дополнительно-Установка драйвера защиты».

Зайдите в 1С и в окне «О программе» посмотрите какую лицензию стала использовать платформа 1С.

Потребовалось в УТ быстро удалить все движения по банку, дело вроде легкое — отменить проведение всех поступлений и списаний безналичных денежных средств, но не тут то было…

При попытке отмены проведения выполнялись проверки на условия оплаты по заказу и документ ни как не отменял проведения

Ну не может типовым способом, заставим не типовым: Через запрос делаем выбору необходимых нам документов и в обработке результата пишем:

Код 1C v 8.3

 Для Каждого СтрокаРезультата Из РезультатТаблица Цикл
//алгоритм обработки строки результата - начало
ДокОбъект = СтрокаРезультата.Ссылка.ПолучитьОбъект();
Для Каждого Движение ИЗ ДокОбъект.Движения Цикл
Если Движение.Количество() > 0 Тогда
Точка = Найти(Строка(Движение), ".");
ВидРегистра = Лев(Строка(Движение), Точка - 13);
РегистрИмя = СокрП(Сред(Строка(Движение), Точка + 1));
Если ВидРегистра = "РегистрНакопления" Тогда
НаборЗаписей = РегистрыНакопления.СоздатьНаборЗаписей();
ИначеЕсли ВидРегистра = "РегистрБухгалтерии" Тогда
НаборЗаписей = РегистрыБухгалтерии.СоздатьНаборЗаписей();
ИначеЕсли ВидРегистра = "РегистрСведений" Тогда
НаборЗаписей = РегистрыСведений.СоздатьНаборЗаписей();
ИначеЕсли ВидРегистра = "РегистрРасчета" Тогда
НаборЗаписей = РегистрыРасчета.СоздатьНаборЗаписей();
КонецЕсли;
НаборЗаписей.Отбор.Регистратор.Установить(ДокОбъект.Ссылка);
Иначе
НаборЗаписей = Движение;
КонецЕсли;
Попытка
НаборЗаписей.Записать();
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
ДокОбъект.Проведен = Ложь;
//ДокОбъект.ОбменДанными.Загрузка = Истина;
ДокОбъект.Записать(режимзаписидокумента.запись);
//алгоритм обработки строки результата - конец
КонецЦикла;

Готовая функция для использования в своих обработках или общем модуле:

Код 1C v 8.3

 Процедура УдалитьДвиженияДокумента(Документ)
ДокОбъект = Документ.ПолучитьОбъект();
Для Каждого Движение ИЗ ДокОбъект.Движения Цикл
Если Движение.Количество() > 0 Тогда
Точка = Найти(Строка(Движение), ".");
ВидРегистра = Лев(Строка(Движение), Точка - 13);
РегистрИмя = СокрП(Сред(Строка(Движение), Точка + 1));
Если ВидРегистра = "РегистрНакопления" Тогда
НаборЗаписей = РегистрыНакопления.СоздатьНаборЗаписей();
ИначеЕсли ВидРегистра = "РегистрБухгалтерии" Тогда
НаборЗаписей = РегистрыБухгалтерии.СоздатьНаборЗаписей();
ИначеЕсли ВидРегистра = "РегистрСведений" Тогда
НаборЗаписей = РегистрыСведений.СоздатьНаборЗаписей();
ИначеЕсли ВидРегистра = "РегистрРасчета" Тогда
НаборЗаписей = РегистрыРасчета.СоздатьНаборЗаписей();
КонецЕсли;
НаборЗаписей.Отбор.Регистратор.Установить(ДокОбъект.Ссылка);
Иначе
НаборЗаписей = Движение;
КонецЕсли;
Попытка
НаборЗаписей.Записать();
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
КонецПроцедуры

Сегодня любой бухгалтер, работающий на предприятии или на аутсорсе имеет возможность автоматизированного ведения учета сразу нескольких организаций. Это стало возможным благодаря широкому использованию программных продуктов от фирмы 1С. Состав программ, которых достаточно разнообразен и охватывает большую часть отраслей бизнеса. Звучит воодушевляющие, но как у всего, так и у программного обеспечения 1С есть ахиллесова пята, которая заключается в функционале удаления данных и разделения одной информации базы по организациям на несколько. Опытные пользователи или администраторы и программисты 1С закидают меня камнями. Однако будем честны и взглянем правде в глаза. Возвращаясь к началу публикации, завел речь о ведении бухгалтерами двух или нескольких организаций одновременно, представим банкротство одной компании из списка сопровождаемых бухгалтером фирм. Удобно ли будет в 1С удалить данные по организации пользователю из конфигурации, например, «Бухгалтерия предприятия 3.0»? Нет, и на мой скромный взгляд, столкнувшиеся с этим вопросом коллеги не дадут соврать. Рассмотрим еще одну неприятную ситуацию, когда необходимо удалить какой-то отдельный документ или возможно определенный элемент справочника и предопределенный (стандартный) функционал удаления объектов не справляется с этой задачей потому, что много ссылок на этот объект есть, но все эти связанные ссылки не нужны. Понятно, что удаление не осуществляется из-за ссылающихся объектов и это естественно поправимо. А если таких объектов ни один, ни два и при этом пользователь не уверен к какой именно организации относится документ. Вот тогда начинаются танцы, отнимающие драгоценное рабочее время, которого и без того вечно не хватает. Перед тем, как перейдем к основной части публикации, хочется внести ясность в то, что я не утверждаю полную бесполезность стандартной обработки удаления объектов, а констатирую факт непрактичности.

Универсальное удаление данных из 1С или решение проблем с удалением

Как видим проблема существует и доставляет ряд неприятностей конечным пользователям программ 1С. Однако не отчаиваемся, ведь Вы уже читаете эту статью, а это значит, что решение найдено и называется «Универсальное удаление данных из 1C». Не придется больше «ломать» голову вопросом как удалить данные в 1С 8.3. Что это такое и с чем его едят? Это обработка, которая предназначается для удаления данных из базы с функцией наглядного отображения ссылочного дерева. После того, как приходит небольшое понимание того, с чем сегодня будем иметь дело, давайте определимся с функциональными возможностями обработки. А также рассмотрим список поддерживаемых конфигураций 1С. После этого приступим к практической части, где на примерах разберем работу обработки.
Список того, что умеет данное решение:

  • Удаление объектов. Основная функция обработки предназначенная для удаления объекта 1С из информационной базы. Позволяет выбирать конкретные «Метаданные» и «Вид метаданных». Доступен выбор способа удаления(полное удаление);
  • Удаление не используемых объектов. Способ удаления объектов, которые не используются в конфигурации. Из списка выбранных метаданных обработка предоставляет список значений неиспользуемых данных;
  • Монопольный режим. Осуществляется возможность организации монопольного способа удаления, который ускоряет процесс удаления большого количества данных;
  • Дерево ссылок. Перед тем как произвести удаление данных обработка отобразит полный список зависимых ссылок в регистрах сведений, где можно перепроверить правильность выбранных на удаление данных;
  • Максимальная глубина поиска. Настройка, позволяющая отыскать полную ссылочную зависимость удаляемого объекта с объектами базы.

Поддерживаемые конфигурации:

Решение универсально и будет работать в любой конфигурации как типовой, так и не типовой с доработками и без них на платформе 8.2 и 8.3. В процессе разработки работа была успешно протестирована в следующих типовых конфигурациях: 1С:Бухгалтерия предприятия 3.0, 1С:Зарплата и управление персоналом 3.0, 1С:Управление торговлей 11, 1С:Управление торговлей 10.3, 1С:Управление нашей фирмой, редакция 1.6, 1С:Управление производственным предприятием, редакция 1.3.

Теперь давайте плавно отплывем от берега теории и причалим к практическим примерам, на которых разберем различного рода использование данной обработки. На практике постараемся рассмотреть все возможные варианты, при которых может быть использована обработка.

Универсальное удаление на практике

В начале хотелось бы разобрать самые примитивные ситуации, при которых пришлось бы использовать обработку «Универсальное удаление данных из 1С». Так будет проще разобраться с функционалом обработки и понять принцип ее работы. В качестве примера буду использовать конфигурацию «Бухгалтерия предприятия 3.0». И так первым делом необходимо добавить обработку в конфигурацию. Это можно сделать двумя способами, первым и самым простым, просто перетащить обработку из каталога(компьютера) в конфигурацию. Или вторым способом, перейдя в раздел «Администрирование»-«Печатные формы, отчеты и обработки»-«Дополнительные отчеты и обработки», нажать кнопку «Добавить из файла» и добавить данную обработку. Начальная страница, она же «Настройки» выглядит следующим образом.
На данной странице выбирается один из режимов работы, после чего осуществляется переход к этапу выбора данных для удаления. Выберем режим «Удаление объектов» и нажмем кнопку «Далее», чтобы перейти к выбору метаданных, которые хотим удалить. На закладке «Что и как нужно удалить?» выбираем метаданные, например, «Документы» и следом укажем вид метаданных «Ведомость в банк». Далее по необходимости можем указать чек-бокс «Удалять в монопольном режиме», но лучше это делать при большом количестве удаляемых объектов. Поэтому в данной ситуации активировать флажок не будем. Также нужно не забывать установить глубину поиска, чтобы полностью удалить документ и все связанные с ним ссылки (если данный реквизит не был установлен, тогда глубина поиска по умолчанию будет равна трем). После заполнения всех реквизитов, перейдем к заполнению табличной части, где с помощью кнопки «Добавить» можно добавить один конкретный объект. Если необходимо добавить сразу все объекты выбранного вида метаданных, тогда можно воспользоваться кнопкой «Заполнить» и табличная часть автоматически будет заполнена объектами, выбранного вида метаданных. В данном случае добавим только один объект и нажмем «Далее».
На закладке «Удаление» отобразится табличная часть, в которой выведется информация в виде дерева со всеми связанными с объектом ссылками. В табличной части отражается:

  • «Представление» — представление удаляемого объекта;
  • «Ссылка» — связанная ссылка на объект;
  • «Полное имя» — отображается полное наименование удаляемого объекта;
  • «Количество подчиненных» — отображается количество подчиненных объектов удаляемых метаданных.

Перед удалением, рекомендую «по диагонали» пробежаться по данной табличной части и проверить удаляемые объекты, после чего нажать кнопку «Удалить». Обработка произведет удаление информации из базы данных.
Вот так выглядит примитивный вариант использования данной обработки. Далее перейдем к более сложной ситуации, которая была упомянута в начале публикации. Постановка задачи звучит так:

Одна организация из списка наших компаний обанкротилась и теперь нужно удалить из базы все связанные с ней объекты.

Используя обработку «Универсальное удаление данных из 1С», подобная задача становится сущим пустяком. Сейчас в этом наглядно убедимся, запускаем обработку. На закладке «Настройки» выбираем флажок «Удаление объектов» и нажимаем кнопку далее. В реквизите «Метаданные» укажем объект метаданных «Справочники», а в виде метаданных справочник «Организации». При подобно выбранных реквизитах будут доступны для указания в табличной части все имеющиеся организации в базе. С помощью кнопки «Добавить» укажем удаляемую организацию, в качестве примера, это Конфетпром ООО. Стоит отметить, что в текущем случае нелишним будет активировать удаление в монопольном режиме. Так как, объектов метаданных организации будет приличное количество. Также укажем глубину поиска, чтобы обработка могла максимально захватить и отобразить на удаление все объекты этой организации.
Результатом работы обработки будет выведенное дерево ссылок, которое необходимо удалить, чтобы полностью очистить базу от информации по данной организации. Удаляем эти данные и на этом удаление организации можно считать завершенным.
Ну и на десерт оставили сладкое, ситуацию когда встает необходимость разделения единой базы, в которой велся учет по двум организациям на две совершенно отдельные друг от друга информационные базы. Да, не типичный пример, но имеет место быть. И к сожалению, стандартный механизм удаления объектов в конфигурациях 1С никогда не сможет справиться с поставленной задачей. Рассмотрим как подобное можно провернуть, используя обработку универсального удаления. Перейдем в конфигуратор центральной базы и выгрузим базу в *.dt-файл. Следом создадим новую чистую базу, которую назовем, к примеру, «Бухгалтерия 2».
После создания новой базы, открываем конфигуратор и загружаем ранее выгруженный *.dt-файл. Таким образом, получается две базы с одинаковыми данными. В порядке очереди запускаем первую (центральную базу) и с помощью обработки универсального удаления отчищаем информацию от второй организации способом, который был описан выше. Аналогичные манипуляции производим с новой базой (Бухгалтерия 2), в которую уже был загружен основной *dt-файл, за исключением удаления информации о первой организации. В результате получаем две отдельные базы, в которых теперь будет вестись отдельный учет. То есть, в центральной базе будет вестись учет по Конфетпром ООО, а в базе (Бухгалтерия 2) учет по организации (Торговый дом «Комплексный» ООО). Казалось бы, простая в использовании обработка, но так много применений, которые упрощают жизнь. На этой ноте хотелось бы закончить, удачи и спасибо за внимание!!!
Купить «Универсальное удаление данных из 1С»

Добавить комментарий