Как автоматически заполнить обработкой табличную часть документа "Ввод начальных остатков" (Тип операции = "Расчеты с партнерами"). 1С: ERP

20.12.19

Задачи пользователя - Мастера заполнения

В 1С: ERP (релиз 2.4.8.82) есть документ "Ввод начальных остатков". Он предназначен для переноса остатков из старых учетных программ при переходе на работу в новой конфигурации. В инструкциях на официальном сайте 1С пользователям новой конфигурации 1С: ERP предлагается заполнить этот документ. Каким образом они будут заполнять, не уточняется. Можно предположить, что предлагается интерактивно, вручную, ввести эти документы. Это следует из картинок в инструкции 1С. В данной статье я предлагаю способ автоматического программного заполнения документа "Ввод начальных остатков" с помощью обработки "Загрузка данных из табличного документа". При этом способе заполнения, время на процесс переноса остатков сокращается в десятки или даже сотни раз.

Скачать исходный код

Наименование Файл Версия Размер
Настройки загрузки в табличный документ - Долги Клиентов из Эксель
.mxlz 15,96Kb
14
.mxlz 1 15,96Kb 14 Скачать
Пример заполнения таблицы в обработке Загрузка данных из табличного документа
.mxl 3,17Kb
10
.mxl 3,17Kb 10 Скачать

При написании данной статьи алгоритмы тестировались на 1с ERP релиз 2.4.8.82 

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

 
 документ "Первичный документ"

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


Сами остатки, в виде табличной части со ссылкой на первичный документ (указывающий на документ из старой программы), отражают остатки в разрезе документов. Такие остатки загружаются с целью привязки к документам.


В процессе внедрения конфигурации возникает необходимость переноса различного вида остатков. Такой процесс может затянуться на продолжительный срок. После переноса остатков в новую базу, Заказчик может в старой базе закрывать период, изменяя документы и, таким образом, изменяя остатки.
Поэтому процесс переноса остатков может повторится. Чтобы уменьшить количество переносимой заново информации, можно переносить остатки в разрезе документов. Именно поэтому, в 1с ERP необходимо создавать документы "Первичный документ", которые являются ссылкой на документ в старой базе (любого вида).

 

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


Итак, у нас стоит задача переноса остатков Долгов Клиентов в 1с ERP. Не важно из какой базы или учетной системы.


Важно! До переноса остатков, из старой учетной системы в новую учетную систему, 1с ERP, должны быть перенесены и настроены:

  1.  Организации, Клиенты (Партнеры), Контрагенты, Договора (необязательно для данной задачи), валюты. 
  2.  Должна быть настроена связь Контрагентов и Партнеров (В Контрагентах указаны Партнеры).
  3.  В Контрагентах должны быть заполнены необходимые реквизиты: Наименование, ИНН, КПП. 

 

Итак, начнем. 

Шаг 1. Из старой учетной системы мы выгрузили остатки в виде некой таблицы, например Excel. В этой таблице у нас присутствуют колонки:

  1. Организация
  2. Наименование Контрагента
  3. ИНН (Контрагента)
  4. КПП (Контрагента)
  5. валюта
  6. Сумма долга
  7. Дата платежа (долга).

Шаг 2. Создаем Вводы начальных остатков по каждой Организации.
По каждой организации ведется отдельный учет долгов. У одного Контрагента могут быть долги перед несколькими организациями!
Для создания Ввода начальных остатков вызываем меню "НСИ и администрирование - Начальное заполнение - начальное заполнение" в открывшемся окне "Начальное заполнение" открываем пункт "Документы ввода начальных остатков". В форме документов открываем в левой панели пункт "Расчеты с партнерами - задолженность клиентов". В правой части окна нажимаем кнопку "Создать".
В окне нового документа выбираем необходимую нам организацию. Сохраняем документ. табличную часть не заполняем.

 
 Создаем Вводы начальных остатков по каждой Организации.

Шаг 3. Открываем обработку "Загрузку данных из табличного документа".
У меня есть стандартная версия данной обработки с диска ИТС, которая предназначена для запуска в Обычном приложении. В Управляемом приложении эта обработка не запускается. Поэтому, для работы с ней, мне необходимо запустить 1с ERP в режиме обычного приложения.
Не буду рассказывать, как запустить 1с ERP в режиме обычного приложения. Для этого есть инструкции в интернет. Если потребуется, могу привести ссылки.

 
 Открываем обработку "Загрузка данных из табличного документа".

Шаг 4. Заполняем шапку обработки
В шапке обработки выбираем в поле "Режим загрузки" = "Загрузка в табличную часть".
В поле Ссылка указываем созданный на шаге 2 документ, табличную часть которого мы будем заполнять.
В поле "табличная часть" указываем "Расчеты с партнерами".
В документе "Ввод начальных остатков" множество табличных частей. В данной задаче нам нужна именно указанная табличная часть.

Шаг 5. Заходим на вкладку "Настройка"
При выборе табличной части документа, в Настройках выбрались все реквизиты данной табличной части. 
Выключаем не нужные нам колонки "Номер", "Дата". В конфигураторе эти реквизиты называются "НомерРасчетногоДокумента", "ДатаРасчетногоДокумента". Эти колонки заполняются в других типах документа "Ввод начальных остатков" (реквизит документа "Тип операции")
Колонку "Контрагент" перемещаем в самый верх.
Колонка "Тип объекта расчетов" видна только в форме документа. В табличной части ее нет. Она формируется динамически, исходя из заполненных данных в колонках "Объект расчетов", "Расчетный документ". Дело в том, что в нашем Вводе начальных остатков мы будем загружать остатки долгов Клиентов в разрезе Реализаций (в колонке "Тип объекта расчетов" будет "Реализация клиенту"). 

 
 Заполняем вкладку "Настройка"

Шаг 6. На закладке "Табличный документ" добавляем колонки:
ИНН, КПП, Организация, Номер первичного документа, Код партнера, Наименование Контрагента, Дата платежа.
Наименования этих колонок мы записываем в 1 строке в колонки с номерами с 11 по 17.
Колонки ИНН, КПП, Организация служат для поиска данных в базе данных в алгоритме загрузки, который отрабатывает по каждой строке табличной части.
Колонки Номер первичного документа, Код партнера и т.п. - это колонки, в которые динамически подставляются данные алгоритмом. Эти данные необходимы для функционирования алгоритма. По сути это некий буфер обмена данными. 
Алгоритм заполняет каждую строку по ячейкам. Заполнение идет слева направо по порядку. колонки буфера обмена заполняются динамически и используются алгоритмом для заполнения остальных колонок.

Шаг 7. Открываем вкладку "Настройка", будем писать код алгоритма!
В строке с колонкой "Контрагент", в колонке "Режим загрузки" указываем "Вычислять".
В колонке "Выражение" вставляем код:

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    Контрагенты.Ссылка КАК Контрагент,
|    Контрагенты.Наименование КАК НаименованиеКонтрагента,
|    Контрагенты.Партнер.Код КАК КодПартнера
|ИЗ
|    Справочник.Контрагенты КАК Контрагенты
|ГДЕ
|    Контрагенты.ИНН = &ИНН
|    И Контрагенты.КПП = &КПП
|    И Контрагенты.ПометкаУдаления = ЛОЖЬ";
Запрос.установитьПараметр("ИНН",    ТекстыЯчеек[11]);
Запрос.установитьПараметр("КПП",    ТекстыЯчеек[12]);

Выборка = Запрос.Выполнить().Выбрать();

Если Выборка.Количество()=1 Тогда
    Выборка.Следующий();
    Результат         = Выборка.Контрагент;
    //Сообщить("Контрагент = "+Результат);
    ТекстыЯчеек[15] = Выборка.КодПартнера;
    ТекстыЯчеек[16] = Выборка.НаименованиеКонтрагента;
ИначеЕсли Выборка.Количество()>1 Тогда
    Сообщить("По (ИНН,КПП) = ("""+ТекстыЯчеек[11]+","+ТекстыЯчеек[12]+""") найдено более 1 Контрагента!");
    Выборка.Следующий();
    Результат         = Выборка.Контрагент;
    //Сообщить("Контрагент = "+Результат);
    ТекстыЯчеек[15] = Выборка.КодПартнера;
    ТекстыЯчеек[16] = Выборка.НаименованиеКонтрагента;
ИначеЕсли Выборка.Количество()=0 Тогда
    Сообщить("Выборка Контрагентов пустая");
КонецЕсли; 

Объясняю действие кода:

Алгоритм обработки строки отрабатывает последовательно выражения всех строк сверху вниз по порядку.
Так как строка с колонкой "Контрагент" у нас указана первой сверху в табличной части обработки "загрузка данных из табличного документа", то она будет выполнена первой при начале обработки каждой строки.
В момент начала выполнения Выполняется запрос к базе данных. 
В запрос устанавливаются значения, которые берутся как члены массива "ТекстыЯчеек". Из скриншота, в верхней части окна мы видим расшифровку назначения данного массива, в программном контексте выполнения алгоритма заполнения ячейки. В массиве "ТекстыЯчеек" лежат тексты ячеек данной строки. Таким образом, обратившись к члену массива с соответствующим номером, мы получим текст соседней ячейки. Таким образом, мы получаем Тексты колонок "ИНН" и "КПП", а точнее ячеек строки в текущей строке, которая сейчас обрабатывается алгоритмом.

Поясню. Алгоритм обработки выполняется в каждой строке табличной части последовательно. Закладка "Табличный документ". Например, алгоритм начал выполняться в строке 2. Далее, в каждой строке начинается последовательно запускаться алгоритмы по каждой колонке. Берутся колонки, которые указаны в Настройках. Выполняются алгоритмы по их заполнению последовательно, сверху вниз. Например, сначала выполняется алгоритм колонки Контрагент, затем Партнер, затем Договор и т.д.

Далее заполняется переменная Выборка результатом запроса.
Далее Выборка последовательно проходится в цикле. 
В отдельных случаях выволятся сообщения об ошибках (когда в запросе по ИНН и КПП найдено несколько Контрагентов или ни одного).
Если все ок и Контрагент найден (по ИНН и КПП) тогда выполняется основной алгоритм обработки Выборки.
Если найдено несколько Контрагентов (по ИНН и КПП), берется первый. В сообщения выводится предупреждение об этом. Пользователь сам должен подумать что в данной ситуации делать (возможно потребуется заменить Контрагента в сформированном документе).

ВАЖНО! В тексты ячеек 15 и 16 записываются КодПартнера и НаименованиеКонтрагента. Текст этих ячеек будут использоваться в алгоритмах заполнения в последующих колонках.
Почему код партнера - это понятно. Чтобы найти ссылки по коду. Почему именно наименование а не код Контрагента? Такой вопрос задаст программист или пользователь, который незнаком с ERP. 
Отвечаю - потому что в 1с ERP, в справочнике Контрагенты, нет стандартного реквизита "код". У справочника, на закладке Данные, тип кода = Строка, длина кода = 0. Основное представление = наименование. Такая же ситуация у половины справочников в 1с ERP.

В строке с колонкой "Партнер", в колонке "Режим загрузки" указываем "Вычислять".
В колонке "Выражение" вставляем код:

Результат = Справочники.Партнеры.НайтиПоКоду(ТекстыЯчеек[15]);

Объясняю действие кода:
Используется текст ячейки, который был заполнен на предыдущем шаге (при выполнении запроса к БД).
Ищется ссылка по коду и подставляется в значение ячейки.

В строках с колонками "Договор" и "Валюта", "Сумма", в колонке "Режим загрузки" указываем "Искать".
В колонке "Выражение" вставляем "Наименование", "Код", "" соответственно.

В строке с колонкой "Дата платежа", в колонке "Режим загрузки" указываем "Вычислять".
В колонке "Выражение" вставляем код:

Результат                = Дата(ТекстыЯчеек[17]);

Объясняю действие кода:
Берется текст ячейки 17. В нее будет заносится текстовые данные, отражающие "Дату платежа".
Формат данных "ГГГММДД" например "20190101". ГГГГ = 2019 (год). ММ = число месяца, ДД - число дня

В строках с колонками "Сумма (регл.)", "Сумма (упр.)", в колонке "Режим загрузки" указываем "Вычислять".
В колонке "Выражение" вставляем код:

Результат =  ТекстыЯчеек[5];

Объясняю действие кода:
Берется текст ячейки 5. В ней указывается сумма долга.

В строке с колонкой "Объект расчетов", в колонке "Режим загрузки" указываем "Вычислять".
В колонке "Выражение" вставляем код:

ПервичныйДокумент = Документы.ПервичныйДокумент.СоздатьДокумент();
ПервичныйДокумент.Дата                         = ТекущаяДата();
ПервичныйДокумент.ТипПервичногоДокумента     = Перечисления.ТипыПервичныхДокументов.РеализацияКлиенту;
ПервичныйДокумент.Организация                 = Справочники.Организации.НайтиПоНаименованию(ТекстыЯчеек[13]);
ПервичныйДокумент.Контрагент                 = Справочники.Контрагенты.НайтиПоНаименованию(ТекстыЯчеек[16]);
ПервичныйДокумент.Партнер                     = Справочники.Партнеры.НайтиПоКоду(ТекстыЯчеек[15]);
ПервичныйДокумент.Валюта                     = Справочники.Валюты.НайтипоКоду("643");
ПервичныйДокумент.ПорядокРасчетов             = Перечисления.ПорядокРасчетов.ПоНакладным;
ПервичныйДокумент.СуммаДокумента             = ТекстыЯчеек[5];
ПервичныйДокумент.СуммаРегл                 = ТекстыЯчеек[5];
ПервичныйДокумент.Договор                     = Справочники.ДоговорыКонтрагентов.ПустаяСсылка();

Попытка
    ПервичныйДокумент.Записать(РежимЗаписиДокумента.Проведение);
    Сообщить("документ создался");
    
    Результат = ПервичныйДОкумент.Ссылка;

    ТекстыЯчеек[14] = ПервичныйДОкумент.Номер;
ИСключение
    ПервичныйДокумент = Документы.ПервичныйДокумент.СоздатьДокумент();
    Сообщить("документ НЕ создался по причине: "+ОписаниеОшибки());
КонецПопытки;

Объясняю действие кода:
Создается новый экземпляр документа ПервичныйДокумент с заполнением реквизитов.
При заполнении реквизитов используются ранее заполненные вручную или динамически колонки (массив ТекстыЯчеек).
После заполнения, документ записывается в базу данных, с проведением.
Если попытка записи удалась, то в значение текущей ячейки записывается ссылка на созданный документ.
В текст ячейки 14 записывается номер созданного документа (для доступа в алгоритме заполнения следующей ячейки).

В строке с колонкой "Расчетный документ", в колонке "Режим загрузки" указываем "Вычислять".
В колонке "Выражение" вставляем код:

ПервичныйДокумент_Номер = ТекстыЯчеек[14];

Если ПервичныйДокумент_Номер<>"" Тогда
    Результат = Документы.ПервичныйДокумент.НайтиПоНомеру(ПервичныйДОкумент_Номер , ТекущаяДата());
КонецЕсли;

Объясняю действие кода:

Используется текст ячейки 14. Если на предыдущем шаге успешно создан документ в БД, то в ячейку 14 записан его номер. Этот номер используется для нахождения ссылки на данный документ. Эта ссылка записывается в значение ячейки.


Шаг 8. Заполняем табличную часть на закладке "Табличный документ".
Данные заполняются, как указано на скриншоте.
Важно заполнить ИНН, КПП Контрагента, Наименование Организации, Дату платежа, Валюту, Сумму.

Шаг 9. Нажимаем кнопку "Загрузить".
Обработка отработает алгоритмы и перенесет данные в табличную часть документа.
По каждой строке создастся документ "Первичный документ", его ссылка будет прописана в строке табличной части документа "Ввод начальных остатков".
Если будут ошибки, то их необходимо обработать вручную, с применением мозга. Это отдельная задача, не рассматриваемая в данной статье.

Шаг 10. Проверяем заполнение табличной части документа "Ввод начальных остатков".
Если что-то не сработало несколько раз, можно дополнить или изменить код алгоритмов.

 

Дополнительно я выложил настройки стандартной обработки "загрузка данных из табличного документа". Настройки включают в себя программный код, который приведен в статье.

Кроме того, выложил mxl файл табличного документа. В нем приведен пример заполнения табличной части обработки данными.


Я использовал описанный в статье алгоритм для заполнения большого количества документов Ввод начальных остатков при внедрении 1с ERP на предприятии.
Удачи вам в делах!

ERP загрузка данных из табличного документа обработка

См. также

Автоматический подбор и заполнение ГТД для 1С:Бухгалтерия предприятия 8, редакция 3.0 (платформа 8.2 и 8.3)

Операции по ВЭД Оптовая торговля Розничная торговля Логистика, склад и ТМЦ Мастера заполнения Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

СКАЧАЙТЕ И ПОПРОБУЙТЕ БЕСПЛАТНО! Данная обработка расширяет функционал типовой конфигурации «1С:Бухгалтерия предприятия» и позволяет осуществлять автоматическое заполнение ГТД в документах «Реализация товаров и услуг», «Списание товаров», «Отчет о розничных продажах», «Отчет комиссионера (агента) о продажах», «Требование-накладная», «Возврат товаров от покупателя», «Комплектация номенклатуры», «Безвозмездная передача», «Отчет производства за смену». Обработка предназначена для работы в конфигурации «1С:Бухгалтерия предприятия 8, редакция 3.0» Есть версия обработки оптимизированная для работы в 1CFresh

8280 руб.

19.06.2012    136882    251    81    

213

Заполнение описания номенклатуры с помощью ChatGPT

Мастера заполнения Нейросети Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

Расширение для заполнения описания номенклатуры с помощью модели ИИ ChatGPT. Расширение формирует продающее описание товара по его наименованию с помощью модели искусственного интеллекта. Будет полезно для владельцев интернет магазинов, каталогов товаров и продающих через маркетплейсы. Адаптировано для основных конфигураций: УТ, ЕРП, КА, УНФ. Прошло аудит на 1cfresh.com. Версия для автоматического заполнения

5000 руб.

13.03.2023    16136    42    49    

74

Заполнение описания номенклатуры с помощью GigaChat

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

Расширение для заполнения описания номенклатуры с помощью модели ИИ GigaChat от Сбера. Расширение формирует продающее описание товара по его наименованию с помощью модели искусственного интеллекта. Будет полезно для владельцев интернет магазинов, каталогов товаров и продающих через маркетплейсы. Адаптировано для основных конфигураций: УТ, ЕРП, КА, УНФ.

5000 руб.

08.11.2023    1510    7    0    

14

Заполнение справочника "Автоработы" и справочника "Номенклатура" в Альфа-Авто

Логистика, склад и ТМЦ Мастера заполнения Платформа 1С v8.3 Конфигурации 1cv8 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Обработка заполняет справочник "Автоработы" 3000 авторабот (реквизит сопоставления "Наименование") и справочник "Номенклатура" 200000 артикулами запчастей на популярные модели автомобилей (реквизиты сопоставления "Наименование" и "Артикул").

2000 руб.

07.10.2022    6531    15    0    

13

Заполнение реквизитов контрагентов по ИНН и наименованию для УТ 10.3 и 10.2 и других конфигураций (апрель 2022 года)

Обмен с ГосИС Мастера заполнения Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Простое решение по автоматическому заполнению реквизитов контрагентов (юридических и физических лиц) по ИНН и наименованию. Может использоваться в любых конфигурациях 1С Предприятие 8: УТ 10.2, УТ 10.3 и т.д. Обновление механизмов 2022 года! Программный код открыт.

1200 руб.

23.07.2015    64022    308    15    

177

Списание остатков по счету документом Операция

Мастера заполнения Бухгалтерский учет Управляемые формы 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Универсальная обработка заполнения документа Операция. Позволяет перенести остатки или обороты с одного счета на другой. Или изменить аналитику.

5000 руб.

29.05.2019    11239    6    5    

7

Основной договор в документах для УТ11.5

Мастера заполнения Платформа 1С v8.3 1С:Управление торговлей 11 Россия Платные (руб)

Если вы устали каждый раз выбирать один и тот же договор из множества других при оформлении документов, это расширение для вас! Пометьте один договор как основной и это избавит вас от рутинного поиска необходимого договора.

4560 руб.

26.01.2023    4893    8    1    

7
Комментарии
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. _Dmitry_ 13.01.20 07:57 Сейчас в теме
Все получилось в лучшем виде, делал 1 в 1 как написано, единственное отмечу что обработка существует для УФ, яндексом находится быстро.
2. user1375596 28.04.20 12:31 Сейчас в теме
Спасибо за данное решение. Тоже возникла необходимость внести начальные остатки по контрагентам.
Подскажите, пожалуйста, еще по одному моменту, почему у меня на одну строку табличной части (можно сказать, что на одного Контрагента) создается два первичных документа?

Пробую ваше решение на УТ 11.4
5. pvlunegov 157 29.04.20 06:17 Сейчас в теме
(2) Сложно сказать. Чтобы полноценно ответить на ваш вопрос, мне необходимы детальные сведения о ваших действиях.
Из кода, указанного в публикации, следует что на 1 строку обработки будет создан 1 первичный документ.
Почему у вас возникло 2 табличных документа...
ВОЗМОЖНО потому что вы в табличный документ вставили 2 одинаковых строки.
Отсортируйте их по колонкам "Объект расчетов, контрагент" возможно вы найдете двойки. Это и есть ответ на ваш вопрос.
3. user1375596 28.04.20 13:14 Сейчас в теме
Забыл уточнить, что веду только Контрагентов .. без Партнеров (заранее прошу прощения - новичок, если что-то не то сказал про Контрагентов и Партнеров)
4. pvlunegov 157 29.04.20 06:11 Сейчас в теме
(3) Добрый день! Дело в том, что в ERP есть святая двоица справочников (Контрагент, Партнер). Каждый из них отвечает за свой план учета. Контрагенты отвечают за официальную часть публикации сведений о предприятии (внешнем), а Партнеры отвечают за управленческую часть публикации сведений о предприятии (внешнем). В других конфигурациях эти планы учета не разделялись, они велись одним справочником - Контрагенты.
Отсюда вывод - как бы не вели свой учет, вам не обойтись без ведения обоих справочников - и Контрагенты и Партнеры. Невозможно отказаться хотя бы потому, что оба справочника используются в различных документах. Если вести документооборот, то очевидно, что ПРИДЕТСЯ заводить и Партнеров и Контрагентов.
В ПРОСТОМ случае, вы можете для 1 Партнера иметь 1 Контрагента (взаимно-однозначное соответствие).
В СЛОЖНЫХ случаях (холдинги, сети, распределенные сети и др.) будет множественная связь (несколько Парнтеров к 1 Контрагенту, нескоколько Контрагентов к 1 Партнеру).
6. user1375596 29.04.20 12:51 Сейчас в теме
Спасибо, что ответили!

Я могу с уверенностью сказать, что в табличной части у меня одна строка на одного Контрагента.

Кстати, с двойными первичными документами разобрался. Не могу точно сказать, это ли повлияло на задвоение, но я поправил в Вашем коде пару "ДОкумент" на "Документ" и теперь все нормально.

Ну и на базе Вашего решения создал начальные остатки по Авансам Контрагентов.

Еще раз Спасибо!
7. user2051272 12.02.24 11:56 Сейчас в теме
(6) Исполняемый код для платформы 1С не чувствителен к регистру символов
Оставьте свое сообщение