Перейти к содержимому


Вычисление. Копирование значения.


Сообщений в теме: 26

#1 MorTis

    Активный участник

  • Пользователи
  • PipPipPip
  • 65 сообщений
  • Пол:Мужчина

Отправлено 31 Март 2014 - 09:13

Здравствуйте.
Столкнулся с проблемой незначительные изменения в стандартной конфигурации счетов и актов.
В таблицу счета и акта добалено поле Договор и Подразделение (связь с таблицей Договор и Подразделение соответвенно) на дополнительном действии выписать акт.
$sch = data_table("Счета","id=$ID");
$akt = data_table("Акт","`status`<>'2' AND `По счету`=".$sch['ID']);
if (!$akt)
{
    $akt['По счету'] = $sch['ID'];
    $akt['На кого'] = $sch['На кого'];
    $akt['Кол-во'] = $sch['Кол-во'];
    $akt['Сумма'] = $sch['Сумма'];
    $akt['Оплачено'] = $sch['Оплачено'];
    $akt['Остаток'] = $sch['Остаток'];
    $akt['Наша компания'] = $sch['Наша компания'];
    $akt['ID'] = insert_query($akt, "Акт");
    $akt['Договор'] = $sch['Договор'];
    $akt['Подразделение ']=$sch['Подразделение'];
    $poz_sch_s = data_table("Позиции счета","`status`<>2 AND `Счет`=".$sch['ID'],"all");
    foreach ($poz_sch_s as $poz_sch)
    {
	    $poz_akt['Акт'] = $akt['ID'];
	    $poz_akt['Описание'] = $poz_sch['Описание'];
	    $poz_akt['Позиция номенклатуры'] = $poz_sch['Позиция номенклатуры'];
	    // $poz_akt['Наименование'] = $poz_sch['Наименование'];
	    $poz_akt['Период'] = $poz_sch['Период'];
	    $poz_akt['Ед. изм'] = $poz_sch['Ед. изм'];
	    $poz_akt['Цена'] = $poz_sch['Цена'];
	    $poz_akt['Кол-во'] = $poz_sch['Кол-во'];
	    $poz_akt['Сумма'] = $poz_sch['Сумма'];
	   
	    insert_query($poz_akt, "Позиции акта");
    }
    echo "<script>location.href='".$config["site_root"]."/view_line.php?table=81&line=".$akt['ID']."&edit_mode&back_url=".$base64_current_url."'</script>";
}
else
{
    echo "<script>alert('Акт по данному счёту уже сформирован.');
		  location.href='".$config["site_root"]."/view_line.php?table=81&line=".$akt['ID']."&back_url=".$base64_current_url."'</script>";
}
Не работает перенос значений полей Договор и Подразделение.

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 31 Март 2014 - 10:49

У вас поля заполняются уже после того, как запись добавляется. Не в то место кода вставили заполнение полей. Поменяйте местами:

	$akt['Договор'] = $sch['Договор'];
	$akt['Подразделение ']=$sch['Подразделение'];
	$akt['ID'] = insert_query($akt, "Акт"); // вставка записи должна идти последней, после заполнения массива полей


#3 MorTis

    Активный участник

  • Пользователи
  • PipPipPip
  • 65 сообщений
  • Пол:Мужчина

Отправлено 31 Март 2014 - 10:49

Проблему решил.
Изменил порядок
  $akt['Наша компания'] = $sch['Наша компания'];
    $akt['Договор'] = $sch['Договор'];
    $akt['Подразделение ']=$sch['Подразделение'];
$akt['ID'] = insert_query($akt, "Акт");


#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 31 Март 2014 - 10:51

Одновременно написали)

#5 freeman

    Участник

  • Пользователи
  • PipPip
  • 29 сообщений

Отправлено 02 Апрель 2014 - 11:29

Здравствуйте.
задача стоит следующая. В таблице Заявки, при изменении статуса на "Наш клиент" создается новый клиент в таблице "Частное лицо" переносится: Имя, Email, Номер телефона и информаиция из таблицы позиции коммерческого предложения в таблицу "копия ПКП в клиентах"
$zvka = data_table("Заявки","id=$ID");
$kl = data_table("Частное лицо","`status`<>'2' AND `По заявке`=".$zvka['ID']);

if ($line['Статус'] == "Наш клиент")
{
$kl['По заявке'] = $zvka['ID'];
$kl['Имя'] = $zvka['Имя'];
$kl['Email'] = $zvka['Email'];
$kl['Контактный телефон'] = $zvka['Номер телефона'];
insert_query($kl,"Частное лицо");

    $poz_zvka_s = data_table("Позиции коммерческого предложения","`status`<>2 AND `Заявки`=".$zvka['ID'],"all");
    foreach ($poz_zvka_s as $poz_zvka)
    {
	    $poz_kl = array();
	    $poz_kl['f8481'] = $kl['ID'];
	    $poz_kl['f8391'] = $poz_zvka['Прайс-лист'];
	    $poz_kl['f8401'] = $poz_zvka['ед.'];
	    $poz_kl['f8411'] = $poz_zvka['Количество'];
	    $poz_kl['f8421'] = $poz_zvka['Цена'];
	    $poz_kl['f8431'] = $poz_zvka['Сумма'];
	    $poz_kl['f8441'] = $poz_zvka['Скидка, %'];
	    $poz_kl['f8451'] = $poz_zvka['Сумма скидки'];
	    $poz_kl['f8461'] = $poz_zvka['Итого'];
	    sql_insert(DATA_TABLE."571",$poz_kl);
    }
    echo "<script>location.href='".$config["site_root"]."/view_line.php?table=411&line=".$kl['ID']."&back_url=".$base64_current_url."'</script>";
}
else
{
    echo "<script>alert('Договор по данному счету уже сформирован.');
		  location.href='".$config["site_root"]."/view_line.php?table=411&line=".$kl['ID']."&back_url=".$base64_current_url."'</script>";
}

где-то что не так и появляется куча ошибок. Заранее спасибо за помощь

#6 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 02 Апрель 2014 - 11:59

Так вы сравните для начала код примера в первом сообщении и ваш. Куда-то пропали: 1)проверка, если ли уже такой клиент if (!$kl) 2) получение $kl['ID'] после добавления записи $kl['ID'] = insert_query($kl,"Частное лицо");

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

#7 freeman

    Участник

  • Пользователи
  • PipPip
  • 29 сообщений

Отправлено 02 Апрель 2014 - 12:08

Ошибка в вычислении.
Заявки.Создание нового клиента :
90:
91:
Ошибка SQL запроса:
INSERT INTO f_data411 (id, user_id, add_time, status, f8331, f6151, f5661, f6161, f5671, f5681, f5691, f5701, f7761, f5711, f5721, f5731, f5931, f5821, f6171, f5741, f5751, f5761, f5771, f5781, f5791, f5801, f5811, r) VALUES ('64', '1', '2014-04-02 12:18:18', '0', '103', '', 'Алексей Александрович Журинов', '', 'aa@vint-monolit.ru', '79688985371', '0000-00-00 00:00:00', '0', '', '0', '0', '', '', '', '', '', '', '', '0000-00-00 00:00:00', '', '', '0000-00-00 00:00:00', '', 1396429682)
Duplicate entry '64' for key 'PRIMARY'

Сообщение отредактировал freeman: 02 Апрель 2014 - 12:10


#8 freeman

    Участник

  • Пользователи
  • PipPip
  • 29 сообщений

Отправлено 02 Апрель 2014 - 12:12

if (!$kl) добавил.

#9 freeman

    Участник

  • Пользователи
  • PipPip
  • 29 сообщений

Отправлено 02 Апрель 2014 - 12:19

Вот еще например.
$bill = data_table("Счета","id=$ID");
$ed_izm_kod = array('м.'=>'006',
	  'шт.'=>'796',
	  'упак.'=>'778',
	  'кг.'=>'166',
	  'г.'=>'163',
	  'л.'=>'112',
	  'мл.'=>'111',
	  'т.'=>'168'
	  );
// Добавляем накладную
$fancy_bill['Отправитель'] = 1;
$fancy_bill['Получатель'] = $bill['На кого'];
$fancy_bill['№ накладной'] = 0;
$fancy_bill['Дата'] = date('Y-m-d').' 00:00:00';
$fancy_bill['Отпустил'] = $user['id'];
$fancy_bill['Основание'] = "Счёт №".$bill['Номер'];
$fancy_bill['По счету'] = "{$ID}";
$fancy_bill_id = insert_query($fancy_bill, "Накладная");
// Получаем новый номер накладной
$fancy_bill = mysql_fetch_array(mysql_query("SELECT max(f590) as max_num FROM ".DATA_TABLE."53 `Накладная`"));
// Обновляем номер накладной
$fancy_data['Номер'] = $fancy_bill['max_num'] + 1;
update_query($fancy_data, "Накладная", "id=".$fancy_bill_id);
$poz_sch_s = data_table("Позиции счета","`status`<>2 AND `Счет`=".$bill['ID'],"all");
    foreach ($poz_sch_s as $poz_sch)
    {
	    $poz_sf = array();
	    $poz_sf['f813'] = $fancy_bill_id;
	    if ($poz_sch['Прайс-лист']) {
	  $sqlQuery1 = "SELECT `f6081` FROM `".DATA_TABLE."431` WHERE `id`='".$poz_sch['Прайс-лист']."' AND `status`<>'2'";
    $result1 = sql_query($sqlQuery1) or user_error(mysql_error()."<br>".$sqlQuery."<br>", E_USER_ERROR);
    $row1 = mysql_fetch_assoc($result1);
    $poz_sf['f814'] = $row1['f2331'].", ".$poz_sch['Описание'];
	 } else {
	  $poz_sf['f814'] = $poz_sch['Прайс-лист'];
	 }
	    $poz_sf['f815'] = $poz_sch['Ед. изм'];
	    $poz_sf['f817'] = $poz_sch['Итого']/$poz_sch['Кол-во'];
	    $poz_sf['f816'] = $poz_sch['Кол-во'];
	    $poz_sf['f818'] = $poz_sch['Итого'];
	    $poz_sf['f1171'] = $ed_izm_kod[$poz_sch['Ед. изм']];
	    sql_insert(DATA_TABLE."75",$poz_sf);
    }
// Переходим на только что созданную накладную
echo "<script>location.href='".$config["site_root"]."/view_line.php?table=53&line=".$fancy_bill_id."&edit_mode&back_url=".$base64_current_url."'</script>";

При формировании счета-фактуры, у меня описание в товар добавляется
$poz_sf['f814'] = $row1['f2331'].", ".$poz_sch['Описание'];
а наименование нет, перед запятой ничего не появляется

#10 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 02 Апрель 2014 - 12:29

Цитата

Duplicate entry '64' for key 'PRIMARY'

Дубль записи, как раз очевидно по причине того, что не проверяли наличие клиента.

#11 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 02 Апрель 2014 - 12:33

Цитата

При формировании счета-фактуры, у меня описание в товар добавляется
$poz_sf['f814'] = $row1['f2331'].", ".$poz_sch['Описание'];
а наименование нет, перед запятой ничего не появляется

В самом запросе нет вывода поля f2331, только f6081

$sqlQuery1 = "SELECT `f6081` FROM


#12 freeman

    Участник

  • Пользователи
  • PipPip
  • 29 сообщений

Отправлено 02 Апрель 2014 - 13:00

Просмотр сообщенияCbCoder (02 Апрель 2014 - 12:29) писал:

Дубль записи, как раз очевидно по причине того, что не проверяли наличие клиента.

Изменил код на это
if ($line['Статус'] == "Наш клиент")
{
$zvka = data_table("Заявки","id=$ID");
$kl = data_table("Частное лицо","`status`<>'2' AND `По заявке`=".$zvka['ID']);
if (!$kl)
{
    $kl['По заявке'] = $zvka['ID'];
    $kl['Имя'] = $zvka['Имя'];
    $kl['Email'] = $zvka['Email'];
    $kl['Контактный телефон'] = $zvka['Номер телефона'];
    $kl['ID'] = insert_query($kl, "Частное лицо");

    $poz_zvka_s = data_table("Позиции коммерческого предложения","`status`<>2 AND `Заявка`=".$zvka['ID'],"all");
    foreach ($poz_zvka_s as $poz_zvka)
    {
            $poz_kl['Заявка'] = $kl['ID'];
            $poz_kl['Прайс-лист'] = $poz_zvka['Прайс-лист'];
            $poz_kl['ед.'] = $poz_zvka['ед.'];
            $poz_kl['Количество'] = $poz_zvka['Количество'];
            $poz_kl['Цена'] = $poz_zvka['Цена'];
            $poz_kl['Сумма'] = $poz_zvka['Сумма'];
            $poz_kl['Скидка, %'] = $poz_zvka['Скидка, %'];
            $poz_kl['Сумма скидки'] = $poz_zvka['Сумма скидки'];
            $poz_kl['Итого'] = $poz_zvka['Итого'];

            insert_query($poz_kl, "Копия ПКП в клиенте");
    }
    echo "<script>location.href='".$config["site_root"]."/view_line.php?table=411&line=".$kl['ID']."&edit_mode&back_url=".$base64_current_url."'</script>";
}
else
{
    echo "<script>alert('Такой клиент уже существует');
                  location.href='".$config["site_root"]."/view_line.php?table=411&line=".$kl['ID']."&back_url=".$base64_current_url."'</script>";
}
}


создает норм, только не переносит значения из позиции коммерческого предложения в "Копия ПКП в клиенте"

Сообщение отредактировал freeman: 02 Апрель 2014 - 13:14


#13 freeman

    Участник

  • Пользователи
  • PipPip
  • 29 сообщений

Отправлено 02 Апрель 2014 - 13:05

Просмотр сообщенияCbCoder (02 Апрель 2014 - 12:33) писал:

В самом запросе нет вывода поля f2331, только f6081

$sqlQuery1 = "SELECT `f6081` FROM

Теперь у меня подставляет 1 - а должно ВСЦ Д-57/1650/200

#14 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 02 Апрель 2014 - 14:28

Просмотр сообщенияfreeman (02 Апрель 2014 - 13:00) писал:

создает норм, только не переносит значения из позиции коммерческого предложения в "Копия ПКП в клиенте"

Не вижу видимых ошибок, проверяйте переменные.

Цитата

Теперь у меня подставляет 1 - а должно ВСЦ Д-57/1650/200

Если это поле с типом "связь", вы не получите прямого значения, там хранится id связанной записи. Необходимо обращение к связанной таблице.

#15 freeman

    Участник

  • Пользователи
  • PipPip
  • 29 сообщений

Отправлено 02 Апрель 2014 - 15:01

Просмотр сообщенияCbCoder (02 Апрель 2014 - 14:28) писал:

Не вижу видимых ошибок, проверяйте переменные.


вроде бы все верно. Поля в обеих таблицах идентичны (пишу с учетом регистра)
Прайс-лист - связь с таблицей Прайс-лист по полю наименование
ед. - текст
Количество - число
Цена - число
Сумма - число
Скидка, % - число
Сумма скидки - число
Итого - число
Заявка - связь с таблицей Заявки по ID

#16 freeman

    Участник

  • Пользователи
  • PipPip
  • 29 сообщений

Отправлено 02 Апрель 2014 - 15:04

Просмотр сообщенияCbCoder (02 Апрель 2014 - 14:28) писал:


Если это поле с типом "связь", вы не получите прямого значения, там хранится id связанной записи. Необходимо обращение к связанной таблице.

т.е. если у меня поле Прайс-лист (в таблице "Позиции счета) - это связь с таблицей Прайс-лист (в категории "Номенклатура) по наименованию, то мне необходимо обращаться и подставлять данные из Прайс-лист (в категории "Номенклатура")?

#17 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 02 Апрель 2014 - 17:28

В поле f2331 у вас что? Какой тип содержимого?

#18 freeman

    Участник

  • Пользователи
  • PipPip
  • 29 сообщений

Отправлено 02 Апрель 2014 - 21:50

Просмотр сообщенияCbCoder (02 Апрель 2014 - 17:28) писал:

В поле f2331 у вас что? Какой тип содержимого?

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

#19 freeman

    Участник

  • Пользователи
  • PipPip
  • 29 сообщений

Отправлено 02 Апрель 2014 - 21:51

Просмотр сообщенияfreeman (02 Апрель 2014 - 15:01) писал:

вроде бы все верно. Поля в обеих таблицах идентичны (пишу с учетом регистра)
Прайс-лист - связь с таблицей Прайс-лист по полю наименование
ед. - текст
Количество - число
Цена - число
Сумма - число
Скидка, % - число
Сумма скидки - число
Итого - число
Заявка - связь с таблицей Заявки по ID

А что делать с этим? Позиции не копируются (

#20 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 03 Апрель 2014 - 09:32

Просмотр сообщенияfreeman (02 Апрель 2014 - 21:50) писал:

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

Как у вас там может быть позиции счета, если они в массиве $poz_sch ? Вы подставляете $poz_sch['Прайс-лист'] в некий запрос к таблице 431 (что за таблица?) и оттуда уже берете это самое поле f2331. Про которое я и спрашиваю, что это за поле, точнее его тип.

Цитата

А что делать с этим? Позиции не копируются (

Я вам уже ответил - проверяйте переменные. Под проверкой имелось ввиду не только визуальный просмотр кода (который мне ничего не дал), а банальную отладку в виде вывода значений на экран, к примеру.





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных