Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
26 Июл 2017, 03:47
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Ошибка в передачи строк из подбора в заявку покупателя  (Прочитано 5578 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн hr.al

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 1
  • КПД: 13%
  • Регистрация: 2013-04-06
  • Сайт: 
  • Профессия: Ученик 1С
Существует задача создать пересчет шт. в кв.м. (товар керамическая плитка) при помощи отдельного реквизита.

1. Был создан реквизит Sплитки в Спр. Единицы
2. Прописана функция:

Функция Sплитки1()
Если Номенклатура.Площадь = 0 Тогда
Возврат "";
Иначе
        Sплитки=Единица.Sплитки*Количество;
    Возврат строка(Sплитки);
КонецЕсли;
КонецФункции

3. Создана колонка в таблице документов: ЗаявкаПокупателя, ЗаказПоставщику, ПоступлениеТМЦ, Реализация.

и вроде все просто и хорошо, но....

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


Оффлайн hr.al

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 1
  • КПД: 13%
  • Регистрация: 2013-04-06
  • Сайт: 
  • Профессия: Ученик 1С
Может это позволит сузить круг поиска ответа, я проверил, такая проблема возникает исключительно в заявке покупателя, ни в заказе поставщику, ни в поступлении тмц такой проблемы нет, хотя все везде прописано одинаково

Оффлайн Herby

  • *****
  • Сообщений: 936
  • РЕПУТАЦИЯ: 163
  • КПД: 17%
  • Регистрация: 2010-08-31
  • Сайт: 
  • Профессия: Программист 7.7
Функция Sплитки1()  откуда и в какой момент вызывается?

Оффлайн SharZem

  • *
  • Сообщений: 27
  • РЕПУТАЦИЯ: 3
  • КПД: 11%
  • Регистрация: 2013-01-19
  • Сайт: 
  • Профессия: Программист 7.7
такая проблема возникает исключительно в заявке покупателя, ... хотя все везде прописано одинаково
Что-то берут сомнения :nhsrm:, Процедуру ОБработкаПодбора() этого документа не мешало бы переглядеть.

И почему строка(Sплитки), а не Число(Sплитки)?

Оффлайн hr.al

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 1
  • КПД: 13%
  • Регистрация: 2013-04-06
  • Сайт: 
  • Профессия: Ученик 1С
вот отдельный кусок где прописана функция Sплитки1:

////////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
//
//******************************************************************************
// ВыбратьВидОперации(СпособВыбора)
//
// Параметры:
//  СпособВыбора - вариат выбора для метода ВыбратьЗначение,
//                 необязательный параметр, по умолчанию - 1.
//
// Возвращаемое значение:
//  Возвращенное значение метода ВыбратьЗначение().
//
// Описание:
//  Служит для запроса у пользователя Вида операции документа
//
Функция ВыбратьВидОперации(СпособВыбора = 1)

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

Возврат СписокОпераций.ВыбратьЗначение(ВидОперации,"Выбор вида операции",,60,СпособВыбора);
КонецФункции // ВыбратьВидОперации()



Функция вес1()

ВыбратьСтроки();вес=0;
Пока ПолучитьСтроку() = 1 Цикл
вес=вес+Единица.Вес*Количество;
КонецЦикла;
Возврат строка(вес)+" кг.";
КонецФункции // ВыбратьВидОперации()

Функция Sплитки1()
Если Единица.Sплитки = 0 Тогда
Возврат "";
Иначе
        Sплитки=Единица.Sплитки*Количество;
    Возврат строка(Sплитки);
КонецЕсли;
КонецФункции
 
//*****************************************************************************
// ТекстВалюты(Вал)
//
// Параметры:
//  Вал - элемент справочника "Валюты"
//
// Возвращаемое значение:
//  Строка валюты
//
// Описание:
// Возвращает название валюты или строку "<нет валюты>"
//
Функция ТекстВалюты(Вал)

Возврат ?(ПустоеЗначение(Вал) = 0, Вал.Наименование, "<нет валюты>");

КонецФункции

на всякий случай прикладываю полный код модуля

Оффлайн Herby

  • *****
  • Сообщений: 936
  • РЕПУТАЦИЯ: 163
  • КПД: 17%
  • Регистрация: 2010-08-31
  • Сайт: 
  • Профессия: Программист 7.7
кодировка нечитаемая у файла.

надо смотреть обработкуПодбора(), и вы так и не ответили откуда вызывается Sплитки1()

Оффлайн hr.al

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 1
  • КПД: 13%
  • Регистрация: 2013-04-06
  • Сайт: 
  • Профессия: Ученик 1С
и вы так и не ответили откуда вызывается Sплитки1()

Вызывается она здесь... (см.ниже фото), а вот часть кода Процедура ОбработкаПодбора:

Добавлено: 08 Апр 2013, 15:46

//******************************************************************************
// Предопределенная процедура
//
Процедура ОбработкаПодбора(ВыбЗнач, КонтФормыПодбора)

// есть ставки налогов, есть скидка
глОбработкаПодбора(Контекст, ВыбЗнач, 1, 1, 1);

КонецПроцедуры // ОбработкаПодбора()
Добавлено: 08 Апр 2013, 17:29

это часть кода глОбработкаПодбора в глоб.модуле
//******************************************************************************
// глОбработкаПодбора(Конт, ВыбЗнач, ЕстьНДС, ЕстьНП, ЕстьСкидка)
//
// Параметры:
//  Конт       - контекст документа, в котором произошло событие "Обработка подбора"
// ВыбЗнач    - выбранное значение (список параметров)
//  ЕстьНДС    - нужно заполнять при подборе ставку и сумму НДС,
//  ЕстьНП     - нужно заполнять при подборе ставку и сумму НП,
//  ЕстьСкидка - нужно заполнять при подборе сумму скидки,
//
// Возвращаемое значение:
//  Нет
//
// Вызывается из формул элементов диалога:
//
// Описание:
//  Производит заполнение табличной части документа переданными из формы подбора
// данными.
//
Процедура глОбработкаПодбора(Конт, ВыбЗнач, ЕстьНДС, ЕстьНП, ЕстьСкидка)  Экспорт

Перем ТаблЧасть, ТаблицаПодбора;

ТипЗнач = ТипЗначенияСтр(ВыбЗнач);
Если ТипЗнач = "СписокЗначений" Тогда

ЕстьВидТМЦ   = ВыбЗнач.Получить("ЕстьВидТМЦ"); // нужно заполнять при подборе вид ТМЦ

ЦенаВподборе = ВыбЗнач.Получить("ЦенаВподборе");
Если (ЦенаВПодборе = "ИзСправочника") или (ЦенаВподборе = "Розница") Тогда
ЕстьЦена = 1; // нужно заполнять при подборе цену ТМЦ
Иначе

// (ЦенаВподборе = "Нет") или (ПустоеЗначение(ЦенаВподборе) = 1)
ЕстьЦена = 0;
КонецЕсли;
ТипЦен = ВыбЗнач.Получить("ТипЦен");

ТаблицаПодбора = ВыбЗнач.Получить("ТаблицаПодбора");
Иначе

// если не список ничего не делаем
Возврат;
КонецЕсли;

// Инициализация переменных
ФлагиИзТипаЦен = 1;
ЦенаВклНП      = 1;
ЦенаВклНДС     = 1;
    УчитыватьНП    = ЕстьНП;
    УчитыватьНДС   = ЕстьНДС;

Если ЕстьЦена = 1 Тогда
   
// Флаги включения налогов в сумму определяеются типом цен,
// кроме случая перемещения из розницы (цены в этом случае берутся из регистра с налогами)
Если ЦенаВподборе = "Розница" Тогда
ФлагиИзТипаЦен = 0;
КонецЕсли;

ФлагиИзТипаЦен = ФлагиИзТипаЦен * ?(ПустоеЗначение(ТипЦен) = 1, 0, 1);

Если ФлагиИзТипаЦен  = 1 Тогда

// Подбирали по ценам с налогами, заданными в типе цен
ЦенаВклНП  = ТипЦен.ЦенаВклНП;
ЦенаВклНДС = ТипЦен.ЦенаВклНДС;
Иначе // считаем, что подбирали в соответствии с флагами в документе

// По умолчанию считаем, что если нет в документе флагов учета налогов,
// то цена со всеми налогами (как в рознице)
Если глЕстьРеквизитШапки("СуммаВклНП", Конт.Вид()) = 1 Тогда
ЦенаВклНП   = Конт.СуммаВклНП;
КонецЕсли;

Если глЕстьРеквизитШапки("СуммаВклНДС", Конт.Вид()) = 1 Тогда
ЦенаВклНДС  = Конт.СуммаВклНДС;
КонецЕсли;
КонецЕсли;

// Выкручивать или накручивать налоги надо только если они в документе учитываются
Если глЕстьРеквизитШапки("УчитыватьНП", Конт.Вид()) = 1 Тогда
УчитыватьНП = ЕстьНП * Конт.УчитыватьНП;
КонецЕсли;

Если глЕстьРеквизитШапки("УчитыватьНДС", Конт.Вид()) = 1 Тогда
УчитыватьНДС = ЕстьНДС * Конт.УчитыватьНДС;
КонецЕсли;

КонецЕсли;

ТипЗнач = ТипЗначенияСтр(ТаблицаПодбора);
Если ТипЗнач = "ТаблицаЗначений" Тогда

РеквизитыТаблЧастиСтрока = "Единица, НомерСтроки";
Если (ЦенаВподборе = "Розница") И (глЕстьРеквизитМнЧ("Цена", Конт.Вид()) = 1) Тогда
РеквизитыТаблЧастиСтрока = РеквизитыТаблЧастиСтрока + ", Цена";
КонецЕсли;

Конт.ВыгрузитьТабличнуюЧасть(ТаблЧасть, РеквизитыТаблЧастиСтрока);

ТаблицаПодбора.ВыбратьСтроки();
Пока ТаблицаПодбора.ПолучитьСтроку() <> 0 Цикл
Номенклатура = ТаблицаПодбора.Номенклатура;
Единица = ТаблицаПодбора.Единица;

Если Номенклатура <> Единица.Владелец Тогда
    Сообщить("В подборе выбрана единица другого элемента справочника Номенклатура.
         |Проверьте правильность указания базовой и основной единицы для элемента
|""" + СокрЛП(Номенклатура) + """, а также правильность указания единиц измерения
|в справочниках единиц и цен для данной позиции номенклатуры." );
Продолжить;
КонецЕсли;

// ищем номенклатуру среди подобранных
Поз = 0;
Если (ЦенаВподборе = "Розница") И (глЕстьРеквизитМнЧ("Цена", Конт.Вид()) = 1) Тогда

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

Если Поз > 0 Тогда

// нашли, увеличиваем количество
Конт.ПолучитьСтрокуПоНомеру(Поз);
Конт.Количество = Конт.Количество + ТаблицаПодбора.Количество;

// Вызывать пересчет имеет смысл только если есть цена
Если ЕстьЦена = 1 Тогда
глПересчетТаблЧасти(Конт,"Количество");
КонецЕсли;
Иначе

// не нашли, добавляем новую строку
Конт.НоваяСтрока();
Если ЕстьВидТМЦ = 1 Тогда
Конт.ВидТМЦ = ТаблицаПодбора.ВидТМЦ;
КонецЕсли;

Конт.Номенклатура = Номенклатура;
Конт.Количество   = ТаблицаПодбора.Количество;
Конт.Единица      = Единица;
Конт.Коэффициент  = Единица.Коэффициент;   

Если ЕстьНДС = 1 Тогда
Конт.СтавкаНДС = Номенклатура.СтавкаНДС;
КонецЕсли;

Если ЕстьНП= 1 Тогда
Конт.СтавкаНП  = Номенклатура.СтавкаНП;
КонецЕсли;

Если глЕстьРеквизитМнЧ("РозничнаяНаценка",  Конт.Вид()) = 1 Тогда
Если Конт.РозничнаяНаценка = 0 Тогда
    // получим наценку из розничной цены
РознНаценка = 0;
глВернутьЦену(Номенклатура, Константа.РозничныйТипЦен, Конт.ДатаДок, , , , РознНаценка, );
Если РознНаценка = 0 Тогда
    Конт.РозничнаяНаценка = Константа.РозничныйТипЦен.Процент;
Иначе
Конт.РозничнаяНаценка = РознНаценка;
КонецЕсли;
КонецЕсли;
КонецЕсли;                                                                     

Если ЕстьЦена = 1 Тогда
глПересчитатьЦенуВДокументе(Конт, УчитыватьНП, УчитыватьНДС, ТаблицаПодбора.Цена, Конт.Валюта,
                            ЦенаВклНП, ЦенаВклНДС);
глПересчетТаблЧасти(Конт,"Цена");
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Конт.Форма.Обновить(0);
Конт.Активизировать("Количество");
Конт.АктивизироватьСтроку();

КонецПроцедуры // глОбработкаПодбора()

Последний раз редактировалось: hr.al; 08 Апр 2013, 17:29. Причина: Объединение сообщений

Оффлайн SharZem

  • *
  • Сообщений: 27
  • РЕПУТАЦИЯ: 3
  • КПД: 11%
  • Регистрация: 2013-01-19
  • Сайт: 
  • Профессия: Программист 7.7
Короче, Твоя Функция Sплитки1() к ошибкам при подборе не имеет никакого отношения.
Тебе нужно курить отладчик, потому-что возникает еще больше вопросов, Например:
Процедура ПоКнопкеПодбор()
Параметры = СоздатьОбъект("СписокЗначений");
Параметры.ДобавитьЗначение(Фирма,           "Фирма");
Параметры.ДобавитьЗначение(Склад,           "Склад");
Параметры.ДобавитьЗначение(0,               "ЕстьВидТМЦ");
Параметры.ДобавитьЗначение("ИзСправочника", "ЦенаВподборе");
Параметры.ДобавитьЗначение(ТипЦен,          "ТипЦен");
Параметры.ДобавитьЗначение(Валюта,          "Валюта");
Параметры.ДобавитьЗначение(Курс,            "Курс");

Если Выбран() = 0 Тогда
Параметры.ДобавитьЗначение("Дата",  "ТипГраницы");
Параметры.ДобавитьЗначение(ДатаДок, "ЗначениеГраницы");
Иначе
Параметры.ДобавитьЗначение("Позиция",         "ТипГраницы");
Параметры.ДобавитьЗначение(ПолучитьПозицию(), "ЗначениеГраницы");
КонецЕсли;

Параметры.ДобавитьЗначение("Подбор номенклатуры в документ " + ПредставлениеВида() + " № " + НомерДок, "Заголовок");
глПодбор(Контекст, Параметры);

КонецПроцедуры // ПоКнопкеПодбор()
Что такое глПодбор ???

В Процедура глОбработкаПодбора() есть условие
        Если (ЦенаВПодборе = "ИзСправочника") или (ЦенаВподборе = "Розница") Тогда
            ЕстьЦена = 1; // нужно заполнять при подборе цену ТМЦ
        Иначе
           
            // (ЦенаВподборе = "Нет") или (ПустоеЗначение(ЦенаВподборе) = 1)
            ЕстьЦена = 0;
        КонецЕсли;
Тогда почему в других документах цены заполняются ?
Прокуришь в отладчике - найдешь проблему ;)

Оффлайн hr.al

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 1
  • КПД: 13%
  • Регистрация: 2013-04-06
  • Сайт: 
  • Профессия: Ученик 1С
К сожалению я не специалист, просто любитель, отладчиком вообще не владею, а времени его изучить пока не будет... ((( может кто-то сможет помочь? цена вопроса? но конфу кинуть не смогу, может организуем процесс через TeamViewer например.

Оффлайн Herby

  • *****
  • Сообщений: 936
  • РЕПУТАЦИЯ: 163
  • КПД: 17%
  • Регистрация: 2010-08-31
  • Сайт: 
  • Профессия: Программист 7.7
(( может кто-то сможет помочь? цена вопроса? но конфу кинуть не смогу, может организуем процесс через TeamViewer например.

а в чем сложность отправить файл конфигурации? 


Теги:
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

alex0402
92 Сообщений
oleg-x
79 Сообщений
Геннадий ОбьГЭС Геннадий ОбьГЭС
68 Сообщений
Golickoff Golickoff
51 Сообщений
ilyay ilyay
42 Сообщений
AIFrame
42 Сообщений
Амал
30 Сообщений
Dethmontt Dethmontt
22 Сообщений
lansy
22 Сообщений
xproh
21 Сообщений

* Кто онлайн

  • Точка Гостей: 157
  • Точка Скрытых: 0
  • Точка Пользователей: 6
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal