Имеется база 1С:Производство+Услуги+Бухгалтерия
не идут остатки Партионного и Складского учета.
Может кто-то сталивался, писал обработку по их выравниванию?
P.S. База обрезана, но каким-то странным образом, как мне сказал клиент "обрезана через внешние компоненты".
Есть документ "Свертка ИБ", но отредактировать его не возможно. В модуле этого документа пусто, в форме пусто (в смысле нет кода)
ХЗ как её так обрезали, но движения по регистрам этот документ сделал.
А какая цель стоит? Прировнять остатки партионного учета к складским или наоборот?
По сути надо либо корректировкой регистров либо эти самым новым регистратором "Свертка ИБ" сторнировать в ноль, текущие остатки по регистру который мы корректируем, и следующим по оси времени документом оформить остатки идентичные тому учету по которому мы выравниваемся. И с момента второго документа остатки по обеим учетам сделаются идентичными.
свертку ИБ создали, провели. потом в модуле убрали обработку проведения чтобы не перепроводили в будущем. итого: документ есть, движения по нему остались, а перепровести нельзя.
вариант: добавить проведение в этом документе чтобы и партии и остатки были одни и те же.
(5) Да, скорее всего так и было. Поэтому исправить этот док и привести его к "складским" остаткам по регистру "Партии" вручную не выйдет.
Есть мысль программно изменить движения это документа по регистру Партии, и привести остатки партий к складским.
Но я с 7.7 очень давно тесно общался, вот и обратился сюда, мож у кого есть пример какой.
Причём легко изменить ВСЕ движения документа, а вот движения только одного регистра я пока не придумал как.
(7) движения регистра делаются просто.
регистр.названиерегистра.его измерения и ресурсы=чему хотите присвоить;
регистр.названиерегистра.ДвижениеПриходВыполнить();
а вообще. проще всего наверное:
сделаю вторую базу, копию текущей. оставить там только справочники, кроме партий.
из первой, текущей базы сформировать правильные остатки по ТМЦ, по остаткам и партиям, в экселе,
также по клиентам взаиморасчеты.
сохранить в эксель.
и в пустую копию базы загрузить как ввод остатков.
думаю, так и делали раньше.
А какая цель стоит? Прировнять остатки партионного учета к складским или наоборот?
По сути надо либо корректировкой регистров либо эти самым новым регистратором "Свертка ИБ" сторнировать в ноль, текущие остатки по регистру который мы корректируем, и следующим по оси времени документом оформить остатки идентичные тому учету по которому мы выравниваемся. И с момента второго документа остатки по обеим учетам сделаются идентичными.
(8) Сторнировать не хватит я думаю. Там же скорее всего как обычно при свертках, рассчитали сальдо и прописали его в движения документа "Свертка ИБ". А на то, что сальдо расходится по партионному и складским учетам - внимания не обратили. Сложность в приведении партионного учета к складскому будет в том, что надо будет выдумать партии ибо насколько я помню их в складском нет :) вот привести складские остатки к партионным заметно проще так как аналитика партионного учета шире чем складского на эти самые партии.
Вырожденный случай оставить партии пустыми - некрасиво будут отчеты выглядеть...
Вообще-то все подобные выравнивания обычно осуществляются простым перепроведением (складских) документов.
После корректной свёртки базы должны оставаться документы ввода остатков по каждому регистру, причём остатки по товарам должны биться в первую очередь в их табличных частях (если, конечно, свёртка была проведена корректно и остатки до самой свёртки бились, были выровнены, корректны).
Кроме документов ввода остатков будут ещё документы, которые были созданы уже после свёртки базы. Нужно просто взять и все-все-все документы, двигающие регистры остатков и партий, перепровести. Посмотреть что получится. В принципе, для типовых, не исковерканных говнокодерами, конфигураций этого должно быть достаточно.
Ну а если после перепроведения остатки по-прежнему не бьются, то можно уже будет копать дальше. Я бы запустил сравнение конфигураций и посмотрел насколько конфигурация вашего клиента отличается от типовой, насколько она исковеркана/переписана, обращая внимание, в первую очередь, на алгоритмы документов, которые двигают регистр остатков и регистр партий (то есть всех "складских" документов: ПоступлениеТМЦ, РеализацияТМЦ, СписаниеТМЦ и тд и тп).
То есть первоначальный план такой:
1) Перепроведение либо всех документов, либо только "складских". Если учёт не выровнялся, то переходим к пункту 2.
2) Сравнение конфигурации клиента с типовой конфигурацией.
(6) Широкий ряд самодельных сверток баз, в том числе и актуальных из этого магазина, фиксирует остатки регистров документами корректировки, а не ввода начальных остатков. При таком способе среза остатков типовые приемы не помогут, так как самих документов, история движений которых обусловила остатки уже может и не быть, а есть только срез регистрового сальдо зафиксированный документом корректировки регистра. Или как в данном примере с учетом архаичности конфигураций 7.7 - регистратором по нужному регистру нового типа. Ему просто движения записали обработкой, а сам документ - пустышка.
(10)
Да, так оно и есть.
В итоге создал такой же свой документ "Пустышку" и в обработке проведения написал следующее (может кому пригодится):
Сторнировал все остатки по регистру "Партии" и ввёл остатки по регистру "МестаХранения" (обычне складкие остатки), правда стоимость партий было решено брыть как среднюю стоимость из "кривых" партий и в дальнейшем руками править:
Процедура ОбработкаПроведения()
Перем Запрос, ТекстЗапроса;
РегПартии = СоздатьОбъект("Регистр.Партии");
ТабЗнач = СоздатьОбъект("ТаблицаЗначений");
ТЗСумм = СоздатьОбъект("ТаблицаЗначений");
РегПартии.ВременныйРасчет();
РассчитатьРегистрыНа(ДатаДок);
РегПартии.ВыгрузитьИтоги(ТабЗнач);
ТЗСумм.Загрузить(ТабЗнач);
ТабЗнач.ВыбратьСтроки();
Пока ТабЗнач.ПолучитьСтроку()=1 Цикл
Регистр.Партии.Партия = ТабЗнач.Партия;
Регистр.Партии.ВидМПЗ = ТабЗнач.ВидМПЗ;
Регистр.Партии.МПЗ = ТабЗнач.МПЗ;
Регистр.Партии.МестоХранения = ТабЗнач.МестоХранения;
Регистр.Партии.Качество = ТабЗнач.Качество;
Регистр.Партии.СрокЭксплуатации = ТабЗнач.СрокЭксплуатации;
//Регистр.Партии.ПрямыеРасходыНУ = ТабЗнач.ПрямыеРасходыНУ;
Регистр.Партии.Заявка = ТабЗнач.Заявка;
Регистр.Партии.Владелец = ТабЗнач.Владелец;
Регистр.Партии.Количество = ТабЗнач.Количество;
Регистр.Партии.КоличествоОС = 0;
Регистр.Партии.Сумма = ТабЗнач.Сумма; ;
Регистр.Партии.СуммаНУ = ТабЗнач.СуммаНУ;
Регистр.Партии.СуммаПР = 0;
Регистр.Партии.ДвижениеРасходВыполнить();
КонецЦикла;
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ДатаДок по ДатаДок;
|ВидМПЗ = Регистр.МестаХранения.ВидМПЗ;
|МПЗ = Регистр.МестаХранения.МПЗ;
|Владелец = Регистр.МестаХранения.Владелец;
|Качество = Регистр.МестаХранения.Качество;
|Количество = Регистр.МестаХранения.Количество;
|МестоХранения = Регистр.МестаХранения.МестоХранения;
|Функция КоличествоКонОст = КонОст(Количество);
|Группировка МПЗ без групп;
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
ТЗСумм.Свернуть("МПЗ","Количество,Сумма");
ТЗСумм.НоваяКолонка("Цена","Число",,,,,,);
ТЗСумм.ВыбратьСтроки();
Пока ТЗСумм.ПолучитьСтроку()=1 Цикл
ТЗСумм.Цена = ТЗСумм.Сумма/?(ТЗСумм.Количество=0,1,ТЗСумм.Количество);
КонецЦикла;
Пока Запрос.Группировка(1) = 1 Цикл
Если Запрос.Количество<=0 тогда
Продолжить;
КонецЕсли;
Регистр.Партии.Партия = ТекущийДокумент();
Регистр.Партии.ВидМПЗ = Запрос.ВидМПЗ;
Регистр.Партии.МПЗ = Запрос.МПЗ;
Регистр.Партии.МестоХранения = Запрос.МестоХранения;
Регистр.Партии.Качество = Запрос.Качество;
//Регистр.Партии.СрокЭксплуатации = ТабЗнач.СрокЭксплуатации;
//Регистр.Партии.ПрямыеРасходыНУ = ТабЗнач.ПрямыеРасходыНУ;
//Регистр.Партии.Заявка = ТабЗнач.Заявка;
Регистр.Партии.Владелец = Запрос.Владелец;
Регистр.Партии.Количество = Запрос.Количество;
//Регистр.Партии.КоличествоОС = 0;
Сумма = 0;
Стр= 0;
Если ТЗСумм.НайтиЗначение(Запрос.МПЗ,Стр,"МПЗ")=1 тогда
Сумма = ТЗСумм.ПолучитьЗначение(Стр,"Цена")*Запрос.Количество;
КонецЕсли;
Регистр.Партии.Сумма = Сумма;
Регистр.Партии.СуммаНУ = Сумма;
Регистр.Партии.СуммаПР = 0;
Регистр.Партии.ДвижениеПриходВыполнить();
КонецЦикла;
КонецПроцедуры
(12) Я уже за семерку не помню просто, там что нельзя отобрать набор записей по регистратору, по нужному регистру, пересобрать его и записать? Чтобы не включать код в сам документ регистратор? В 8.х такое на ура прокатывает...
Я уже за семерку не помню просто, там что нельзя отобрать набор записей по регистратору, по нужному регистру, пересобрать его и записать? Чтобы не включать код в сам документ регистратор? В 8.х такое на ура прокатывает...
Вот и я тоже тыщу лет с 7.7 дело не имел, а тут вот пришлось.
Думаю можно и обработкой перелопатить движения и заново их прицепить к документу.
Но не стал заморачиваться и сделал просто в обработке проведения, провёл, и код ОбработкиПроведения заремил от греха, это ведь разовая операция)