Замена значений в проводках по бухгалтерскому и в движениях по оперативному учету 1С 7.7 не перепроводя документа

12.07.09

Задачи пользователя - Корректировка данных

Обработка предназначена для замены любых значений проводок как по счетам так и по регистрам не перепроводя документ.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
-
.1247380837 194,00Kb
105
105 Скачать (1 SM) Купить за 1 850 руб.

На авторство не претендую, но самому обработка понадобилась и долго искал как так сделать. Юзайте на здоровье....  

Это условие вставляем в процедуру  ОбработкаПроведения(Параметр). Параметр дописать обязательно!!!   

    Если _АдминПроведениеДокумента(Контекст,Параметр) =1 Тогда
        Возврат;
    КонецЕсли;

    Следующую часть  пишем в глобальной модуль...

//=================================================================
// Возвращает элемент из списка с разделителями по номеру
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Вход :    Стр - строка списка с разделителями
//               Номер - порядковый номер элемента (начиная с 1)
//             Разделитель - символ разделителя в списке
// Выход:   Содержимое элемента (строка)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Функция _ПолучитьЭлемент(Знач Стр,Номер,Разделитель="~") Экспорт
      КолВо=СтрЧислоВхождений(Стр,Разделитель);
      Если (НомерКолВо) Тогда
           Возврат "";
      КонецЕсли;
      Позиция1=1;
      Для Н=1 По КолВо Цикл
          Позиция2=Найти(Стр,Разделитель);
          _Стр=Сред(Стр,Позиция1,Позиция2-1);
          Если Н=Номер Тогда
              Возврат Сред(_Стр,?(Н=1,1,2),СтрДлина(_Стр));
          Иначе
              Стр=СокрЛ(СтрЗаменить(?(Н=1,"@"+Стр,Стр),
                                                       ?(Н=1,"@"+_Стр+Разделитель,_Стр+Разделитель),"@"));
          КонецЕсли;
      КонецЦикла;
КонецФункции

//ROM=================================================================
//    Административное проведение документа
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Вход :    Конт - контекст формы
//             СпМассивов - СписокЗначений наполненный ссылками на др. массивы
// Выход:   1 - выполнено, 0 - не выполнено
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Функция _АдминПроведениеДокумента(Конт,СпМассивов) Экспорт
    Если ТипЗначенияСтр(СпМассивов)<>"СписокЗначений" Тогда
        Возврат 0;
    КонецЕсли;

    Если ПустоеЗначение(СпМассивов.Получить("АдминПроведениеДокумента"))=1 Тогда
        Возврат 0;
    КонецЕсли;

    ШапкаДок=СпМассивов.Получить("DH");
    ТабЧастьДок=СпМассивов.Получить("DT");
    ТабРег=СпМассивов.Получить("RA");
    //===================================
    //ТабРег.ВыбратьСтроку();
    //===================================
    ТабБух=СпМассивов.Получить("1SOPER");
    СуммаОперации=СпМассивов.Получить("СуммаОперации");
    СодержаниеОперации=СпМассивов.Получить("СодержаниеОперации");
    флОчищать=Число(СпМассивов.Получить("флОчищатьДвижения"));
   
    // шапка
    Для Индекс=1 По ШапкаДок.РазмерСписка() Цикл
        ИДРекв="";
        ЗначРекв=ШапкаДок.ПолучитьЗначение(Индекс,ИДРекв);
        Конт.УстановитьАтрибут(ИДРекв,ЗначРекв);
    КонецЦикла;
   
    // таб.часть
    Конт.ЗагрузитьТабличнуюЧасть(ТабЧастьДок);
   
    // движения по регистрам (оперативный учет)
    Если флОчищать=1 Тогда
        Конт.ОчиститьДвижения();
    КонецЕсли;
    СпИстории=СоздатьОбъект("СписокЗначений");
    ИДКолонки="";Заголовок="";
    Для Индекс=1 По ТабРег.КоличествоСтрок() Цикл
        ТабРег.ПолучитьСтрокуПоНомеру(Индекс);
        Для Инд=1 По ТабРег.КоличествоКолонок() Цикл
            ИДКолонки=Инд;
            ИДКолонки=ТабРег.ПолучитьПараметрыКолонки(ИДКолонки,,,,Заголовок);
            Значение=ТабРег.ПолучитьЗначение(Индекс,ИДКолонки);
            ИДРег=_ПолучитьЭлемент(ИДКолонки,1,"_");
            ИДРекв=_ПолучитьЭлемент(ИДКолонки,2,"_");
           
           
            Если ИДРег="Движение" Тогда
               Если ПустоеЗначение(Значение)=0 Тогда
                  ТекРег = Конт.Регистр.ПолучитьАтрибут(ИДРекв);
                  Если Значение=1 Тогда
                  // остаточный регистр, движение приход
                     ТекРег.ДвижениеПриходВыполнить();
                  ИначеЕсли Значение=2 Тогда
                  // остаточный регистр, движение расход
                     ТекРег.ДвижениеРасходВыполнить();
                  ИначеЕсли Значение=3 Тогда
                  // оборотный регистр, движение
                     ТекРег.ДвижениеВыполнить();
                  КонецЕсли;
               КонецЕсли;
            ИначеЕсли ИДРег="История" Тогда
                СпИстории.Установить(ИДРекв,Значение);
                Если ИДРекв="Дата" Тогда
                    флЕстьПустые=0;
                    Для Ин=1 По СпИстории.РазмерСписка() Цикл
                        Если ПустоеЗначение(СпИстории.ПолучитьЗначение(Ин))=1 Тогда
                            флЕстьПустые=1;
                            Прервать;
                        КонецЕсли;
                    КонецЦикла;
                    Если флЕстьПустые=0 Тогда
                        Попытка
                            Конт.УстановитьРеквизитСправочника(СпИстории.Получить("Элемент"),СпИстории.Получить("Реквизит"),СпИстории.Получить("Значение"),СпИстории.Получить("Дата"));
                        Исключение
                            // для док-ов оперативного учета, значение устанавливается только на дату документа
                            Конт.УстановитьРеквизитСправочника(СпИстории.Получить("Элемент"),СпИстории.Получить("Реквизит"),СпИстории.Получить("Значение"),Конт.ДатаДок);
                        КонецПопытки;
                        СпИстории.УдалитьВсе();
                    КонецЕсли;
                КонецЕсли;
               
            Иначе 
                Попытка
                    ТекРег = Конт.Регистр.ПолучитьАтрибут(ИДРег);
                    ТекРег.УстановитьАтрибут(ИДРекв,Значение);
                Исключение
                    //Сообщить("  ");
                КонецПопытки;   
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
   
    // операция, проводки (бух. учет)
    Для Индекс=1 По ТабБух.КоличествоСтрок() Цикл
        ТабБух.ПолучитьСтрокуПоНомеру(Индекс);
        Конт.Операция.НоваяПроводка();
        Конт.Операция.Дебет.Счет = ТабБух.ДТ;
        Конт.Операция.Кредит.Счет = ТабБух.КТ;
        // субконто
        Если ПустоеЗначение(ТабБух.Субконто1ДТ)=0 Тогда
            Конт.Операция.Дебет.Субконто(1,ТабБух.Субконто1ДТ);
        КонецЕсли;
        Если ПустоеЗначение(ТабБух.Субконто2ДТ)=0 Тогда
            Конт.Операция.Дебет.Субконто(2,ТабБух.Субконто2ДТ);
        КонецЕсли;
        Если ПустоеЗначение(ТабБух.Субконто3ДТ)=0 Тогда
            Конт.Операция.Дебет.Субконто(3,ТабБух.Субконто3ДТ);
        КонецЕсли;
        Если ПустоеЗначение(ТабБух.Субконто1КТ)=0 Тогда
            Конт.Операция.Кредит.Субконто(1,ТабБух.Субконто1КТ);
        КонецЕсли;
        Если ПустоеЗначение(ТабБух.Субконто2КТ)=0 Тогда
            Конт.Операция.Кредит.Субконто(2,ТабБух.Субконто2КТ);
        КонецЕсли;                                    
        Если ПустоеЗначение(ТабБух.Субконто3КТ)=0 Тогда
            Конт.Операция.Кредит.Субконто(3,ТабБух.Субконто3КТ);
        КонецЕсли;                                    
        Конт.Операция.Сумма = ТабБух.Сумма;
        Если ПустоеЗначение(ТабБух.ДТ)=0 Тогда
               Если ТабБух.ДТ.Количественный=1 Тогда
                   Конт.Операция.Количество = ТабБух.Количество;
               КонецЕсли;
           ИначеЕсли ПустоеЗначение(ТабБух.КТ)=0 Тогда
              Если ТабБух.ДТ.Количественный=1 Тогда
                   Конт.Операция.Количество = ТабБух.Количество;
               КонецЕсли;
           Иначе // выбраны оба счета
               Если (ТабБух.ДТ.Количественный=1) или (ТабБух.ДТ.Количественный=1) Тогда
                   Конт.Операция.Количество = ТабБух.Количество;
               КонецЕсли;
           КонецЕсли;
           Конт.Операция.Валюта = ТабБух.Валюта;
           Конт.Операция.ВалСумма = ТабБух.ВалСумма;
        Для Инд=1 По Метаданные.РеквизитПроводки() Цикл
            ИД=Метаданные.РеквизитПроводки(Инд).Идентификатор;
            Конт.Операция.УстановитьАтрибут(ИД,ТабБух.ПолучитьЗначение(Индекс,ИД));
        КонецЦикла;

    КонецЦикла;
    Попытка
        Конт.Операция.СуммаОперации = СуммаОперации;
           Конт.Операция.Содержание = СодержаниеОперации;
        Конт.Операция.Записать();
    Исключение
        Возврат 0;
    КонецПопытки;
    Возврат 1;
КонецФункции

См. также

Чистка данных Корректировка данных Программист Пользователь Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Архив различных обработок 1С 7.7 с открытым исходным кодом для работы с данными при свертке, выгрузке, исправлении, модификации информационной базы. Можно использовать любую обработку в качестве заготовки для добавления собственных функций.

1 стартмани

13.05.2021    8159    12    etmarket    0    

3

Корректировка данных Акт сверки Программист Платформа 1С v7.7 Платформа 1С v8.3 1С:Управление торговлей 10 1С:Комплексная 7.7 1С:Торговля и склад 7.7 Россия Бухгалтерский учет Управленческий учет НДС Абонемент ($m)

Пример реализации сверок между базами и исправления расхождений в обе стороны, из 7.7 -> в 8.3 и из 8.3 -> в 7.7 на обычных формах. Фундаментальные обработки, которые работают на постоянной основе и поддерживают идентичность данных между базами основных поставщиков и основных покупателей (их соответствие прописано в модуле). Используется Новый COMОбъект("V77.Application"), пример использования внешнего источника данных. Реализация в поступление. Поступление в поступление. Корректировка поступления в корректировку отгрузки. СчФ выданный в СчФ полученный. Исправление СчФ полученного в исправление СчФ выданного. Перенос документа Реализация 7.7 в Поступление 8, Перемещение 7.7 в Поступление 8. Акт сверки взаиморасчетов (несколько организаций). Все обработки запускаются в базе 1С Предприятие 8 (обычные формы).

1 стартмани

03.10.2019    14984    31    ksnik    6    

4

Корректировка данных Программист Пользователь Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Универсальная обработка 7.7, представленная здесь, до сих пор почему-то по функционалу гораздо беднее, чем общеизвестная типовая "Универсальный подбор и обработка объектов" (UNIREPS82\UniversalSelection) 8.2-8.3", мне не хватило возможности выполнить произвольный код обработчика объектов. Данная обработка "UChoice.ert" является полным аналогом "UniversalSelection", представляет собой консоль выполнения произвольного кода, позволяет делать с объектами информационной базы 1С 7.7 абсолютно все, что угодно, а не узкий, сложно настраиваемый набор команд, на мой взгляд, она существенно превосходит имеющиеся аналоги, поэтому ничем другим кроме нее я не пользуюсь.

1 стартмани

04.04.2019    16759    30    ksnik    9    

4

Корректировка данных Бухгалтер Бухгалтерский учет 7.7 1С:Упрощенное налогообложение 7.7 Россия Бухгалтерский учет НДС Абонемент ($m)

Для 1С:Предприятия 8 переход на НДС 20% сделан, а для 7.7 я не нашел. Выкладываю.

1 стартмани

24.12.2018    18777    34    pentanom    25    

5

Корректировка данных Программист Бухгалтер Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Обработка, исправляющая ситуацию с отрицательными номерами строк в табличной части

1 стартмани

31.08.2017    13504    1    C0mmander_Alex    1    

3

Корректировка данных Платформа 1С v7.7 Конфигурации 1cv7 Россия Абонемент ($m)

1. Обработка позволяет совершать следующие действия над объектами: а. СПРАВОЧНИКИ: удаление; пометка на удаление; снятие пометки на удаление. б. ДОКУМЕНТЫ: удаление; пометка на удаление; снятие пометки на удаление; проведение; отмена проведения; выключить проводки; включить проводки. 2. Действия могут быть ограничены некоторыми условиями. 3. Существует отбор по видам объектов. 4. Есть возможность обработать подчиненные справочники.

1 стартмани

30.04.2017    22615    82    DUH    0    

5

Корректировка данных Программист Пользователь Платформа 1С v7.7 Конфигурации 1cv7 Россия Абонемент ($m)

Обработки можно использовать в любой конфигурации 1С-Предприятия 7.7. Обработки позволяют просмотреть/изменить значения любого реквизита документов/справочников, существующих в базе. В обработках реализован множественный отбор по значениям реквизитов (для табличной части документов тоже). В обработке документов реализованы следующие действия: Перенумерация; проведение; отмена проведения; пометка на удаление; непосредственное удаление; снятие пометки удаления; изменение реквизитов; очистка реквизитов; удаление строк табличной части; вывод на печать и в файлы *.xls,*.csv,*.dbf,*.xml реквизитов шапки и табличной части. В обработке справочников реализованы следующие действия: Перенумерация; пометка на удаление; непосредственное удаление; снятие пометки удаления; изменение реквизитов; очистка реквизитов; очистка истории значений периодического реквизита; перенос справочника в другую базу подобной конфигурации по OLE; вывод на печать реквизитов и истории значений периодических реквизитов; вывод реквизитов в файлы *.xls,*.csv,*.dbf,*.xml; отчет по структуре справочников, вывод и обработка ссылок на выбранные элементы.

1 стартмани

23.11.2016    38882    224    SanchoD    15    

13

Корректировка данных Системный администратор Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

База данных помечается Suspect, когда SQL Server не может читать файлы данных, связанные с базой данных с жесткого диска. В этом случае сделать бекап базы нельзя, но можно попробовать образ диска. После того как возможность читать файлы данных восстановлена, вы можете перезапустить службу SQL Server, и если возможно, произойдет автоматическое восстановление. Что делать, если информационная база 1С7.7 на SQL Server 2000 перешла в состояние suspect? Если это произошло утром и бекап сделан, Вы, конечно, можете грохнуть и раскатать базу заново (вечером это проблематичнее), но не торопитесь - возможно, поможет detach+attach или другие методы, изложенные в данной публикации.

1 стартмани

08.11.2016    23285    ksnik    5    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Ёпрст 1065 13.07.09 08:22 Сейчас в теме
Утомили одним и тем же :
>>>>>>>>>"не перепроводя документ"<<<<<<<<<<<<<<<

Откуда вы все берёте ЭТОТ БРЕД ???

Движения у регистра пишутся только ПРОВЕДЕНИЕМ документа и никак иначе.
Можно только руками поправить табличку движений/итогов или прямым запросом.

И еще, ваш алгоритм - именно ПЕРЕПРОВЕДЕНИЕ документа , просто регистр пишет движуху из переданного ТЗ/СЗ .

И идея вовсе не новая, посмотрите МОД, от pb, например.
А чтоб это работало, у документа должна быть снята галка "автоматическое удаление движений".

aleks_cons; +1 Ответить
2. Tiger77 69 13.07.09 16:52 Сейчас в теме
Проводки можно корректировать не перепроводя документы. А вот регистры - нет...
aleks_cons; +1 Ответить
3. legioner 164 14.07.09 04:12 Сейчас в теме
Старо и не интересно
aleks_cons; +1 Ответить
4. Арчибальд 2709 14.07.09 10:35 Сейчас в теме
Вообще-то в Бух 7.7. регистров не наблюдается...
5. Arin 29.09.11 18:13 Сейчас в теме
Оставьте свое сообщение