Привет, коллеги.

Имеется база 1С:Производство+Услуги+Бухгалтерия
не идут остатки Партионного и Складского учета.

Может кто-то сталивался, писал обработку по их выравниванию?

P.S. База обрезана, но каким-то странным образом, как мне сказал клиент "обрезана через внешние компоненты".
Есть документ "Свертка ИБ", но отредактировать его не возможно. В модуле этого документа пусто, в форме пусто (в смысле нет кода)
ХЗ как её так обрезали, но движения по регистрам этот документ сделал.
---
А какая цель стоит? Прировнять остатки партионного учета к складским или наоборот?
По сути надо либо корректировкой регистров либо эти самым новым регистратором "Свертка ИБ" сторнировать в ноль, текущие остатки по регистру который мы корректируем, и следующим по оси времени документом оформить остатки идентичные тому учету по которому мы выравниваемся. И с момента второго документа остатки по обеим учетам сделаются идентичными.
---
как мне сказал клиент "обрезана через внешние компоненты". Наверное, таким образом у клиента в памяти отложилось "внешней обработкой".
Есть документ "Свертка ИБ" В типовой ПУБ 385 (другой у меня нету) такой документ вообще отсутствует.
В модуле этого документа пусто, в форме пусто (в смысле нет кода) См. п.1 - добавили документ в метаданные, программно создали и программно же сформировали его движения.
Может кто-то сталивался, писал обработку по их выравниванию? Есть мнение, что это не обязательно: http://1c-pro.ru/threads/1s-pub-7-7-partionnyj-skladskoj-uchjot-tmc.49820/
---
Свертка ИБ
свертку ИБ создали, провели. потом в модуле убрали обработку проведения чтобы не перепроводили в будущем. итого: документ есть, движения по нему остались, а перепровести нельзя.
вариант: добавить проведение в этом документе чтобы и партии и остатки были одни и те же.
---
Да, скорее всего так и было. Поэтому исправить этот док и привести его к "складским" остаткам по регистру "Партии" вручную не выйдет.

Есть мысль программно изменить движения это документа по регистру Партии, и привести остатки партий к складским.
Но я с 7.7 очень давно тесно общался, вот и обратился сюда, мож у кого есть пример какой.
Причём легко изменить ВСЕ движения документа, а вот движения только одного регистра я пока не придумал как.
---
движения регистра делаются просто.
регистр.названиерегистра.его измерения и ресурсы=чему хотите присвоить;
регистр.названиерегистра.ДвижениеПриходВыполнить();

а вообще. проще всего наверное:
сделаю вторую базу, копию текущей. оставить там только справочники, кроме партий.
из первой, текущей базы сформировать правильные остатки по ТМЦ, по остаткам и партиям, в экселе,
также по клиентам взаиморасчеты.
сохранить в эксель.

и в пустую копию базы загрузить как ввод остатков.
думаю, так и делали раньше.
---
Добавил вознаграждение
---
А какая цель стоит? Прировнять остатки партионного учета к складским или наоборот?
По сути надо либо корректировкой регистров либо эти самым новым регистратором "Свертка ИБ" сторнировать в ноль, текущие остатки по регистру который мы корректируем, и следующим по оси времени документом оформить остатки идентичные тому учету по которому мы выравниваемся. И с момента второго документа остатки по обеим учетам сделаются идентичными.
---
момента О, а это идея... сторнировать движения по документу!
Попробую, если прокатит, то 2$m Ваши)
---
Сторнировать не хватит я думаю. Там же скорее всего как обычно при свертках, рассчитали сальдо и прописали его в движения документа "Свертка ИБ". А на то, что сальдо расходится по партионному и складским учетам - внимания не обратили. Сложность в приведении партионного учета к складскому будет в том, что надо будет выдумать партии ибо насколько я помню их в складском нет :) вот привести складские остатки к партионным заметно проще так как аналитика партионного учета шире чем складского на эти самые партии.

Вырожденный случай оставить партии пустыми - некрасиво будут отчеты выглядеть...
---
Вообще-то все подобные выравнивания обычно осуществляются простым перепроведением (складских) документов.
После корректной свёртки базы должны оставаться документы ввода остатков по каждому регистру, причём остатки по товарам должны биться в первую очередь в их табличных частях (если, конечно, свёртка была проведена корректно и остатки до самой свёртки бились, были выровнены, корректны).

Кроме документов ввода остатков будут ещё документы, которые были созданы уже после свёртки базы. Нужно просто взять и все-все-все документы, двигающие регистры остатков и партий, перепровести. Посмотреть что получится. В принципе, для типовых, не исковерканных говнокодерами, конфигураций этого должно быть достаточно.

Ну а если после перепроведения остатки по-прежнему не бьются, то можно уже будет копать дальше. Я бы запустил сравнение конфигураций и посмотрел насколько конфигурация вашего клиента отличается от типовой, насколько она исковеркана/переписана, обращая внимание, в первую очередь, на алгоритмы документов, которые двигают регистр остатков и регистр партий (то есть всех "складских" документов: ПоступлениеТМЦ, РеализацияТМЦ, СписаниеТМЦ и тд и тп).

То есть первоначальный план такой:
1) Перепроведение либо всех документов, либо только "складских". Если учёт не выровнялся, то переходим к пункту 2.
2) Сравнение конфигурации клиента с типовой конфигурацией.
---
Широкий ряд самодельных сверток баз, в том числе и актуальных из этого магазина, фиксирует остатки регистров документами корректировки, а не ввода начальных остатков. При таком способе среза остатков типовые приемы не помогут, так как самих документов, история движений которых обусловила остатки уже может и не быть, а есть только срез регистрового сальдо зафиксированный документом корректировки регистра. Или как в данном примере с учетом архаичности конфигураций 7.7 - регистратором по нужному регистру нового типа. Ему просто движения записали обработкой, а сам документ - пустышка.
---
Да, так оно и есть.
В итоге создал такой же свой документ "Пустышку" и в обработке проведения написал следующее (может кому пригодится):
Сторнировал все остатки по регистру "Партии" и ввёл остатки по регистру "МестаХранения" (обычне складкие остатки), правда стоимость партий было решено брыть как среднюю стоимость из "кривых" партий и в дальнейшем руками править:

```1c
    Процедура ОбработкаПроведения()
    Перем Запрос, ТекстЗапроса;

    РегПартии = СоздатьОбъект("Регистр.Партии");
    ТабЗнач = СоздатьОбъект("ТаблицаЗначений");
    ТЗСумм = СоздатьОбъект("ТаблицаЗначений");
    РегПартии.ВременныйРасчет();
    РассчитатьРегистрыНа(ДатаДок);
    РегПартии.ВыгрузитьИтоги(ТабЗнач);
    ТЗСумм.Загрузить(ТабЗнач);
    ТабЗнач.ВыбратьСтроки();
    Пока ТабЗнач.ПолучитьСтроку()=1 Цикл
    Регистр.Партии.Партия = ТабЗнач.Партия;
    Регистр.Партии.ВидМПЗ = ТабЗнач.ВидМПЗ;
    Регистр.Партии.МПЗ = ТабЗнач.МПЗ;
    Регистр.Партии.МестоХранения = ТабЗнач.МестоХранения;
    Регистр.Партии.Качество = ТабЗнач.Качество;
    Регистр.Партии.СрокЭксплуатации = ТабЗнач.СрокЭксплуатации;
    //Регистр.Партии.ПрямыеРасходыНУ = ТабЗнач.ПрямыеРасходыНУ;
    Регистр.Партии.Заявка = ТабЗнач.Заявка;
    Регистр.Партии.Владелец = ТабЗнач.Владелец;
    Регистр.Партии.Количество = ТабЗнач.Количество;
    Регистр.Партии.КоличествоОС = 0;

    Регистр.Партии.Сумма = ТабЗнач.Сумма; ;
    Регистр.Партии.СуммаНУ = ТабЗнач.СуммаНУ;
    Регистр.Партии.СуммаПР = 0;

    Регистр.Партии.ДвижениеРасходВыполнить();
    КонецЦикла;

    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ДатаДок по ДатаДок;
    |ВидМПЗ = Регистр.МестаХранения.ВидМПЗ;
    |МПЗ = Регистр.МестаХранения.МПЗ;
    |Владелец = Регистр.МестаХранения.Владелец;
    |Качество = Регистр.МестаХранения.Качество;
    |Количество = Регистр.МестаХранения.Количество;
    |МестоХранения = Регистр.МестаХранения.МестоХранения;
    |Функция КоличествоКонОст = КонОст(Количество);
    |Группировка МПЗ без групп;
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;

    ТЗСумм.Свернуть("МПЗ","Количество,Сумма");
    ТЗСумм.НоваяКолонка("Цена","Число",,,,,,);
    ТЗСумм.ВыбратьСтроки();
    Пока ТЗСумм.ПолучитьСтроку()=1 Цикл
    ТЗСумм.Цена = ТЗСумм.Сумма/?(ТЗСумм.Количество=0,1,ТЗСумм.Количество);
    КонецЦикла;

    Пока Запрос.Группировка(1) = 1 Цикл
    Если Запрос.Количество<=0 тогда
    Продолжить;
    КонецЕсли;
    Регистр.Партии.Партия = ТекущийДокумент();
    Регистр.Партии.ВидМПЗ = Запрос.ВидМПЗ;
    Регистр.Партии.МПЗ = Запрос.МПЗ;
    Регистр.Партии.МестоХранения = Запрос.МестоХранения;
    Регистр.Партии.Качество = Запрос.Качество;
    //Регистр.Партии.СрокЭксплуатации = ТабЗнач.СрокЭксплуатации;
    //Регистр.Партии.ПрямыеРасходыНУ = ТабЗнач.ПрямыеРасходыНУ;
    //Регистр.Партии.Заявка = ТабЗнач.Заявка;
    Регистр.Партии.Владелец = Запрос.Владелец;
    Регистр.Партии.Количество = Запрос.Количество;
    //Регистр.Партии.КоличествоОС = 0;

    Сумма = 0;
    Стр= 0;
    Если ТЗСумм.НайтиЗначение(Запрос.МПЗ,Стр,"МПЗ")=1 тогда
    Сумма = ТЗСумм.ПолучитьЗначение(Стр,"Цена")*Запрос.Количество;
    КонецЕсли;

    Регистр.Партии.Сумма = Сумма;
    Регистр.Партии.СуммаНУ = Сумма;
    Регистр.Партии.СуммаПР = 0;

    Регистр.Партии.ДвижениеПриходВыполнить();
    КонецЦикла;

    КонецПроцедуры
```
---
Я уже за семерку не помню просто, там что нельзя отобрать набор записей по регистратору, по нужному регистру, пересобрать его и записать? Чтобы не включать код в сам документ регистратор? В 8.х такое на ура прокатывает...
---
Я уже за семерку не помню просто, там что нельзя отобрать набор записей по регистратору, по нужному регистру, пересобрать его и записать? Чтобы не включать код в сам документ регистратор? В 8.х такое на ура прокатывает...

Вот и я тоже тыщу лет с 7.7 дело не имел, а тут вот пришлось.

Думаю можно и обработкой перелопатить движения и заново их прицепить к документу.
Но не стал заморачиваться и сделал просто в обработке проведения, провёл, и код ОбработкиПроведения заремил от греха, это ведь разовая операция)