Типовая обработка по свертке ЕРП. Возможные проблемы и их решение

02.01.22

База данных - Свертка базы

Добрый день, коллеги. Хочу рассказать про опыт использования типовой обработки свертки ЕРП.  А именно про ряд ошибок, которые могут встречаться в типовой обработке свертки ЕРП.

Файлы

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

Наименование Скачано Купить файл
Обработка по типовой свертке ЕРП с исправленными ошибками.
.epf 130,77Kb
28 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Добрый день, коллеги. Хочу рассказать про опыт использования типовой обработки свертки ерп.  А именно про ряд ошибок, которые могут встречаться в типовой обработке свертки ЕРП. У меня обработка заработала после их исправления. Ошибки актуальны для версии ерп 2.4.12.83. 

Вот пример ошибок. 

1.  Использование несуществующего метода табличной части документа - УдалитьСтроку();

Пример

 
 Пример ошибки из процедуры СформироватьДокументыВводаОстатковЗаказыНаПроизводство()
Для Каждого СтрокаГрафик Из СтрокиГрафик Цикл
	ДокОст.ТрудозатратыГрафик.УдалитьСтроку(СтрокаГрафик);
КонецЦикла;	
// Заменил его таким образом 
Для Каждого СтрокаГрафик Из СтрокиГрафик Цикл
	ДокОст.ТрудозатратыГрафик.Удалить(СтрокаГрафик);
КонецЦикла;	
//Аналогичное надо сделать для всех таких случаев 

 

 

 

2.  Не всегда в метода НайтиСледующий() в параметр передается структура.

 
 Пример ошибки из процедуры СформироватьДокументыВводаОстатковЗаказыНаПроизводство()

 

Для Каждого СтрокаТЧ Из МассивСтрокВыходныеИзделияКУдалению Цикл
            СтрокиГрафик = ДокОст.ВыходныеИзделияГрафик.НайтиСтроки("КлючСвязиВыходныеИзделия", СтрокаТЧ.КлючСвязи);
            Для Каждого СтрокаГрафик Из СтрокиГрафик Цикл
                ДокОст.ВыходныеИзделияГрафик.Удалить(СтрокаГрафик);
            КонецЦикла;
            ДокОст.ВыходныеИзделия.Удалить(СтрокаТЧ);
        КонецЦикла;
// Заменил его таким образом 
Для Каждого СтрокаТЧ Из МассивСтрокВыходныеИзделияКУдалению Цикл
            СтрокиГрафик = ДокОст.ВыходныеИзделияГрафик.НайтиСтроки(Новый Структура("КлючСвязиВыходныеИзделия", СтрокаТЧ.КлючСвязи));
            Для Каждого СтрокаГрафик Из СтрокиГрафик Цикл
                ДокОст.ВыходныеИзделияГрафик.Удалить(СтрокаГрафик);
            КонецЦикла;
            ДокОст.ВыходныеИзделия.Удалить(СтрокаТЧ);
КонецЦикла;
//Аналогичное надо сделать для всех таких случаев 

 

3. После выполнения запросов для ввода остатков выбираются неверные элементы пакета. 

 
  Пример ошибки из процедуры СформироватьДокументыВводаОстатковЗаказыДавальцу()
     Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |ТабРег.ЗаказКлиента КАК Заказ,
    |ТабРег.Номенклатура КАК Номенклатура,
    |ТабРег.Характеристика КАК Характеристика,
    |ТабРег.КодСтроки КАК КодСтроки,
    |ТабРег.Склад КАК Склад,
    |ТабРег.Серия КАК Серия,
    |ВЫБОР КОГДА ЕстьNULL(ТабУслуги.ЗаказаноОстаток, 0) = 0 Или ЕстьNULL(ТабУслуги.СуммаОстаток, 0) = 0 Тогда
    |    0
    |ИНАЧЕ ВЫРАЗИТЬ(ТабУслуги.СуммаОстаток/ТабУслуги.ЗаказаноОстаток КАК Число(15,2)) КОНЕЦ КАК Цена,
    |ТабРег.ЗаказаноОстаток КАК Количество
    |ПОМЕСТИТЬ Продукция
    |ИЗ РегистрНакопления.ЗаказыКлиентов.Остатки(&ГраницаОст, ЗаказКлиента ССЫЛКА Документ.ЗаказДавальца
    |                                    И ЗаказКлиента.Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовДавальцев.Закрыт)) КАК ТабРег
    |ЛЕВОЕ СОЕДИНЕНИЕ
    | РегистрНакопления.УслугиДавальцуКОформлению.Остатки(&ГраницаОст, ЗаказДавальца.Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовДавальцев.Закрыт)) КАК ТабУслуги
    |ПО ТабРег.Номенклатура = ТабУслуги.Номенклатура
    |    И ТабРег.Характеристика = ТабУслуги.Характеристика
    |    И ТабРег.ЗаказКлиента = ТабУслуги.ЗаказДавальца
    |ГДЕ ТабРег.ЗаказаноОстаток>0  
    |;
    |////////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |ТабРег.ЗаказПоставщику КАК Заказ,
    |ТабРег.Номенклатура КАК Номенклатура,
    |ТабРег.Характеристика КАК Характеристика,
    |ТабРег.КодСтроки КАК КодСтроки,
    |ТабРег.Склад КАК Склад,
    |ТабРег.ЗаказаноОстаток КАК Количество
    |ПОМЕСТИТЬ Материалы
    |ИЗ РегистрНакопления.ЗаказыПоставщикам.Остатки(&ГраницаОст, ЗаказПоставщику ССЫЛКА Документ.ЗаказДавальца
    |                                        И ЗаказПоставщику.Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовДавальцев.Закрыт)) КАК ТабРег
    |ГДЕ ТабРег.ЗаказаноОстаток>0
    |;
    |////////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    Заказ
    |ИЗ (
    |ВЫБРАТЬ Заказ ИЗ Продукция
    |ОБЪЕДИНИТЬ ВСЕ
    |ВЫБРАТЬ Заказ ИЗ Материалы
    |) КАК Свод
    |;
    |////////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ * ИЗ Продукция
    |;
    |////////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ * ИЗ Материалы
    |";
    ЗаполнитьПараметрыЗапросаДатаСвертки(Запрос);
    Результат = Запрос.Выполнить();
    Если Результат.Пустой() Тогда
        Возврат;
    КонецЕсли;
    ТаблицаЗаказов = Результат[0].Выгрузить();
    Если ТаблицаЗаказов.Количество() = 0 Тогда
        Возврат;
    КонецЕсли;
    ТаблицаПродукция = Результат[1].Выгрузить();
    ТаблицаМатериалы = Результат[2].Выгрузить();

// Заменил его таким образом, написал, только кусочек после запроса.  


    ЗаполнитьПараметрыЗапросаДатаСвертки(Запрос);
    
    Результат = Запрос.ВыполнитьПакет();
    Если Результат[2].Пустой() Тогда
        Возврат;
    КонецЕсли;
    ТаблицаЗаказов = Результат[2].Выгрузить();
    ТаблицаПродукция = Результат[3].Выгрузить();
    ТаблицаМатериалы = Результат[4].Выгрузить();

//Нужно проанализировать запросы нескольких процедур, чтобы правильно поправить код

 

 

Подобная ошибка встречается в процедурах:
СформироватьДокументыВводаОстатковЗаказыНаПроизводство()
СформироватьДокументыВводаОстатковЗаказыДавальцу()
СформироватьДокументыВводаОстатковЗаказыНаРемонт()
СформироватьДокументыВводаОстатковЗаказыПереработчику()

 

4. Присвоение значения несуществующему реквизиту табличной части. Касается реквизита "Отменено" и "ПричинаОтмены". 

 
 Пример ошибки из процедуры СформироватьДокументыВводаОстатковЗаказыДавальцу()
Для Каждого СтрокаТЧ Из ДокОст.Материалы Цикл
    Если СтрокаТЧ.Отменено Тогда
        Продолжить;
          ИначеЕсли СтрокиМатериалы = Неопределено Тогда
         СтрокаТЧ.Отменено = Истина;
         СтрокаТЧ.ПричинаОтмены = ПричинаОтменыЗаказа;
         Продолжить;
   КонецЕсли;
// Заменил его таким образом, просто закомментировал обращение к "отменено".
        Для Каждого СтрокаТЧ Из ДокОст.Материалы Цикл
    
            //Если СтрокаТЧ.Отменено Тогда
            //    Продолжить;
            //ИначеЕсли СтрокиМатериалы = Неопределено Тогда
            //    СтрокаТЧ.Отменено = Истина;
            //    СтрокаТЧ.ПричинаОтмены = ПричинаОтменыЗаказа;
            //    Продолжить;
            //КонецЕсли;
           
  

 

 

Подобную ошибку я нашел в процедурах:
СформироватьДокументыВводаОстатковЗаказыДавальцу() 
СформироватьДокументыВводаОстатковЗаказыПереработчику()

5. Также, есть нюанс связанная с переполнение тч документа для процедуры СформироватьДокументыВводаОстатковМатериалыВПроизводстве()
Возможно, эта ошибка возникла только у меня, все равно здесь опишу её решение, я ограничил количество тч для документа.

 
 Данная проблема у меня возникла только для СформироватьДокументыВводаОстатковМатериалыВПроизводстве()
 
Прикладываю обработку, в которой я поправил все найденные мной ошибки.
Обработка актуальна для версии ЕРП 2.4.12.83. 
Для базы, которую я сворачивал - обработка отработала без ошибок. Для другой базы возможно вылетят новые. Большую часть исправленного кода я пометил комментариями, но часть однотипных ошибок вроде - Новый Структура() я оставил без изменения.
В более актуальных релизах, например 2.4.13.103 я увидел, что часть ошибок уже поправили, поэтому, возможно, типовая свертка отработает без проблем на новых релизах. 

Вступайте в нашу телеграмм-группу Инфостарт

Обработка Свертка Ерп

См. также

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    38241    215    111    

203

Свертка базы Системный администратор Программист 1С v8.3 1С:Бухгалтерия государственного учреждения 1С:Бухгалтерия 3.0 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 10 1С:Управление торговлей 11 1С:Розница 2 Платные (руб)

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

6000 руб.

22.05.2024    4864    27    10    

36

Свертка базы Программист 1С v8.3 1С:Управление торговлей 10 Россия Управленческий учет Абонемент ($m)

Когда база большая и старая или по каким-то причинам хотелось бы начать с чистого листа, но с переходящими остатками, фирма 1С предлагает механизм свертки ИБ. Всё хорошо, но при этом в новую базу тащится куча ненужного, а зачастую просто куча ошибок и лишнего. Альтернатива: загрузка остатков товаров по партиям и взаиморасчётов по документам.

3 стартмани

13.12.2024    1344    3    Farpost    2    

1

Свертка базы Программист Бухгалтер 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Абонемент ($m)

Правила переноса остатков из конфигурации Бухгалтерия 3.0 в конфигурацию Бухгалтерия 3.0. Правила могут быть полезны для свертки рабочей базы документами "Ввод начальных остатков" или для перехода из типовой Бухгалтерии в отраслевую конфигурацию, основанную на ней, или для перехода с УСН на ОСНО.

2 стартмани

26.09.2024    2652    98    kumi2012    46    

6

Свертка базы Инструментарий разработчика Программист 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бухгалтерский учет НДС Абонемент ($m)

Представлена рабочая обработка для перехода на учет партий в учете запасов (не универсальная). Дополнительно расписана технология работы с документом ОперацияБух и с аналитиками учета (основная цель).

2 стартмани

19.08.2024    1851    4    RustIG    5    

4

Свертка базы Программист 1С v8.3 1С:Управление торговлей 10 Управленческий учет Абонемент ($m)

Представлена обработка для свертки УТ 10.3 по новой концепции - когда сворачиваем "подокументно", а не "целиком и сразу по всем регистрам".

2 стартмани

03.04.2024    4390    24    RustIG    19    

19

Свертка базы Программист 1С v8.3 1С:Управление торговлей 10 Управленческий учет Абонемент ($m)

Внешняя обработка (для конфигураций на обычных формах) сравнивает остатки на дату и в разрезе организации по всем регистрам накопления. Сравнение происходит между базами по технологии Com-соединение. Используется при свертке базы.

2 стартмани

27.03.2024    1554    10    RustIG    0    

4

Свертка базы Программист Бухгалтер 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Абонемент ($m)

Обработка обращается к остаткам по счету 41.1 на дату, что выбрал пользователь, пробегается по ним и заполняет документ "Операция, введенная вручную".

1 стартмани

18.03.2024    1722    17    config    3    

3
Для отправки сообщения требуется регистрация/авторизация