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


Номера счетов


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

#1 Dinara

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

  • Пользователи
  • PipPipPip
  • 527 сообщений
  • Пол:Женщина
  • Город:Уфа

Отправлено 07 Июль 2015 - 10:26

Добрый день!
Есть 3 "Наши компании", от которых мы выставляем счета
1. Компания 1 - обозначение "А"
2. Компания 2 - обозначение "Т"
3. Компания 3 - обозначение "Ф"

Когда выставляем счет-подставляется поле "Наша компания" из контрагента и в зависимости от этого ставится номер, то есть может быть 3 счета с одинаковым номером, но от разных компаний формата: А1, Т1, Ф1 и т.д.
Вопросы: Получается нужно сделать текстовое поле, чтобы такое получалось? Как считать какой номер счета ставить, в зависимости от того, какая проставлена "Наша компания"? До этого у нас было просто вычисление на максимальный номер
if ($line['Номер'] == 0)
  {
	$max_num_res = data_select_field($table['id'], "MAX(`f437`) AS `max_num`");
	$max_num_row = sql_fetch_assoc($max_num_res);
	$line['Номер'] = intval($max_num_row['max_num']) + 1;
  }

Сообщение отредактировал Dinara: 07 Июль 2015 - 10:42


#2 CbCoder

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

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

Отправлено 07 Июль 2015 - 11:27

Цитата

Получается нужно сделать текстовое поле, чтобы такое получалось?

Да, конечно.

Цитата

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

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

Добавлено: нет, все таки не совсем также, т.к. там уже не чистый номер, т.е. напрямую MAX(`f437`) не получить. Нужно отнять вначале букву, т.е. первый символ: MAX(SUBSTRING(f437,2))

#3 Dinara

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

  • Пользователи
  • PipPipPip
  • 527 сообщений
  • Пол:Женщина
  • Город:Уфа

Отправлено 07 Июль 2015 - 11:43

Просмотр сообщенияCbCoder (07 Июль 2015 - 11:27) писал:

Да, конечно.



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

Добавлено: нет, все таки не совсем также, т.к. там уже не чистый номер, т.е. напрямую MAX(`f437`) не получить. Нужно отнять вначале букву, т.е. первый символ: MAX(SUBSTRING(f437,2))

Как к номеру в итоге букву в коде приписать? Что-то голову сломала,не могу понять как это вычисление написать((

#4 CbCoder

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

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

Отправлено 07 Июль 2015 - 12:26

$nomer_s_bukvoy = $bukva.$nomer

http://php.net/manua...tors.string.php

#5 Dinara

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

  • Пользователи
  • PipPipPip
  • 527 сообщений
  • Пол:Женщина
  • Город:Уфа

Отправлено 07 Июль 2015 - 12:39

Просмотр сообщенияCbCoder (07 Июль 2015 - 12:26) писал:

$nomer_s_bukvoy = $bukva.$nomer

http://php.net/manua...tors.string.php
Понимаю, что делаю очень сложно таким способом.. но можете подсказать как еще дописать условие, чтобы в каждом блоке свое увеличение было на +1, а не в общем?
  if  ($line['Наша компания']['ID'] == 2)
  {
	    $max_num_res = data_select_field($table['id'], "MAX(`f27821`) AS `max_num` ");
	    $max_num_row = sql_fetch_assoc($max_num_res);
	    $line['Номер'] = intval($max_num_row['max_num']) + 1;
	    $a="А";
	    $b=$line['Номер'];
	    $line['Н'] = $a . $b;
	   
  }
  elseif
  ($line['Наша компания']['ID'] == 3)
  {
	    $max_num_res = data_select_field($table['id'], "MAX(`f27821`) AS `max_num`");
	    $max_num_row = sql_fetch_assoc($max_num_res);
	    $line['Номер'] = intval($max_num_row['max_num']) + 1;
	    $a="Г";
	    $b=$line['Номер'];
	    $line['Н'] = $a . $b;
  }


#6 CbCoder

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

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

Отправлено 07 Июль 2015 - 12:46

А в запросах то где у вас условие выборки по текущей компании? Запросу наплевать на текущее значение $line['Наша компания']['ID'], он ищет по всей таблице. Добавьте третий аргумент в data_select_field.

Да, и забыли про MAX(SUBSTRING(f437,2)) вместо MAX(`f27821`). Такое ощущение, что совсем не читали мое первое сообщение <_<

#7 Dinara

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

  • Пользователи
  • PipPipPip
  • 527 сообщений
  • Пол:Женщина
  • Город:Уфа

Отправлено 07 Июль 2015 - 12:59

Просмотр сообщенияCbCoder (07 Июль 2015 - 12:46) писал:

А в запросах то где у вас условие выборки по текущей компании? Запросу наплевать на текущее значение $line['Наша компания']['ID'], он ищет по всей таблице. Добавьте третий аргумент в data_select_field.

Да, и забыли про MAX(SUBSTRING(f437,2)) вместо MAX(`f27821`). Такое ощущение, что совсем не читали мое первое сообщение <_<
я читала, просто делаю по другому теперь...так как вы написали я точно сама не напишу, а тут вроде какую-то часть да сделала)
не могу найти как туда вставить запрос формата "если поле f111=А", ведь в таком случае будет искать только среди А и ставить максимальное..

Сообщение отредактировал Dinara: 07 Июль 2015 - 13:04


#8 CbCoder

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

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

Отправлено 07 Июль 2015 - 13:36

Я ж подсказал - условие ставите третьим аргументом, формат как в любом другом запросе:

$max_num_res = data_select_field($table['id'], "MAX(`f27821`) AS `max_num`", "f111=",$line['Наша компания']['ID']); // 111 - id поля Наша компания

Т.е. будут отобраны строки, у которых "Наша компания" такая же как в текущей строке, и уже по ним будет подсчитан максимальный номер.

#9 Dinara

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

  • Пользователи
  • PipPipPip
  • 527 сообщений
  • Пол:Женщина
  • Город:Уфа

Отправлено 07 Июль 2015 - 14:40

Спасибо больше!!))почему-то через where пыталась сделать :rolleyes:

#10 Dinara

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

  • Пользователи
  • PipPipPip
  • 527 сообщений
  • Пол:Женщина
  • Город:Уфа

Отправлено 24 Июль 2015 - 09:20

	
   if
  (($line['Наша компания']['ID'] == 5) and ($line['Номер'] == ''))
  {
	    $max_num_res = data_select_field($table['id'], "MAX(`f27891`) AS `max_num`", "f850=",$line['Наша компания']['ID']);
	    $max_num_row = sql_fetch_assoc($max_num_res);
	    $line['Н'] = intval($max_num_row['max_num']) + 1;
	    $a="Ф";
	    $b=$line['Н'];
	    $line['Номер'] = $a . $b;
  }
 
	 elseif ( ($line['Номер'] == '') and ($line['Наша компания']['ID'] != 5) )
  {
$max_num_res = data_select_field($table['id'], "MAX(`f848`) AS `max_num` ");
		 $max_num_row = sql_fetch_assoc($max_num_res);
	    $line['Номер'] = intval($max_num_row['max_num']) + 1;
	
  }
 
И снова я!) поставила этот код,корректно работало,когда проверяла. Поле номер-Тектовое. Теперь проверяю второе условие-ставит в любом случае номер 1000, а не ищет максимальный в таблице(

#11 CbCoder

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

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

Отправлено 24 Июль 2015 - 10:07

Вы забыли во второй запрос поставить условие "f850!=5" (что значит "Наша компания не равна 5")





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

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