7.7 Загрузка из Excel в 7.7(ТиС) документов "Реализация"

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем ESC_MFX, 18 янв 2012.

  1. TopicStarter Overlay
    ESC_MFX
    Offline

    ESC_MFX

    Регистрация:
    18 янв 2012
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Друзья!
    Я на этом форуме новичек, да и в 1с 7.7 давно уже не программировал.
    На работе поставили ТЗ - сделать обработку, чтобы заказы торговых падали в 1с дистрибьютера. В файле xls содержаться данные о клиенте и номенклатуре(код и артикул соответственно). Напряг память, написал обработочку. Вроде бы всё работает нормально, но иногда вылезает неприятная штука - на некоторой номенклатуре задваивает цену, другими словами, стоит товар 100 рублей, а обработка мне его по 200 рублей в Реализацию ставит. Конфа типовая абсолютно: 7.7 ТиС редакция 9.2. При подборе цены пользовался этим:


    Код:
    Если глВернутьЦену(Реал.Номенклатура, Реал.ТипЦен, ТекущаяДата(), ЦенаЦены, ЕдЦены, ВалЦены) = 1 Тогда
    Реал.Цена = ЦенаЦены;
    КонецЕсли;
    (Реал - док. Реализация, созданный методом "СоздатьОбект")


    А потом и этим:

    Код:
    ЦеныНоменклатуры= СоздатьОбъект("Справочник.Цены");
    ЦеныНоменклатуры.ИспользоватьВладельца(Реал.Номенклатура);
    ЦеныНоменклатуры.ВыбратьЭлементы();
    НайденнаяЦена = ПолучитьПустоеЗначение("Справочник.Цены");
    Пока ЦеныНоменклатуры.ПолучитьЭлемент() = 1 Цикл
    Если ЦеныНоменклатуры.ТипЦен <> Реал.ТипЦен Тогда
    Продолжить;
    КонецЕсли;
    НайденнаяЦена = ЦеныНоменклатуры.ТекущийЭлемент();
    КонецЦикла;
    Реал.Цена = НайденнаяЦена.Цена.Получить(ТекущаяДата());

    Оба способа в итоге дают один и тот же результат - в некоторых случаях дают двойную цену, но по одинаковой номенклатуре.
    Уже всю голову сломан - почему так выходит!?
    А если в созданном документе выбрать тот же товар, то цену проставляет уже правильную...
    Может, кто подскажет, в чем может быть причина?
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Надо смотреть единицу измерения. Тупой пример... Вы загружаете в реализацию пачки сигарет, а в справочнике хранится цена за блок... Нужно пересчитывать с учетом коэффициента. Ну и валюту не мешало бы учитывать если вы с ней работаете
  3. TopicStarter Overlay
    ESC_MFX
    Offline

    ESC_MFX

    Регистрация:
    18 янв 2012
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Валюта рублёвая. В файле заказов может быть как поштучно, так и упаковкой, это обработкой отслеживается и проставляется единица измерения и соответствующий коэффициент. А цена получается разная для разного товара при одинаковых единицах измерения и коэффициентов.

    P.S. Подскажите, пожалуйста, как в функцию Глобального модуля передать контекст создаваемого документа?
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Просто
    [CODE1C]
    Док=СоздатьОбъект("Документ.НашДок");
    Док.Новый();
    глПроцедураИзГМ(Док);
    [/CODE1C]

    А единицу вы точно отслеживаете? Проверьте
  5. TopicStarter Overlay
    ESC_MFX
    Offline

    ESC_MFX

    Регистрация:
    18 янв 2012
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Ну примерно так:



    Код:
    Реал.НоваяСтрока();
    Реал.Номенклатура = СпрНомен.ТекущийЭлемент();
    Если Число(ФЗагрузки.Cells(СчЦикла, 10).Value) > 0 Тогда
    Реал.Количество = Число(ФЗагрузки.Cells(СчЦикла, 10).Value);
    СпрОКЕИ.НайтиПоНаименованию("уп");
    СпрЕдиницы.ИспользоватьВладельца(СпрНомен.ТекущийЭлемент());
    СпрЕдиницы.НайтиПоРеквизиту("ОКЕИ",СпрОКЕИ.ТекущийЭлемент(),1);
    Реал.Единица = СпрЕдиницы.ТекущийЭлемент();
    Реал.Коэффициент = СпрНомен.ПолучитьАтрибут("КолВупаковке");
    Иначе
    Реал.Количество = Число(ФЗагрузки.Cells(СчЦикла, 12).Value);
    СпрОКЕИ.НайтиПоНаименованию("шт");
    СпрЕдиницы.ИспользоватьВладельца(СпрНомен.ТекущийЭлемент());
    СпрЕдиницы.НайтиПоРеквизиту("ОКЕИ",СпрОКЕИ.ТекущийЭлемент(),1);
    Реал.Единица = СпрЕдиницы.ТекущийЭлемент();
    Реал.Коэффициент = 1;
    КонецЕсли;

    Вот думаю, может тогда так попробовать:

    глПересчетТаблЧасти(Реал,Реал.Цена) ?
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    да... этим вы получили цену из справочника...

    Вот ваш же код
    [CODE1C]
    ЦеныНоменклатуры= СоздатьОбъект("Справочник.Цены");
    ЦеныНоменклатуры.ИспользоватьВладельца(Реал.Номенклатура);
    ЦеныНоменклатуры.ВыбратьЭлементы();
    НайденнаяЦена = ПолучитьПустоеЗначение("Справочник.Цены");
    Пока ЦеныНоменклатуры.ПолучитьЭлемент() = 1 Цикл
    Если ЦеныНоменклатуры.ТипЦен <> Реал.ТипЦен Тогда
    Продолжить;
    КонецЕсли;
    НайденнаяЦена = ЦеныНоменклатуры.ТекущийЭлемент();
    КонецЦикла;
    Реал.Цена = НайденнаяЦена.Цена.Получить(ТекущаяДата());
    [/CODE1C]
    Где идет сравнение коэффициента единицы цены с коэффициентом из ТЧ документа?

    аналогично типовая процедура ГМ
    [CODE1C]
    глВернутьЦену(Реал.Номенклатура, Реал.ТипЦен, ТекущаяДата(), ЦенаЦены, ЕдЦены, ВалЦены)
    [/CODE1C]
    Вам вернули ЦенаЦены - цена
    ЕдЦены - единица
    ВалЦены - валюта

    Просто сравните коэффициенты ТЧ и найденной единицы и пересчитайте
  7. TopicStarter Overlay
    ESC_MFX
    Offline

    ESC_MFX

    Регистрация:
    18 янв 2012
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    А примерно не подскажете, как это можно сделать?)
  8. TopicStarter Overlay
    ESC_MFX
    Offline

    ESC_MFX

    Регистрация:
    18 янв 2012
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Вставил следующий код :



    Код:
    Если глВернутьЦену(Реал.Номенклатура, Реал.ТипЦен, ТекущаяДата(), ЦенаЦены, ЕдЦены, ВалЦены) = 1 Тогда
    Если ПустоеЗначение(Реал.Единица) = 0 Тогда
    Если ЕдЦены <> Реал.Единица Тогда
    ЦенаЦены = ?(ПустоеЗначение(ЕдЦены.Коэффициент) = 1,0,ЦенаЦены * Реал.Единица.Коэффициент / ЕдЦены.Коэффициент);
    КонецЕсли;
    КонецЕсли;
    Реал.Цена = ЦенаЦены;
    КонецЕсли;


    Такая же ерунда происходит.....
  9. TopicStarter Overlay
    ESC_MFX
    Offline

    ESC_MFX

    Регистрация:
    18 янв 2012
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    А для некоторых номенклатур вообще цену в два раза уменьшает...
  10. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Лучше стукните в аську. Гляну удаленно
  11. TopicStarter Overlay
    ESC_MFX
    Offline

    ESC_MFX

    Регистрация:
    18 янв 2012
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    С этим разобрался, теперь другая проблема....
    Цены проставляет правильно, а вот в сохраненном документе теперь если поставить ндс и ндс включено в сумму, то пересчёт не происходит....Может, какой-то реквизит нужный не заполняется при создании документа?
  12. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    в какой момент вам нужно пересчитывать? Покажите как вы заполняете шапку документа
  13. TopicStarter Overlay
    ESC_MFX
    Offline

    ESC_MFX

    Регистрация:
    18 янв 2012
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Код:
    Реал.Новый();
    СпрПольз.НайтиПоКоду(ИмяПользователя());
    Реал.Автор = СпрПольз.ТекущийЭлемент();
    СпрКлиентов.НайтиПоКоду(ТаблицаЗагрузки.КодКлиента);
    Реал.Контрагент = СпрКлиентов.ТекущийЭлемент();
    СпрДоговор.ИспользоватьВладельца(СпрКлиентов.ТекущийЭлемент());
    СпрДоговор.НайтиПоНаименованию("Основной договор");
    Реал.Договор = СпрДоговор.ТекущийЭлемент();
    Реал.Скидка = СпрДоговор.Скидка;
    Реал.Кратность = 1;
    Реал.Курс = 1;
    Реал.Валюта = СпрДоговор.ВалютаВзаиморасчетов;
    Реал.Фирма = Фирма;
    Реал.Склад = Склад;
    Реал.ДатаОплаты = КонМесяца(ТекущаяДата());
    Реал.Комментарий = ТаблицаЗагрузки.Комментарий;
    Реал.Проект = СпрКлиентов.Проект;
    СпрТипЦены.НайтиПоНаименованию("Базовая");
    Реал.ТипЦен = СпрТипЦены.ТекущийЭлемент();
    Реал.КодОперации = Перечисление.КодыОпераций.Продажа;
    Грубо говоря, обработка из файла берёт только клиента, номенклатуру и количество. Остальные данные получает из 1с. Создаётся документ Реализация. Потом открываю документ и хочу, чтобы цены были с учётом НДС и включади его. Ставлю галочки, но пересчёт не происходит.Колонки ставкаНДС и СуммаНДС появляются, но значения в них пусты...
  14. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Нужно заполнять еще значения реквизитов шапки УчитыватьНДС, СуммаВклНДС
  15. TopicStarter Overlay
    ESC_MFX
    Offline

    ESC_MFX

    Регистрация:
    18 янв 2012
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Просто они работают в основном без НДС, поэтому загрузка идёт без этих заполнения этих реквизитов.

    Если же в МЧ проставлять ставку НДС, то после пересчета программа проставляет цену не включая НДС, а добавляя его к цене.
  16. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Это регулируется в ТИПЕ цены. Включать или не включать НДС
  17. TopicStarter Overlay
    ESC_MFX
    Offline

    ESC_MFX

    Регистрация:
    18 янв 2012
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Тогда я, наверное, что-то неправильно заполняю? Потому что в типе цен, что указывается обработкой, галочка стоит, что НДС включается.
  18. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Изначально 1с туда(в тип цены) смотрит.... При заполнении.реквизитов шапки УчитыватьНДС, СуммаВклНДС . Потом если тип цены меняется производит перерасчет

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