8.х Импорт оплат клиентов с учетом расчета остатка долга их экселя в 1С

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем nigrichek, 19 янв 2012.

  1. TopicStarter Overlay
    nigrichek
    Offline

    nigrichek

    Регистрация:
    19 янв 2012
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Есть справочник товаров и услуг, в котором отражены должники и их задолженности перед предприятием за оказанные услуги.
    Есть эксель файл в котором указаны оплаты должников.
    Я в 1с новичок, но ставят серьезную задачу написать обработку которая будет брать оплату клиента из эксель файла и вычитать из задолжности в документе 1с

    набросал схему как я это вижу:

    Форма состоит из 3 компонентов:
    Строка выбора файла - где будем указывать файл с импортируемыми данными
    Строка выбора месяца - будем выбирать месяц в справочнике товаров и услуг в 1с
    Кнопка загрузить данные - будет активировать выгрузку информации в 1с.

    И так работа обработки:

    Выбирает из эксель файла 5 столбец (в нем хранится номер договора с клиентом)
    (Все данные в нужные нам в ексель файле начинаются с 11 строки и ниже шагом 1 строка.)
    Берем данные номера договора.
    в 1с открываем справочник товаров и услуг указываем месяц (берется из формы)
    по фильтру выбирается номер договора открывает его
    из значения в поле табличной части ЦЕНА вычитает значение взятое из 7 столбца этойже строки (данные оплаты)
    переберает до конца файла с шагом 1 строка.

    реально ли подобное реализовать, на что обратить внимание, с чего начать?
  2. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    Могу показаться грубым, но для начала перестать называть РЕКВИЗИТЫ комонентами.
    Кнопка же будет не активировать, а производить, и не выгрузку, а загрузку (т.к. она будет не писать в EXCEL, а считвать... писать будет в 1С).

    По "мясу" же обработки есть вопросы. Программно менять данные не то же что менять их интерактивно. Поэтому как минимум "открываем справочник и указываем дату" - точно некорректно.
  3. TopicStarter Overlay
    nigrichek
    Offline

    nigrichek

    Регистрация:
    19 янв 2012
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    нашел обработку которая загружает эти акты., осталось правильно изменить - но некоторые вещи мне непонятны.
    [CODE1c] Контрагент = Справочники.Контрагенты.НайтиПоКоду(СтрЗаменить(СокрЛП(мSheet1.Cells(Строка, 7).Value),Символы.НПП,""));
    если Контрагент = Справочники.Контрагенты.ПустаяСсылка() тогда
    иначе
    ДоговорТО = Справочники.Договоры.НайтиПоРеквизиту("ВнешнийКлюч",СтрЗаменить(СокрЛП(мSheet1.Cells(Строка, 8).Value),Символы.НПП,""));
    если ДоговорТО = Справочники.Договоры.ПустаяСсылка() тогда
    ДоговорТО = Справочники.Договоры.СоздатьЭлемент();
    ДоговорТО.Владелец = Контрагент;
    ДоговорТО.ВнешнийКлюч = СтрЗаменить(СокрЛП(мSheet1.Cells(Строка, 8).Value),Символы.НПП,"");
    ДоговорТО.Наименование = СтрЗаменить(СокрЛП(мSheet1.Cells(Строка, 3).Value),Символы.НПП,"");
    ДоговорТО.Записать();[/CODE1c]
    может кто прокомментировать построчно?
  4. TopicStarter Overlay
    nigrichek
    Offline

    nigrichek

    Регистрация:
    19 янв 2012
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    попробовал прокомментировать 1 строку
    Контрагент = Справочники.Контрагенты.НайтиПоКоду(СтрЗаменить(СокрЛП(мSheet1.Cells(Строка, 7).Value),Символы.НПП,""));


    //Функция СтрЗаменить() производит поиск подстроки по заданному шаблону и заменяет ее заданным выражением,
    //Функция возвращает результирующую строку.
    //Функция СтрЗаменить() имеет следующий синтаксис:
    //(Строка) СтрЗаменить(Выражение, Шаблон, Замена)
    //Функция СокрЛП() удаляет все начальные и завершающие пробельные символы
    //(пробел, табуляция, перенос сстроки) из переданной строки и возвращает полученное значение.
    //Если пробельные символы отсутствуют, то возвращается исходная строка.
    //Символы.НПП - Неразрывный пробел. Пробел, по которому не должен выполняться перенос на другую строку или другое разбиение текста при форматировании.

    что же это получается в итоге строка делает?

    в справочнике Контрагенты ищет по коду строку, в которую запихает значения
    значения = (производит поиск подстроки по шаблону и заменяет ее заданным выражением)
    выражение = удаляет все начальные и завершающие пробельные символы
    шаблон = шаблон = мSheet1.Cells.Value
    замена = Строка, 7
    и еще неразрывный пробелл кудато деть
  5. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    у вас получается не построчное пояснение, а по этапная работа функций. Для этого берете С-П в помощь и проходитесь по коду.

    По обработке - она у вас реально используется, или это сторонняя? Если стороння, то она и затачивалась явно под данные, которые с вашими могут не совпасть. Следовательно надо менять.

    З.Ы. Используйте теги специальные для фоормления кода. Удобнее же.
  6. TopicStarter Overlay
    nigrichek
    Offline

    nigrichek

    Регистрация:
    19 янв 2012
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Данная обработка загружает в базу из эксель файлов начисления клиентам (тоесть их долг)
    а мне надо переделать так чтобы из ексель файла загружались их оплаты и когда это будет происходить они вычитались из начислений и мы могли бы видеть остаток долга
  7. TopicStarter Overlay
    nigrichek
    Offline

    nigrichek

    Регистрация:
    19 янв 2012
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Предпологаю что в части опублекованной ранее идет форматирование ячеек с целью подготтовки информации к импорту
    рассматриваю следующую часть :
    (в моем файле данные начинаются с 11 строки)
    [CODE1c]начстрока = 11;

    Для Строка = начстрока По Всего+1 Цикл
    ФлагЗаписи = 0;
    НовыйДок = Документы.РеализацияТоваровИУслуг.СоздатьДокумент();
    НовыйДок.Дата = ЭлементыФормы.ДатаЗагрузки.Значение;
    НовыйДок.УстановитьНовыйНомер();
    НовыйДок.ХозОперация = Справочники.ХозяйственныеОперации.НайтиПоКоду("0000000258");
    НовыйДок.ВариантРасчета = Перечисления.ВариантРасчетаНалогов.НалогВСумме;
    НовыйДок.ВидРеализации = справочники.ВидыРеализации.НайтиПоКоду("31");
    НовыйДок.Контрагент = Справочники.Контрагенты.НайтиПоКоду(СтрЗаменить(СокрЛП(мSheet1.Cells(Строка, 7).Value),Символы.НПП,""));
    НовыйДок.Договор = Справочники.Договоры.НайтиПоРеквизиту("ВнешнийКлюч",СтрЗаменить(СокрЛП(мSheet1.Cells(Строка, 8).Value),Символы.НПП,""));

    если НовыйДок.Контрагент = Справочники.Контрагенты.ПустаяСсылка() тогда
    сообщить ("Не найден контрагент с кодом "+ Строка(СокрЛП(мSheet1.Cells(Строка, 7).Value)));
    сообщить ("Не загружена строка реестра номер "+ Строка(Строка));
    ФлагЗаписи = 0;
    иначе ФлагЗаписи = 1;
    конецесли;
    НовыйДок.Суммы.Добавить();
    Для каждого ТекущаяСтрока Из НовыйДок.Суммы Цикл
    ТекущаяСтрока.Сумма = СокрЛП(мSheet1.Cells(Строка, 6).Value);
    ТекущаяСтрока.НалоговыеСтавки = справочники.НалоговыеСтавки.НайтиПоКоду("1");
    ТекущаяСтрока.Количество = 1;
    //ТекущаяСтрока.СуммаНДС = СокрЛП(мSheet1.Cells(Строка, 12).Value);
    ТекущаяСтрока.Цена = СокрЛП(мSheet1.Cells(Строка, 6).Value);
    //ТекущаяСтрока.СуммаНУ = СокрЛП(мSheet1.Cells(Строка, 10).Value) - СокрЛП(мSheet1.Cells(Строка, 12).Value);
    ТекущаяСтрока.Номенклатура = справочники.Номенклатура.НайтиПоКоду("115");
    КонецЦикла;[/CODE1c]

Поделиться этой страницей