Комментарии
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(1) Надавайте по щупальцам программистам 1с (: Ситуация с непроведенными документами с движениями возникает в стандартных конфах в разных ситуациях. Например при активном использовании УРБД. Опять-таки движения в таком документе часто можно решить Документ.Записать(РежимЗаписиДокумента.ОтменаПроведения). Для себя в комплексной обработке делал такое. Завтра оценю на работе код. Может в расширенном виде лучше будет.
(1) Для 8-ки явление непроведенного документа с движениями очень распространено: так в таблице регистров есть колонка "Активность" и у непроведенного документа могут быть записи в регистре с Активностью = ложь.
При необходимости, при проведении документа, в определенных случаях не нужно делать повторные расчеты, а достаточно изменить одну запись, а остальным поставить активность = истина. Это резко увеличивает скорость проведения (аналог вкл./выкл. проводок операции в 7.7). Станадартные запросы 1с к регистрам игнорируют "неактивные" записи регистров. Если работаете с прямыми запросами к базе, не забудьте учесть "Активность" в запросе.
Для "старых" документов в "закрытом" периоде неактивные записи регистров являются "информационным мусором". Их имеет смысл и удалить для сокращения объема базы.
При необходимости, при проведении документа, в определенных случаях не нужно делать повторные расчеты, а достаточно изменить одну запись, а остальным поставить активность = истина. Это резко увеличивает скорость проведения (аналог вкл./выкл. проводок операции в 7.7). Станадартные запросы 1с к регистрам игнорируют "неактивные" записи регистров. Если работаете с прямыми запросами к базе, не забудьте учесть "Активность" в запросе.
Для "старых" документов в "закрытом" периоде неактивные записи регистров являются "информационным мусором". Их имеет смысл и удалить для сокращения объема базы.
Сколлько понакомментили )
(1) Объясню и я коллеге ) Посмотри документ в любой типовой "Корректировка записей регистров накопления", у него вообще выключена возможность проведения, а следовательно Проведен всегда равно Ложь. И при этом у него конечно же могут быть движения.
Это просто пример. В данном случае все регулируется Активностью. Я к тому что для восьмерки такая ситуация не следствие косяков программиста.
ЗЫ: Кстати! Автор, Ваша обработка такие движения тоже найдет и потрет преспокойненько??? ))) Или же все-таки есть проверка на разрешено/запрещено проведение (я не качал)?...
(1) Объясню и я коллеге ) Посмотри документ в любой типовой "Корректировка записей регистров накопления", у него вообще выключена возможность проведения, а следовательно Проведен всегда равно Ложь. И при этом у него конечно же могут быть движения.
Это просто пример. В данном случае все регулируется Активностью. Я к тому что для восьмерки такая ситуация не следствие косяков программиста.
ЗЫ: Кстати! Автор, Ваша обработка такие движения тоже найдет и потрет преспокойненько??? ))) Или же все-таки есть проверка на разрешено/запрещено проведение (я не качал)?...
Иногда в наследство достается конфа с огромным количеством доработанного функционала среди которого могут быть очень неожиданные кривости. И отловить все такие точки достаточно сложно и долго. А работать как-то дальше надо =)
Добавлю про наличие проводок у непроведенных - встречается. Например, в некоторых партнерских конфигурациях, в которых не только сие чудо случается по необъяснимой причине (безо всяких РИБ), но и другие не менее чудные неприятности типа затроения движений по некоторым регистрам, закономерность появления которых не смогли выявить даже разработчики, а потому заботливо вставили прямо в конфу обработки, подобные выложенной здесь :)
Спасибо, пригодится.
Есть одно замечание - в параметр запроса вместо ДатаКон поставить КонецДня(ДатаКон) - больше документов найдет :)
И есть еще пожелание - чтоб можно было как-то посмотреть, по какому регистру есть движения у этих непроведенных документов, чтоб потом анализ сделать - кому по рукам бить (себе, как программисту, или юзерам, или платформе...)
Есть одно замечание - в параметр запроса вместо ДатаКон поставить КонецДня(ДатаКон) - больше документов найдет :)
И есть еще пожелание - чтоб можно было как-то посмотреть, по какому регистру есть движения у этих непроведенных документов, чтоб потом анализ сделать - кому по рукам бить (себе, как программисту, или юзерам, или платформе...)
Скажу честно, была такая ситуация с одним документом, он был не проведен, но движения были. Выловил его по отчетам, потом провел и опять сделал не проведенным. Движения исчезли.
Была. бы у меня раньше такая обработка, не пришлось бы ковырять отчеты: запустил и все исправилось.
Спасибо автору за разработку.
Была. бы у меня раньше такая обработка, не пришлось бы ковырять отчеты: запустил и все исправилось.
Спасибо автору за разработку.
Сам сталкиваюсь с подобной проблемой неоднократно при загрузке данных из ТиС 7.7 в БП 8.1. Очень часто бывают такие ситуации особенно если проведение документа вида "Возврат поставщику" програмно отменяется из-за какой-либо ошибки (например отсутствуют остатки партий указанного поставщика в должном количестве) - все сделанные проведения до момента ошибки остаются. Кажется приходилось помечать документ на удаление. Но это гемор - отслеживать движения и проверять проведен документ или нет. Тем более, что он проводится частично и от этого неизбежны косяки в учете.
Тут еще одна беда бывает когда при перезаписи документа (в режиме "Проведение") записи регистра удваиваются!
Тут еще одна беда бывает когда при перезаписи документа (в режиме "Проведение") записи регистра удваиваются!
Сегодня как раз была такая проблема! Самое интересное это у нас в Казахстане в типовой сделали изменения (запретили автоматическое удаление движений) и прописали их в событии ОбработкаУдаленияДвижений :) я когда увидел чуть не упал. Короче результат таков: куча не проведенных документов по которым есть проводки.
(0) Поставлю плюс, но все-таки ценности вашей обработки не понимаю. Во-первых в типовых конфах практически всегда присутствуют документы, у которых есть движения, но которые при этом не проводятся (у них даже свойство "Проведение" стоит в положение "запрещено"). Посмотрите хотя бы на "Операция" в УПП или на "Перенос данных" в ЗиУП. Даже на признак "проведения" опираться нельзя. Как говорилось выше, в типовых конфах существуют механизмы оптимизации проведения документов, при которых записи не удаляются, а помечаются неактивными.
Во-вторых, такую штуку можно сваять в консоли запросов за пару минут.
Во-вторых, такую штуку можно сваять в консоли запросов за пару минут.
Полезная штука, я тоже сталкивалась, ставлю +, токо для УПП строчку надо поправить:" ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"Период ","Регистратор.Дата ");
", а то Случился такой регистр "ПериодыРаботыРАботников" и Ваше СтрЗаменить цеплялось за него..
", а то Случился такой регистр "ПериодыРаботыРАботников" и Ваше СтрЗаменить цеплялось за него..
{Форма.Форма(40)}: Ошибка при вызове метода контекста (Выполнить): {(4, 58)}: Неправильный псевдоним "Регистратор.ДатаыЗанятостиПомещений"
РегистрСведений.Регистратор.ДатаыЗанятостиПомещений КАК <<?>>Регистратор.ДатаыЗанятостиПомещений
ТаблицаРезультата = Запрос.Выполнить().Выгрузить();
бред какой-то :)
ах, там таких много...
Если Лев(ИмяРегистра,7) = "Периоды" Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,".Период ",".Регистратор.Дата ");
ИначеЕсли НЕ Периодический Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"Период","Регистратор.Дата");
КонецЕсли;
У меня, к сожалению, не нашла такой документ. Хотя Активность = Истина, Док.Проведен = Ложь, и движения в общем-то есть. Конфигурация УТ, документ "Отчет о розничных продажах". Просто на 1 из регистров не дал права на изменение. Но 2-м регистрам движения появились, а по остальным нет. Обработку запускал под полными правами. Обратку (ну или идею) считаю полезной, но "+" не ставлю, т.к. проверка не пройдена.
А для чего вот это?
Процедура ОбработатьДвижения(ИмяРегистра,ВидРегистра,Периодический=Истина)
Запрос= Новый Запрос;
ТекстЗапроса =
"ВЫБРАТЬ
| БракВПроизводстве.Регистратор.Ссылка КАК Ссылка
|ИЗ
| РегистрНакопления.БракВПроизводстве КАК БракВПроизводстве
|ГДЕ
| БракВПроизводстве.Регистратор.Проведен = ЛОЖЬ
| И БракВПроизводстве.Период МЕЖДУ &ДатаНач И &ДатаКон";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"БракВПроизводстве",ИмяРегистра);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"РегистрНакопления",ВидРегистра);
Если НЕ Периодический Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"Период","Регистратор.Дата");
КонецЕсли;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("ДатаНач",ДатаНач);
Запрос.УстановитьПараметр("ДатаКон",ДатаКон);
ТаблицаРезультата = Запрос.Выполнить().Выгрузить();
Если ТаблицаРезультата.Количество() Тогда
ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(ТаблицаРезультата,ТЗДокументы);
КонецЕсли;
КонецПроцедуры
А вызывается это так:
//Регистры накопления
Для каждого Регистр Из Метаданные.РегистрыНакопления Цикл
Состояние("Обрабатывается регистр накопления: "+Регистр.Имя);
ОбработатьДвижения(Регистр.Имя,"РегистрНакопления");
КонецЦикла;
//Регистры сведений
Для каждого Регистр Из Метаданные.РегистрыСведений Цикл
Если Регистр.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору Тогда
Состояние("Обрабатывается регистр сведений: "+Регистр.Имя);
Периодический = (Регистр.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический);
ОбработатьДвижения(Регистр.Имя,"РегистрСведений",Периодический);
КонецЕсли;
КонецЦикла;
//Регистры бухгалтерии
Для каждого Регистр Из Метаданные.РегистрыБухгалтерии Цикл
Состояние("Обрабатывается регистр бухгалтерии: "+Регистр.Имя);
ОбработатьДвижения(Регистр.Имя,"РегистрБухгалтерии");
КонецЦикла;
Вроде в аннотации написано, что "Внешний отчет, обработка для 1С: Предприятие 8.1"
Процедура ОбработатьДвижения(ИмяРегистра,ВидРегистра,Периодический=Истина)
Запрос= Новый Запрос;
ТекстЗапроса =
"ВЫБРАТЬ
| БракВПроизводстве.Регистратор.Ссылка КАК Ссылка
|ИЗ
| РегистрНакопления.БракВПроизводстве КАК БракВПроизводстве
|ГДЕ
| БракВПроизводстве.Регистратор.Проведен = ЛОЖЬ
| И БракВПроизводстве.Период МЕЖДУ &ДатаНач И &ДатаКон";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"БракВПроизводстве",ИмяРегистра);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"РегистрНакопления",ВидРегистра);
Если НЕ Периодический Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"Период","Регистратор.Дата");
КонецЕсли;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("ДатаНач",ДатаНач);
Запрос.УстановитьПараметр("ДатаКон",ДатаКон);
ТаблицаРезультата = Запрос.Выполнить().Выгрузить();
Если ТаблицаРезультата.Количество() Тогда
ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(ТаблицаРезультата,ТЗДокументы);
КонецЕсли;
КонецПроцедуры
А вызывается это так:
//Регистры накопления
Для каждого Регистр Из Метаданные.РегистрыНакопления Цикл
Состояние("Обрабатывается регистр накопления: "+Регистр.Имя);
ОбработатьДвижения(Регистр.Имя,"РегистрНакопления");
КонецЦикла;
//Регистры сведений
Для каждого Регистр Из Метаданные.РегистрыСведений Цикл
Если Регистр.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору Тогда
Состояние("Обрабатывается регистр сведений: "+Регистр.Имя);
Периодический = (Регистр.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический);
ОбработатьДвижения(Регистр.Имя,"РегистрСведений",Периодический);
КонецЕсли;
КонецЦикла;
//Регистры бухгалтерии
Для каждого Регистр Из Метаданные.РегистрыБухгалтерии Цикл
Состояние("Обрабатывается регистр бухгалтерии: "+Регистр.Имя);
ОбработатьДвижения(Регистр.Имя,"РегистрБухгалтерии");
КонецЦикла;
Вроде в аннотации написано, что "Внешний отчет, обработка для 1С: Предприятие 8.1"
Вопрос.... а если надо наоборот провести документ и оставить все проводки. Период закрыт, только болтаются не проведенные доки. ВЕРНЕЕ - поставить на документ отметку проведения и все. не трогая регистров и проводок. Как это сделать?
Вакансии
Главный специалист 1С \ эксперт по технологическим вопросам
Москва
зарплата от 220 000 руб.
Полный день
Москва
зарплата от 220 000 руб.
Полный день
Ведущий программист 1C (Группа разработки систем автоматизации Снабжения, Бюджетирования и Документооборота )
Москва
зарплата от 140 000 руб.
Полный день
Москва
зарплата от 140 000 руб.
Полный день
Ведущий программист 1С (Группа разработки интеграции и отраслевых систем )
Москва
зарплата от 140 000 руб.
Полный день
Москва
зарплата от 140 000 руб.
Полный день